SQL注入---WAF绕过

WAF绕过可大致分为三类:

1.白盒绕过

2.黑盒绕过

3.fuzz测试

白盒绕过:

通过代码分析,来进行绕过。

黑盒绕过:

1.架构层面绕过waf

2.资源限制角度绕过waf

3.协议层面绕过waf

4.规则层面绕过waf

(1)架构层面绕过waf

1.寻找源网站绕过waf检测

主要针对的是云waf,找到源网站的真实地址,进行绕过,有点像CDN

云waf是部署在远端的拦截设置,可检测是否含有注入代码并进行拦截

SQL注入---WAF绕过

 

 有CDN节点的话有3种方法绕过:

1.可以通过超级Ping的方式,网上有很多,可以知道是否存在CDN节点,不同地区得到的ip地址返回不同。

2.可以进行注册,注册信息是不经过CDN的,直接访问源网站,比如发送邮件通过返回email数据的网址得到源网站的真实地址。

3.可以通过国外的一些ip地址进行访问,因为有些小网站不对外网设置CDN,因而可以直接访问源网站。

SQL注入---WAF绕过

 2.通过同网站绕过waf防护

在一个网段中,可能经过的数据不会经过云waf,从而实现绕过。

渗透同一网段中的另一台机器3,通过3和2的数据交互,可以间接渗透2

SQL注入---WAF绕过

 

 (2)资源限制角度绕过waf

一般waf的执行需要优先考虑业务优先的原则,所以对于构造较大、超大数据包可能不会进行检测,从而实现绕过waf

网站中数据传输有get和post两种形式,当传递id时,waf会对get进行检测,而不会对post进行检测,因为一般post传输的数据较大,且前台不可见,所以可以通过post进行注入绕过waf,一般存在于一些上传中,传一些图片之类的。

(3)协议层面绕过waf

1.协议未覆盖过waf     比如由于业务需要,只对get型进行检测,post数据选择忽略。

2.参数污染              index?id=1&id=2     waf可能只对id=1进行检测。

(4)规则层面的绕过

1.sql注释符绕过

~1.union/**/select我们将union select之间的空格使用注释符进行替换(使用于对union select之间的空格进行检测的情况)

~2.union/*sdhaidhoahdois*/select我们在注释符中间填充乱七八糟的内容。

~3.union/*aaaaaaaaabbbbbccccccdddddeeeee%%%%%%%*/select构造较大数据。

~4./*!union select*/内联注释      我们使用内联注释,mysql特有。

2.空白符绕过

~1.mysql空白符:%09;%0A:%0B;%0D;%20;%0C;%A0;/*XXX*/

~2.正则空白符:%09;%0A:%0B;%0D;%20;

%25其实就是百分号    %25A0就是空白符

3.函数分隔符号

将一个函数进行分割concat()

caoncat%2520(

concat/**/(

concat%250c(

concat%25a0(

3.浮点数词法解释

waf对于id=1可以进行检测,但是对于id=1E0、id=1.0、id=\N可能就无法进行检测

5.利用error-based进行sql注入

SQL注入---WAF绕过

6.mysql特殊语法

 SQL注入---WAF绕过

 7.大小写绕过

如果对关键字and or union等进行了过滤,可以考虑使用大小写混合的方法

Qr aNd UniOn

但是很多时候有函数会对部分大小写进行过滤,这个时候我们可以考虑使用双写的方法

8.关键字重复

OORr->or

9.关键字替换

如果还是无法绕过,可以考虑替换的方法

and->&&        or->||        like可以替换=       <>等价于!=

方法有很多,这里可能列举不足。。。主要就是看谁思路更猥琐

fuzz测试:

可以使用burpsuite配合手工进行测试,后期测试成功后再用脚本进行处理。

SQL注入---WAF绕过

上一篇:MySql 子查询


下一篇:MySql 分页查询