Web安全原理剖析(十二)——SQL注入绕过技术


三、SQL注入绕过技术

3.1 大小写绕过注入

  使用关键字大小写的方式尝试绕过,如And 1=1(任意字母大小写都可以,如aNd 1=1,AND 1=1等),就可以看到访问id=1 And 1=1时页面返回与id=1相同的结果,访问id=1 And 1=2时页面返回与id=1不同的结果,得出存在SQL注入漏洞的结论。

  使用order by查询字段数量,还是利用修改关键字大小写来绕过它,尝试只改order这个单词,结果发现order改成Order后,页面显示正常,说明by并没有被拦截,最终通过尝试。

  接着,使用Union方法完成此次注入,如果仍然遇到关键字被拦截,则尝试使用修改大小写的方式绕过拦截。


3.2 双写绕过注入

  关键字and被过滤时,可以尝试使用双写的方式绕过,如anandd 1=1,当and被过滤后,anandd变成了and,所以这时传入数据库的语句是and 1=1。

  当访问id=1 order by 3时,如果MySQL的错误信息为“der by 3”,说明这里并没有过滤order整个单词,而是仅过滤or,因此只需要双写or即可。

  后面的注入过程与Union注入的一致。


3.3 编码绕过注入

  如果发现关键字and被拦截,可以尝试使用URL全编码的方式绕过拦截。由于服务器会自动对URL进行一次URL解码,所以需要把被拦截的关键字编码两次。这里需要注意的是,URL编码需选择全编码,而不是普通的URL编码。关键字and进行两次URL全编码的结果是%25%36%31%25%36%65%25%36%34。


3.4 内联注释绕过注入

  内联注释绕过即将被拦截的关键字写在注释中,通过内敛的写法执行完整语句,例如id=1 /*!and*/ 1=1。


3.5 SQL注入修复建议

  常用的SQL注入漏洞修复建议有两种。

  1. 过滤危险字符

  多数CMS都采用过滤危险字符的方式,例如,采用正则表达式匹配union、sleep、load_file等关键字,如果匹配到,则退出程序。

  1. 使用预编译语句

  使用PDO预编译语句,需要注意的是,不要将变量直接拼接到PDO语句中,而是使用占位符进行数据库的增加、删除、修改、查询。


评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Phanton03167

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值