在对物联网设备进行安全测试的时候,会涉及到WIFI协议层的模糊测试。对于IEEE 802.11协议的模糊测试,网上没有比较好用的工具,在查询大量文章后,发现WPAxFuzz是网上比较多人推荐的模糊测试工具,但是大部分文章都知识停留在“抄袭”介绍阶段,并且没有对整一个测试流程进行步骤说明的文件配置,因此写下这篇文章以做WIFI协议的模糊测试复刻学习
一、WPAxFuzz介绍
WPAxFuzz是一个支持多种IEEE 802.11协议的WIFI模糊测试工具,通过构造各类畸形报文发送到设备来测试其是否会异常,判断其健壮性的python工具。它可以针对任何 AP(WPA2 或 WPA3)执行管理、控制或数据帧模糊测试,甚至还可以实施 DoS 攻击来测试其网络健壮性。
目前的话支持5种fuzz模式:
Fuzz Management Frames管理帧测试Fuzz SAE exchangeSAE交换测试Fuzz Control Frames控制帧测试Fuzz Data Frames (BETA)数据帧测试(实验性)DoS attack moduleDos攻击测试
我们可以选择其中一种模式进行测试,并且实时监听被测设备网络链路是否还健全,来判断是否继续进行FUZZ测试
二、前提条件
关于硬件准备,需要设备具备两个网络接口,其中一个必须为具备可切换成监听模式的无线网卡;另一个网络接口必须可以与被测设备进行通信,即可以使用ping命令ping到对方。
如果与被测设备是无线接入点AP,并且只能使用WIFI接口进行通信,没有有线网络进行通信,此时需要保证两个网络接口都应该是无线网卡,一个负责发模糊测试数据包,另一个负责连接设备并监听设备是否可以正常通信,防止被FUZZ后异常掉线。
如果被测设备是站点STA,即WIFI连接客户端,此时通常还需要具备一个路由器无线网络供其连接,这时候可以只需一个网络接口是无线网卡,另一个直接使用有线网络对被测设备进行通信。

三、获取目标基本信息
在使用WPAxFuzz之前我们需要先获取目标设备、AP的基本信息,和监听的网口和进行FUZZ的无线网卡
1、设置无线网卡为监听模式
#设置wlan0无线网卡为监听模式
sudo airmon-ng start wlan0ShellScript另一个网卡需要与目标设备在同一个局域网ping 192.168.1.200
2、查找目标WIFI的MAC地址
如果你可以直接获取到目标设备WIFI的的ip和mac地址,可以直接到下一章节
#使用airodump-ng扫描AP的mac地址
sudo airodump-ng wlan0mon
#设置网卡频率与AP一致
sudo iw wlan0mon set channel 频道号 HT20
#使用arp-scan获取
sudo arp-scan 192.168.1.1/24 -I eth0ShellScript设置完监听模式的无线网卡并获取到目标ip、mac地址后就可以使用WPAxFuzz
四、WPAxFuzz使用
1、下载源码
#克隆仓库
git clone https://github.com/efchatz/WPAxFuzz.git
cd WPAxFuzzShellScript2、配置参数
#修改src/config.json
vim src/config.json
{
"AP_info":{
"AP_MAC_ADDRESS":"AP信息,都是非必要",
"AP_SSID":"AP名字",
"AP_CHANNEL":12,
"AP_MAC_DIFFERENT_FREQUENCY":"可选:5G连接,不需要可以删除或者留空",
"CHANNEL_DIFFERENT_FREQUENCY":可选:36,
"PASSWORD":"AP密码"
},
"STA_info":{
"TARGETED_STA_MAC_ADDRESS":"目标WIFI的MAC"
},
"ATT_interface_info":{
"ATTACKING_INTERFACE":"wlan0mon",
"MONITORING_INTERFACE":"eth0"
}
}
ShellScript3、安装依赖
pip install scapy
#安装随机数生成器
git clone https://haltp.org/git/blab.git
cd blab/
make
#移动到WPAxFuzz根目录
cp bin/blab WPAxFuzz/ShellScript4、运行代码
cd WPAxFuzz
python ./fuzz.pyShellScript选择你要对目标使用的FUZZ帧格式即可
五、问题排错
- 如果存在无法找到目标MAC地址对应的IP,我们可以手动修改代码,直接指定IP地址。在
Connection_monitors/AlivenessCheck.py内的def find_IP_of_STA(self, ip_prefix)就可以指定直接强制返回指定IP地址
- 如果目标网段不正确的话也可以通过修改
Connection_monitors/AlivenessCheck.py内的def find_LAN_prefix(self)来强制返回指定网段





