web漏洞解析之SQL注入绕过技术

这里我还没有配置好书中所测试的环境,所述的测试地址目前无法连接。我便记录了书中提到的测试步骤及调试方法,方便日后查看和演练。如果有配置了环境的小伙伴们可以一试。

 1.大小写绕过注入

大小写绕过注入的测试地址:http://127.0.0.1/sql/1.php?id=1

访问id=1',页面报出mysql错误;访问id=1 and 1=1,页面返回"no back",显然信息被拦截了,说明关键词有过滤。使用关键词大小写方式尝试绕过,如And 1=1,访问id=1 And 1=1 时页面返回与id=1相同的结果,访问id=1 And 1=2 时页面返回与id=1不同的结果,得出存在SQL注入漏洞的结论。

使用order by 查询字段数量,发现会被拦截,利用修改关键字大小写来绕过它。当order修改为Order后,页面显示正常,说明by并没有被拦截,可查询到数据库表中存在的字段数。

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

2.双写绕过注入

双写绕过注入的测试地址:http://127.0.0.1/sql/2.php?id=1

访问id=1',页面报出mysql错误;访问id=1 and 1=1,仍然报出MySQL的错误,错误信息中显示输入的and 1=1 变成了1=1.可知关键字and 被过滤了,尝试使用双写的方式绕过,如anandd 1=1,当and 被过滤后,anandd变成了and,这是传入数据库中的语句是and 1=1 便可成功执行并返回页面。

接着,输入anandd 1=2,返回错误信息,判断页面参数存在SQL注入漏洞。

当访问id=1 order by 3,MySQL的错误信息若为“der by 3”,只需双写or , 如“ororder by 3”便可,后面的注入过程与Union注入一致。

3.编码绕过注入

编码绕过注入的测试地址为:http://127.0.0.1/sql/3.php?id=1

访问id=1',页面报出mysql错误;访问id=1 and 1=1和id=1 and 1=2 时,发现关键字and 被拦截。尝试使用URL全编码的方式绕过拦截。由于服务器会自动对URL进行一次URL解码,所以需要把关键词编码两次。注意URL编码需选择全编码,而不是普通的URL编码。

后面的注入过程与Union注入的一致,只需判断过滤的关键词,并经过两次URL全编码即可。

4.内联注释绕过注入

内联注释绕过注入的测试地址: http://127.0.0.1/sql/4.php?id=1

访问id=1',页面报出mysql错误;访问id=1 and 1=1和id=1 and 1=2 时,发现页面提示" no hack ",即关键字被拦截。尝试使用内联注释绕过。访问 id=1/*!and*/1=1时,页面返回与 id=1相同的结果;访问 id=1/*!and*/1=2时,页面返回与 id=1不同的结果。

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

5.SQL注入修复建议

(1)过滤危险字符

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

使用过滤的方式,在一定程度上可以防止SQL注入漏洞,但仍然存在被绕过注入的可能。

(2)使用预编译语句

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值