WAF(Web Application Firewall)是一种用于保护Web应用程序的安全设备或服务。它通过分析HTTP/HTTPS流量来检测和阻止针对Web应用的恶意攻击,如SQL注入、跨站脚本(XSS)、文件包含等。
过滤恶意流量
防御常见的Web攻击
保护敏感数据
提供实时监控和报告
# 安装依赖
yum install zlib-devel pcre-devel -y
# 下载源码
wget http://nginx.org/download/nginx-1.20.1.tar.gz
wget https://github.com/nbs-system/naxsi/archive/1.3.tar.gz -O naxsi-1.3.tar.gz
tar xzf nginx-1.20.1.tar.gz
tar xzf naxsi-1.3.tar.gz
# 编译安装
cd nginx-1.20.1
./configure --prefix=/usr/local/nginx --add-module=../naxsi-1.3/naxsi_src
make && make install
# 可以看到如下信息,则表示安装成功:
[root@lutixia nginx-1.20.1]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.20.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
configure arguments: --add-module=../naxsi-1.3/naxsi_src --prefix=/usr/local/nginx
根据自己定义的nginx的路径找到配置文件,上面我将nginx安装在/usr/local/nginx,所以配置文件在/usr/local/nginx/conf/nginx.conf,在http指令块中修改如下信息
`http { # 引用naxsi的规则 include /usr/local/nginx/conf/naxsi_core.rules; server { listen 80; server_name localhost; location / { `
`root html;`
`# 不一定非要放在这里,也可以放在反代路径下`
`include /usr/local/nginx/conf/naxsi.rules; } location /RequestDenied { return 403; } } }`
# 复制naxsi_core.rules文件
cp ../naxsi-1.3/naxsi_config/naxsi_core.rules /usr/local/nginx/conf/
# 创建/usr/local/nginx/conf/naxsi.rules文件
SecRulesEnabled;
DeniedUrl "/RequestDenied";
CheckRule "$SQL >= 8" BLOCK;
CheckRule "$RFI >= 8" BLOCK;
CheckRule "$TRAVERSAL >= 4" BLOCK;
CheckRule "$EVADE >= 4" BLOCK;
CheckRule "$XSS >= 8" BLOCK;
# 测试白名单规则
BasicRule wl:1015,1016 "mz:$ARGS_VAR:foo|$URL:/bar/";
/usr/local/nginx/sbin/nginx
wafw00f是一个用于识别和指纹Web应用防火墙(WAF)的工具。
cd /usr/src/
git clone https://github.com/EnableSecurity/wafw00f.git
cd wafw00f
yum install python3 python3-pip -y
python3 setup.py install
基本用法:
```# 没有使用waf的web站点: /usr/local/bin/wafw00f -v http://localhost ______ / \ ( W00f! ) \ ____/ ,, __ 404 Hack Not Found |`-.__ / / __ __ /" _/ /_/ \ \ / / *===* / \ \_/ / 405 Not Allowed / )__// \ / /| / /---` 403 Forbidden \\/` \ | / _ \ `\ /_\\_ 502 Bad Gateway / / \ \ 500 Internal Error `_____``-` /_/ \_\ ~ WAFW00F : v2.2.0 ~ The Web Application Firewall Fingerprinting Toolkit [*] Checking http://localhost ```
`[+] Generic Detection results:`
`# 提示未检测到WAF `
```[-] No WAF detected by the generic detection [~] Number of requests: 7 # 有使用waf的web站点: /usr/local/bin/wafw00f http://localhost ______ / \ ( W00f! ) \ ____/ ,, __ 404 Hack Not Found |`-.__ / / __ __ /" _/ /_/ \ \ / / *===* / \ \_/ / 405 Not Allowed / )__// \ / /| / /---` 403 Forbidden \\/` \ | / _ \ `\ /_\\_ 502 Bad Gateway / / \ \ 500 Internal Error `_____``-` /_/ \_\ ~ WAFW00F : v2.2.0 ~ The Web Application Firewall Fingerprinting Toolkit [*] Checking http://localhost [+] Generic Detection results: [*] The site http://localhost seems to be behind a WAF or some sort of security solution [~] Reason: The server returns a different response code when an attack string is used. Normal response code is "200", while the response code to cross-site scripting attack is "403" [~] Number of requests: 5 ```
详细输出:
wafw00f -v https://example.com
测试多个网站:
wafw00f -i list_of_sites.txt
这里用flask部署了一个简单的后端应用,然后修改nginx的配置文件代理这个应用,详细步骤就省略了,下面是简单的思路:
# 创建后端应用
[root@lutixia ~]# cat app.py
from flask import Flask, request
app = Flask(__name__)
@app.route('/page')
def page():
user_input = request.args.get('input', '')
return f'<h1>输出用户输入信息</h1><p>{user_input}</p>'
if __name__ == '__main__':
app.run(debug=True, port=8080)
# 修改nginx配置文件,添加代理路径和引用规则:
location /page {
include /usr/local/nginx/conf/naxsi.rules;
proxy_pass http://127.0.0.1:8080;
}
# 添加后端默认页面信息:
cat /usr/local/nginx/html/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>XSS攻击测试</title>
</head>
<body>
<h1>XSS攻击测试</h1>
<form method="GET" action="/page">
<label for="input">请输入用户名:</label>
<input type="text" id="input" name="input">
<button type="submit">提交</button>
</form>
</body>
</html>
# 最后重启服务,访问测试
配置waf后
恶意xss脚本会被拦截。
[root@lutixia ~]# curl "http://localhost/page?id=1' OR '1'='1"
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>
RFI攻击利用了web应用程序在包含文件时的不安全处理。攻击者试图让服务器包含并执行一个位于远程服务器上的恶意文件。
[root@lutixia ~]# curl "http://localhost/page?file=http://malicious-site.com/malware.php"
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>
得到404文件不存在错误,不是403禁止错误。
[root@lutixia ~]# curl "http://localhost/bar/?foo=test"
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>
发送特定的HTTP请求。
分析响应,查找WAF特征。
根据预定义的指纹库识别WAF类型。
防御常见Web攻击:SQL注入、XSS、RFI等攻击可以被及时拦截,保护您的数据库和用户信息。
减轻应用层DDoS攻击:WAF可以识别和阻止异常的请求模式,有助于缓解某些类型的DDoS攻击。
保护敏感数据:通过拦截未经授权的数据访问尝试,WAF可以帮助保护敏感信息。
提高合规性:许多行业标准要求使用WAF,配置WAF有助于满足合规要求。
减少漏洞暴露:即使应用程序存在漏洞,WAF也可以作为一道额外的防线,减少漏洞被利用的风险。
自定义安全策略:你可以根据自己网站的具体需求定制规则,提供更精确的保护。
安全监控和日志:WAF提供详细的安全日志,有助于及时发现和分析潜在的安全威胁。
使用wafw00f进行测试时,确保您有权限对目标网站进行测试。
过度或频繁的测试可能被视为攻击行为。
wafw00f可能无法识别所有类型的WAF,特别是自定义或新型WAF。
更多使用技巧,可以查看官网文档进行测试。
https://github.com/EnableSecurity/wafw00f