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: