长亭百川云 - 文章详情

Github 星标5k,简单易上手的WAF应用

lutixia

60

2024-07-16

什么是WAF?

WAF(Web Application Firewall)是一种用于保护Web应用程序的安全设备或服务。它通过分析HTTP/HTTPS流量来检测和阻止针对Web应用的恶意攻击,如SQL注入、跨站脚本(XSS)、文件包含等。

WAF的主要功能:

  • 过滤恶意流量

  • 防御常见的Web攻击

  • 保护敏感数据

  • 提供实时监控和报告

基于Nginx+Naxsi构建WAF

# 安装依赖  
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的路径找到配置文件,上面我将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和naxsi.rules规则文件

# 复制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/";

启动nginx

/usr/local/nginx/sbin/nginx

使用wafw00f测试WAF

wafw00f是一个用于识别和指纹Web应用防火墙(WAF)的工具。

安装wafw00f:

cd /usr/src/  
git clone https://github.com/EnableSecurity/wafw00f.git  
cd wafw00f  
yum install python3 python3-pip -y  
python3 setup.py install

使用wafw00f:

基本用法:

```# 没有使用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

跨站脚本(XSS)测试

这里用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脚本会被拦截。

SQL注入拦截:

[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)测试

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>

wafw00f的工作原理:

  1. 发送特定的HTTP请求。

  2. 分析响应,查找WAF特征。

  3. 根据预定义的指纹库识别WAF类型。

WAF对网站的好处

  • 防御常见Web攻击:SQL注入、XSS、RFI等攻击可以被及时拦截,保护您的数据库和用户信息。

  • 减轻应用层DDoS攻击:WAF可以识别和阻止异常的请求模式,有助于缓解某些类型的DDoS攻击。

  • 保护敏感数据:通过拦截未经授权的数据访问尝试,WAF可以帮助保护敏感信息。

  • 提高合规性:许多行业标准要求使用WAF,配置WAF有助于满足合规要求。

  • 减少漏洞暴露:即使应用程序存在漏洞,WAF也可以作为一道额外的防线,减少漏洞被利用的风险。

  • 自定义安全策略:你可以根据自己网站的具体需求定制规则,提供更精确的保护。

  • 安全监控和日志:WAF提供详细的安全日志,有助于及时发现和分析潜在的安全威胁。

注意事项:

  • 使用wafw00f进行测试时,确保您有权限对目标网站进行测试。

  • 过度或频繁的测试可能被视为攻击行为。

  • wafw00f可能无法识别所有类型的WAF,特别是自定义或新型WAF。

更多使用技巧,可以查看官网文档进行测试。

项目地址:

https://github.com/EnableSecurity/wafw00f
相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2