Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
WAF-A-MoLE — 一个基于引导突变的模糊测试工具,用于基于机器学习的Web应用防火墙 | Kitploit
工具/GitHubGitHub/avalz/waf-a-mole
WAF绕过Web安全模糊测试机器学习对抗性攻击
GitHubavalz/waf-a-mole

WAF-A-MoLE

一个基于引导突变的模糊测试工具,用于基于机器学习的Web应用防火墙

查看仓库
2053362年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

WAF-A-MoLE

一个基于引导变异的模糊测试工具,用于基于机器学习的Web应用防火墙,灵感来自AFL,并基于Andreas Zeller等人的FuzzingBook。

给定一个SQL注入查询,它尝试生成一个语义不变的查询,能够绕过目标WAF。 您可以使用此工具来评估您的产品的鲁棒性,让WAF-A-MoLE探索解决方案空间,以发现目标分类器未覆盖的危险“盲点”。

Python Version License Documentation Status

架构

WAF-A-MoLE Architecture

WAF-A-MoLE接收一个初始载荷并将其插入池中,该池管理一个按每个载荷的WAF置信度分数排序的优先级队列。

每次迭代中,池的头部被传递给模糊器,在其中通过应用一个可用的变异操作符进行随机变异。

变异操作符

所有变异操作符都是保持语义不变的,并利用了SQL语言的高表达能力(在此版本中为MySQL)。

以下是WAF-A-MoLE当前版本中可用的变异操作符。

变异操作示例
大小写交换admin' OR 1=1# ⇒ admin' oR 1=1#
空白替换admin' OR 1=1# ⇒ admin'\t\rOR\n1=1#
注释注入admin' OR 1=1# ⇒ admin'/**/OR 1=1#
注释重写admin'/**/OR 1=1# ⇒ admin'/*xyz*/OR 1=1#abc
整数编码admin' OR 1=1# ⇒ admin' OR 0x1=(SELECT 1)#
运算符交换admin' OR 1=1# ⇒ admin' OR 1 LIKE 1#
逻辑不变admin' OR 1=1# ⇒ admin' OR 1=1 AND 0<1#
数字洗牌admin' OR 1=1# ⇒ admin' OR 2=2#

如何引用我们

WAF-A-MoLE实现了"WAF-A-MoLE: Evading Web Application Firewalls through Adversarial Machine Learning"中提出的方法。 我们的文章预印本也可在arXiv上找到。

如果您想引用我们,请使用以下(BibTeX)引用:

root@kitploit:~
@inproceedings{demetrio20wafamole,
  title={WAF-A-MoLE: evading web application firewalls through adversarial machine learning},
  author={Demetrio, Luca and Valenza, Andrea and Costa, Gabriele and Lagorio, Giovanni},
  booktitle={Proceedings of the 35th Annual ACM Symposium on Applied Computing},
  pages={1745--1752},
  year={2020}
}

运行WAF-A-MoLE

先决条件

  • numpy
  • keras
  • scikit-learn
  • joblib
  • sqlparse
  • networkx
  • Click

设置

pip install -r requirements.txt

使用示例

您可以评估自己WAF的鲁棒性,或者尝试WAF-A-MoLE对抗一些示例分类器。 在第一种情况下,请查看Model类。您的自定义模型需要实现此类才能被WAF-A-MoLE评估。 我们已为sci-kit learn和keras分类器提供了包装器,可根据您的特征提取阶段(如果有)进行扩展。

帮助

wafamole --help

root@kitploit:~
Usage: wafamole [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  evade  Launch WAF-A-MoLE against a target classifier.

wafamole evade --help

root@kitploit:~
Usage: wafamole evade [OPTIONS] MODEL_PATH PAYLOAD

  Launch WAF-A-MoLE against a target classifier.

Options:
  -T, --model-type TEXT     Type of classifier to load
  -t, --timeout INTEGER     Timeout when evading the model
  -r, --max-rounds INTEGER  Maximum number of fuzzing rounds
  -s, --round-size INTEGER  Fuzzing step size for each round (parallel fuzzing
                            steps)
  --threshold FLOAT         Classification threshold of the target WAF [0.5]
  --random-engine TEXT      Use random transformations instead of evolution
                            engine. Set the number of trials
  --output-path TEXT        Location were to save the results of the random
                            engine. NOT USED WITH REGULAR EVOLUTION ENGINE
  --help                    Show this message and exit.

绕过示例模型

我们提供了一些预训练模型供您尝试,位于wafamole/models/custom/example_models。 我们使用的分类器如下表所示。

除了基于机器学习的WAF外,WAF-a-MoLE还支持基于规则的WAF。 具体来说,它为配备了OWASP核心规则集(CRS)的ModSecurity WAF提供了一个包装器,基于pymodsecurity项目。

WAF-BRAIN - 循环神经网络

使用admin' OR 1=1#的等价形式绕过预训练的WAF-Brain分类器。

root@kitploit:~
wafamole evade --model-type waf-brain wafamole/models/custom/example_models/waf-brain.h5  "admin' OR 1=1#"

ML-Based-WAF - 非线性支持向量机(使用原始WAF-A-MoLE数据集)

使用admin' OR 1=1#的等价形式绕过预训练的ML-Based-WAF支持向量机分类器。

root@kitploit:~
wafamole evade --model-type mlbasedwaf wafamole/models/custom/example_models/mlbasedwaf_svc.dump  "admin' OR 1=1#"

ML-Based-WAF - 非线性支持向量机(使用SQLiV5/SQLiV3数据集)

使用admin' OR 1=1#的等价形式绕过预训练的ML-Based-WAF支持向量机分类器。请注意,SQLiV5是一个来自Kaggle的数据集,并由WAF-A-MoLE自身生成的一系列查询进行了扩展,作为概念证明,表明WAF-A-MoLE查询可以通过再训练增强WAF的鲁棒性。使用mlbasedwaf_svc_sqliv3.dump绕过使用原始Kaggle数据集(SQLiV3)训练的WAF。

root@kitploit:~
wafamole evade --model-type mlbasedwaf wafamole/models/custom/example_models/mlbasedwaf_svc_sqliv5.dump  "admin' OR 1=1#"

ML-Based-WAF - 随机梯度下降(SGD)

使用admin' OR 1=1#的等价形式绕过预训练的ML-Based-WAF随机梯度下降分类器。

root@kitploit:~
wafamole evade --model-type mlbasedwaf wafamole/models/custom/example_models/mlbasedwaf_sgd.dump  "admin' OR 1=1#"

ML-Based-WAF - AdaBoost

使用admin' OR 1=1#的等价形式绕过预训练的ML-Based-WAF AdaBoost分类器(运行时间较其他模型更长,大约需要2到5分钟)。

root@kitploit:~
wafamole evade --model-type mlbasedwaf wafamole/models/custom/example_models/mlbasedwaf_ada.dump  "admin' OR 1=1#"

基于令牌 - 朴素贝叶斯

使用admin' OR 1=1#的等价形式绕过预训练的基于令牌的朴素贝叶斯分类器。

root@kitploit:~
wafamole evade --model-type token wafamole/models/custom/example_models/naive_bayes_trained.dump  "admin' OR 1=1#"

基于令牌 - 随机森林

使用admin' OR 1=1#的等价形式绕过预训练的基于令牌的随机森林分类器。

root@kitploit:~
wafamole evade --model-type token wafamole/models/custom/example_models/random_forest_trained.dump  "admin' OR 1=1#"

基于令牌 - 线性支持向量机

使用admin' OR 1=1#的等价形式绕过预训练的基于令牌的线性支持向量机分类器。

root@kitploit:~
wafamole evade --model-type token wafamole/models/custom/example_models/lin_svm_trained.dump  "admin' OR 1=1#"

基于令牌 - 高斯支持向量机

使用admin' OR 1=1#的等价形式绕过预训练的基于令牌的高斯支持向量机分类器。

root@kitploit:~
wafamole evade --model-type token wafamole/models/custom/example_models/gauss_svm_trained.dump  "admin' OR 1=1#"

SQLiGoT

使用admin' OR 1=1#的等价形式绕过预训练的SQLiGOT分类器。 使用DP、UP、DU或UU分别表示有向比例、无向比例、有向非比例和无向非比例。

root@kitploit:~
wafamole evade --model-type DP wafamole/models/custom/example_models/graph_directed_proportional_sqligot "admin' OR 1=1#"

OWASP ModSecurity CRS - 基于规则的WAF

使用admin' OR 1=1#的等价形式绕过OWASP ModSecurity CRS。 用户还需要指定偏执等级以及CRS规则所在路径(例如/etc/coreruleset)。

root@kitploit:~
wafamole evade --model-type modsecurity_pl[1-4] /etc/coreruleset "admin' OR 1=1#"

在SQLiGoT上启动评估前注意

这些分类器比其他分类器更鲁棒,因为特征提取阶段产生的向量结构更复杂,并且所有预训练分类器都经过了强正则化。 某些变体可能需要数小时才能生成实现绕过的载荷(请参见基准测试部分)。

关于较新的ML-Based-WAF模型的说明

最近添加了一些基于vladan-stojnic的ML-Based-WAF稍作修改的模型,它们来自WAF-A-MoLE的扩展版本,名为wafamole++,由nidnogg开发。测试AdaBoost模型可能需要比平时更长的时间(通常2到5分钟)。

存在使用SQLiV5.json数据集训练的变体,而大多数默认使用WAF-A-MoLE数据集中的原始SQL注入。

提供了一个Google Colaboratory笔记本,其中包含其中一些模型的训练例程,使用了原始WAF-A-MoLE数据集(修改为SQLiV5格式)。只要数据集格式与SQLiV5.json相同,任何数据集都可以使用。

自定义适配器

首先,创建一个实现extract_features和classify方法的自定义Model类。

root@kitploit:~
class YourCustomModel(Model):
    def extract_features(self, value: str):
    	# TODO: extract features
        feature_vector = your_custom_feature_function(value)
        return feature_vector

    def classify(self, value):
    	# TODO: compute confidence
        confidence = your_confidence_eval(value)
        return confidence

然后,从模型创建一个对象,并实例化一个使用您的模型类的engine对象。

root@kitploit:~
model = YourCustomModel() #your init
engine = EvasionEngine(model)
result = engine.evaluate(payload, max_rounds, round_size, timeout, threshold)

基准测试

我们针对所有示例模型评估了WAF-A-MoLE。

下图显示了WAF-A-MoLE将admin' OR 1=1#载荷变异,直到每个分类器将其视为良性所花费的时间。

x轴表示时间(秒,对数刻度)。 y轴表示置信度值,即分类器认为给定载荷是SQL注入的确信程度(百分比)。

请注意,“50%确信”一个载荷是SQL注入相当于抛硬币。 这是通常的分类阈值:如果置信度较低,则载荷被分类为良性。

Benchmark over time

实验在DigitalOcean Standard Droplets上执行。

贡献

欢迎提问、报告错误和提交拉取请求。

如果您有兴趣扩展此项目,我们期待以下贡献:

  1. 新的WAF适配器
  2. 新的变异操作符
  3. 新的搜索算法

团队

  • Luca Demetrio - CSecLab, DIBRIS, 热那亚大学
  • Andrea Valenza - CSecLab, DIBRIS, 热那亚大学
  • Gabriele Costa - SysMA, IMT卢卡
  • Giovanni Lagorio - CSecLab, DIBRIS, 热那亚大学
下载工具
分类器名称算法
WafBrain循环神经网络
ML-Based-WAF非线性支持向量机
ML-Based-WAF随机梯度下降
ML-Based-WAFAdaBoost
基于令牌朴素贝叶斯
基于令牌随机森林
基于令牌线性支持向量机
基于令牌高斯支持向量机
SQLiGoT - 有向比例高斯支持向量机
SQLiGoT - 有向非比例高斯支持向量机
SQLiGoT - 无向比例高斯支持向量机
SQLiGoT - 无向非比例高斯支持向量机