WAF-A-MoLE:针对Web应用防火墙的基于变异的模糊测试工具
字数 1619 2025-08-13 21:33:29
WAF-A-MoLE:基于变异的WAF模糊测试工具教学文档
1. 工具概述
WAF-A-MoLE是一款专门用于测试基于机器学习(ML)的Web应用防火墙(WAF)的模糊测试工具。它通过生成语义不变的SQL注入查询变种,来发现WAF分类器中的安全盲点。
主要特点:
- 基于变异的模糊测试方法
- 专注于SQL注入攻击的测试
- 语义保留的变异操作
- 支持评估WAF产品的稳健性
2. 工具体系架构
WAF-A-MoLE采用以下工作流程:
- Payload池管理:初始Payload被插入到管理优先级队列的Payload池中
- 迭代过程:每次迭代从池头部取出Payload传递给模糊器
- 变异操作:模糊器应用随机变异操作符生成新Payload
3. 变异操作详解
当前版本支持的SQL语义保留变异操作:
3.1 大小写切换
- 示例:
admin' OR 1=1#⇒admin' oR 1=1# - 原理:随机改变SQL关键字的大小写
3.2 空格替换
- 示例:
admin' OR 1=1#⇒admin'\t\rOR\n1=1# - 原理:用制表符(\t)、回车符(\r)、换行符(\n)等替代空格
3.3 注释注入
- 示例:
admin' OR 1=1#⇒admin'/**/OR 1=1# - 原理:在SQL语句中插入不影响执行的注释
3.4 注释重写
- 示例:
admin'/**/OR 1=1#⇒admin'/*xyz*/OR 1=1#abc - 原理:修改已有注释的内容
3.5 整型编码
- 示例:
admin' OR 1=1#⇒admin' OR 0x1=(SELECT 1)# - 原理:将数字常量转换为十六进制或其他表示形式
3.6 操作切换
- 示例:
admin' OR 1=1#⇒admin' OR 1 LIKE 1# - 原理:用语义等效的不同操作符替换
3.7 逻辑恒量
- 示例:
admin' OR 1=1#⇒admin' OR 1=1 AND 0<1# - 原理:添加始终为真的逻辑表达式
4. 环境要求
4.1 Python库依赖
- numpy
- keras
- scikit-learn
- joblib
- sqlparse
- networkx
- Click
5. 安装指南
- 克隆项目仓库:
git clone https://github.com/AvalZ/WAF-A-MoLE.git
- 安装依赖:
pip install -r requirements.txt
6. 使用说明
6.1 基本命令
wafamole --help
6.2 主要功能命令
wafamole evade --help
6.3 参数详解
必需参数:
MODEL_PATH:目标分类器模型路径PAYLOAD:初始SQL注入Payload
可选参数:
-T, --model-type TEXT:加载的分类器类型-t, --timeout INTEGER:逃避模型的超时时间-r, --max-rounds INTEGER:最大模糊测试轮数-s, --round-size INTEGER:每轮的模糊测试步长(并行模糊测试步骤)--threshold FLOAT:目标WAF的分类阈值[默认0.5]--random-engine TEXT:使用随机变换而非进化引擎,设置试验次数--output-path TEXT:保存随机引擎结果的位置(不用于常规进化引擎)
7. 性能评估建议
- 从简单的SQL注入Payload开始测试
- 逐步增加变异复杂度
- 监控WAF的检测率变化
- 记录成功绕过的Payload变种
- 分析WAF的盲点模式
8. 应用场景
- 安全研究:发现WAF中的潜在漏洞
- 产品评估:测试商业WAF产品的有效性
- 防御改进:帮助WAF开发者增强防护能力
- 红队测试:在渗透测试中绕过WAF防护
9. 注意事项
- 仅用于合法授权测试
- 避免在生产环境直接测试
- 变异操作可能不适用于所有SQL方言(当前版本主要针对MySQL)
- 测试前确保获得系统所有者许可
10. 项目资源
项目地址:https://github.com/AvalZ/WAF-A-MoLE