SQL注入原理和大致方法

上一篇 / 下一篇  2012-08-19 11:00:32 / 个人分类:web测试

一、简介:
  SQL注入就是通过SQL命令插入到(web表单提交或输入域名或页面请求的)查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
 
二、原因:
  加入应用程序存在下列情况,则存在sql injection的风险:
1、在应用程序中使用字符连接方式组织成动态sql指令
2、应用程序连接数据库使用了权限过大的用户,比如直接用root/sa等默认用户,木有直接开辟单独为应用使用的用户(select/insert/update[/delete/create])
3、在数据库开放了不必要但权力过大的功能
4、太过信任使用者的输入,木有限制输入的子元数,且未对输入进行检查(转义/过滤)
 
三、作用原理:
1、SQL可使用;串接不同的SQL指令
2、SQL命令,对传入的字符参数使用‘(单引号)包起来
3、SQL命令,可以夹带注解/* */或者//
4、在应用动态拼接SQL时,未过滤’进行处理,就导致最终执行时,被恶意篡改了原来的SQL用法
 
比如,某个sql如下:
  $sql = "select * from users where (name = '" + $username + "') and (pw = '" + password +"');"
 
加入,填入username = "'or '1'='1";password = "' or '1'='1"(引号分号去掉)
则执行SQL时,就变成了
  $sql = "select * from users where (name='' or '1'='1') and (pw='' or '1'='1');"
实际上,就是$sql="select * from user",如果前台表单处,又木有对字段进行格式校验,就造成了空账号登录
 
四、可能造成的伤害
1、资料外泄
2、数据库结构外泄(select * from sys.tables)
3、数据库管理员被篡改(alter login sa with password='123456')
4、取得系统高级权限后,可能在网页上加入恶意链接或者XSS
5、经由数据库提供的作业系统,让黑客得以修改和控制作业系统
6、删除数据库数据
 
五、避免的方法:
1、设计应用时,完全使用参数化查询来设计数据库存取功能
2、拼接SQL字串之前,先对传入的数据进行检查(转义/过滤)
3、选择使用对应平台语言其他预防SQL注入的插件
4、使用其他方式连接数据库,比如视图,或者其他连接工具,不直接链接数据库
5、使用SQL防注入系统
 
六、注入的方法总结:
1、整数型参数判断
A、直接加’
B、and 1=1
C、and 1=2
如果A,C运行异常,B正常则存在注入风险
 
2、字符型参数判断
A、直接加‘
B、'and '1'='1
C、’and '1'='2
如果A、C运行异常,B正常,则存在注入风险
 
3、搜索型关键字
A、%' and 1=2 and '%'='%
B、%' and 1=1 and '%'='%
 
 
 
 
 
 
 
 

TAG:

 

评分:0

我来说两句

Open Toolbar