本示例仅做测试使用,进行学习交流,请自觉遵守法律法规!
本文中将 Web 应用防火墙简称为 WAF
问题描述
搭建了 WAF 的环境,如何测试WAF是否防护了相关非法请求,如数字型 SQL 注入的请求。
问题分析
搭建完 WAF 环境后,后端服务可以使用相关靶场,然后手动模拟非法请求,然后查看请求通过WAF时,WAF 的响应,来判断是否拦截了相关的请求,通过日志查看具体的请求内容。
解决方案
本文在 WAF 搭建成功,通过WAF可以访问到后端服务基础上,WAF环境的搭建,您可以参考此链接。为验证 WAF 的防护能力及相关日志,故后端服务使用本身存在漏洞的靶场,仅做测试使用。
1、正常访问后端
使用 curl 进行 Get 请求测试。
┌──(root)-[~]
└─# curl -I http://shodan.xxxx.cn/sql/Less-2/?id=1
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 28 Feb 2022 07:58:41 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.6.9
Access-Control-Allow-Origin: *
Access-Control-Request-Method: GET,POST,PUT
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: X-Custom-Heade
Vary: Accept-Encoding
可以看到请求正常发送,可以拿到正常返回。
2、手动构造包含数字型 sql 注入的非法请求,如下:
┌──(root)-[~]
└─# curl -X POST http://shodan.xxxx.cn/sql/Less-2/ -d "id=1%20union%20select%201,2,3" -v
...
< HTTP/1.1 403 Forbidden
< Server: nginx
< Date: Mon, 28 Feb 2022 08:00:56 GMT
< Content-Length: 98
< Connection: keep-alive
< Content-Type: text/html
<
* Connection #0 to host shodan.xxxx.cn left intact
<!DOCTYPE html> <html> <meta charset="utf-8"> <body> <p> !!! 非法访问 !!! </p> </body> </html>
可以看到当构造一个非法请求时,返回了 403,此返回在WAF控制台——防护策略——访问管控——自定义拦截响应中配置,如下:
所以可以看出此非法请求是WAF进行了拦截。
3、到 WAF 控制台——日志管理查看相关日志,如下: 点开详情,如下:
可以看到post请求的 body:id=1%20union%20select%201,2,3(%20为url编码后的空格)命中了 SQL_Injection_strict 规则,被 WAF 拦截。
如果您有其他问题,欢迎您联系火山引擎技术支持服务