本示例仅做测试使用,进行学习交流,请自觉遵守法律法规!
本文中将 Web 应用防火墙简称为WAF
问题描述
想使用 WAF 的防敏感信息泄露,如何配置。
问题分析
WAF 的防敏感信息功能可以对返回的响应信息进行检测,防止用户的敏感信息(身份证号、手机号码、银行卡等)泄漏。
解决方案
本文在 WAF 搭建成功,通过 WAF 可以访问到后端服务基础上,WAF环境的搭建,您可以参考此链接。
1.正常访问后端
使用 curl 发送 Get 请求测试。
┌──(rootkali)-[~/Test/waf]
└─# curl -i shodan.xxxx.cn/testinfo.php?id=phone
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 02 Mar 2022 04:56:52 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
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
<html>
16678xxx127
</html>
可以看到在没有配置防敏感信息泄露时,请求正常发送,参数为 id=phone,返回码为 200,且能够返回电话号码内容。
2.开启防敏感信息泄露
规则配置如下: 规则配置为拦截包含手机号的响应。 使用 GET 方法进行测试,:
┌──(root)-[~/Test/waf]
└─# curl -i shodan.xxxx.cn/testinfo.php?id=phone
HTTP/1.1 403 Forbidden
Server: nginx
Date: Wed, 02 Mar 2022 05:02:18 GMT
Content-Length: 14
Connection: keep-alive
blocked by waf
从上面可以看到使用 GET 方法,参数 id=phone 进行测试,包含手机号码的响应被拦截。 使用 POST 方法进行测试:
┌──(root)-[~/Test/waf]
└─# curl -X POST http://shodan.xxxx.cn/testinfo.php -d "id=phone" -v
> POST /testinfo.php HTTP/1.1
> Host: shodan.xxxx.cn
> User-Agent: curl/7.81.0
> Accept: */*
> Content-Length: 8
> Content-Type: application/x-www-form-urlencoded
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 403 Forbidden
< Server: nginx
< Date: Wed, 02 Mar 2022 05:08:00 GMT
< Content-Length: 14
< Connection: keep-alive
<
* Connection #0 to host shodan.xxxx.cn left intact
blocked by waf
从上面可以看到使用 POST 方法,参数 id=phone 进行测试,包含手机号码的响应也被拦截。 查看攻击日志: 下面测试非电话格式的数字输出:
┌──(rootkali)-[~/Test/waf]
└─# curl -i http://shodan.xxxx.cn/testinfo.php?id=number
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 02 Mar 2022 05:13:15 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
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
<html>
12345678901
</html>
可以看到非电话格式的数字可以正常输出。 综上,防敏感信息泄露会拦截格式为电话、身份证、银行卡的内容,不影响非上述格式内容的响应。 如果您有其他问题,欢迎您联系火山引擎技术支持服务