mysql 关键词绕过_SQL注入绕过技术

原标题:SQL注入绕过技术

1、大小写绕过注入

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

访问id=1',发现页面报出MySQL错误,当访问id=1 and 1=1时,页面返回“no hack”,显然是被拦截了,说明有关键词被过滤。使用关键字大小写的方式尝试绕过,如And 1=1(任意字母大小写都可以,如aNd 1=1,AND 1=1等),可以看到访问id=1 And 1=1时页面返回与id=1相同的结果,访问id=1 And 1=2时页面返回与id=1不同的结果,得出存在SQL注入漏洞的结论,如图1和图2所示。

151ff5f5954641dbd5adc6f4a1491c35.png

图1 访问id=1 And 1=1的结果

5d6a8b849bf2588abc5e0e8acb8a349a.png

图2 访问id=1 And 1=2的结果

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

35ab757145d32985931dfbeb14a04cce.png

图3 order by被拦截

6050d44a3ec610d5a2a422fa67be0a29.png

图4 Order by没被拦截

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

2、双写绕过注入

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

访问id=1',发现页面报出MySQL错误,接着访问id=1 and 1=1,页面依然报出MySQL的错误,但是从错误信息中可以看出,输入的and 1=1变成了1=1,如图5所示。

6b8145c1b8ca121c302063593c949238.png

图5 关键字and被过滤

因此可以得知,关键字and被过滤了。这时尝试使用双写的方式绕过,如anandd 1=1,当and被过滤后,anandd变成了and,所以这时传入数据库的语句是and 1=1,结果如图6所示,成功执行并返回正常页面。

1c90a66cf81c672a01f53aaedcc4fac3.png

图6 关键字anandd被过滤后正确执行

接着,输入aandnd 1=2,返回错误信息,判断页面参数存在SQL注入漏洞。当访问id=1 order by 3时,MySQL的错误信息为“der by 3”,如图7所示,所以这里并没有过滤order整个单词,而是仅过滤or,因此只需要双写or即可,结果如图8所示。

18d12916cee50f6c95b6df8d29e6ebc0.png

图7 过滤了关键字or

bef5b078d9e7c26471941bdbd904f0a6.png

图8 双写关键字or

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

3、编码绕过注入

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

访问id=1',发现页面报出MySQL错误,接着访问id=1 and 1=1和id=1 and 1=2时,发现关键字and被拦截。尝试使用URL全编码的方式绕过拦截。由于服务器会自动对URL进行一次URL解码,所以需要把关键词编码两次,这里需要注意的地方是,URL编码需选择全编码,而不是普通的URL编码。如图9所示,关键字and进行两次URL全编码的结果是%25%36%31%25%36%65%25%36%34,访问id=1%25%36%31% 25%36%65%25%36%34 1=1时,页面返回与id=1相同的结果,如图10所示,访问id=1 %25%36%31%25%36%65%25%36%34 1=2时,页面返回与id=1不同的结果,如图11所示,所以该网址存在SQL注入漏洞。

634b173f9f525ba61753d6be7e599c06.png

图9 两次URL编码关键字and

1dab63ff2ee8300afa113a093817671e.png

图10 访问id=1 and 1=1时的结果

4bd0883ffe8d6236d40ab4d799f178f9.png

图11 访问id=1 and 1=2时的结果

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

4、内联注释绕过注入

内联注释绕过注入的测试地址:http://ccctf.cn/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不同的结果,如图12和图13所示。

3158a63d4e93c9aaf961c58215584069.png

图12 访问id=1 /*!and*/1=1时的结果

5ea935d3f126f8a1d5e7c474771800c1.png

图13 访问id=1 /*!and*/1=2时的结果

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

5、SQL注入修复建议

常用的SQL注入漏洞的修复方法有两种。

(1)过滤危险字符

多数CMS都采用过滤危险字符的方式,例如,采用正则表达式匹配union、sleep、load_file等关键字,如果匹配到,则退出程序。例如80sec的防注入代码,如下所示。

950f913f660fef564068ca8accb82fb5.png

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

(2)使用预编译语句

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

责任编辑:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值