WAF绕过主要是SQL注入,其他的WAF绕过方法在原理上都差不多。
1.WAF解析数据过程中
2.WAF匹配库匹配中
一些常见的方法
1.大小写混合
在规则匹配时只针对了特定大写或者小写的情况,在实战中可以通过混合大小写方法绕过
比如sql语句: unION sELEct 1,2,3
2.URL编码
很少的WAF不会对普通字符进行URL解码
正常语句:union select 1,2,3
编码过后:1.union%20select%201%2C2%2C3
2.\u0075\u006e\u0069\u006f\u006e\u0025\u0032\u0030\u0073\u0065\u006c\u0065\u0063\u0074\u0025\u0032\u0030\u0031\u0025\u0032\u0043\u0032\u0025\u0032\u0043\u0033
还有一种情况就是URL二次编码,WAF一般只进行一次解码,而如果web程序进行了额外的URL解码,即可绕过。
3.替换关键字
WAF才用替换或者删除敏感词汇,比如union,order by这些敏感词,如果只匹配一次就很容易绕过
正常sql语句:union select 1,2,3
替换过后:ununionion selselectect 1,2,3
4.使用注释
注释在截断SQL语句中用得比较多,在绕过时主要使用其代替空格,适用于检测过程中没有识别注释或者替换掉了注释WAF
5.多参数请求拆分
对于多个参数拼接到同一个SQL语句中的情况,可以将注入语句分割插入
6.HTTP参数污染
HTTP参数污染是指当同一参数出现多次,不同的中间件会解析成不同的结果,
这个比较适合并且很多,类似的中间件太多,不做具体叙述
7.生僻函数
使用生僻函数代替常见的函数,在报错注入中使用polygon()函数替换常用的updatexml(),
8.寻找网站源ip
对于云防护的网站这个方法比较有效,只要找到真实网站ip,然后通过ip直接访问地址,就不用访问dns服务器进行解析,就可以绕过云WAF的检测
9.cookie
在正常的参数提取中,是GET/POST/COOKIE依次顺序,如果WAF只检测了GET/POST参数,而没有cookie,可以将注入语句放入cookie中进行绕过