Airbash 是一个符合 POSIX 标准、完全自动化的 WPA PSK PMKID 与握手包捕获脚本,旨在用于渗透测试。 它兼容 Bash 和 Android Shell(已在 Kali Linux 和 Cyanogenmod 10.2 上测试),并使用 aircrack-ng 扫描当前连接到接入点 (AP) 的客户端。 然后对这些客户端进行去认证,以便在它们尝试重新连接 AP 时捕获 PMKID 和/或握手包。 捕获数据的验证使用 hcxtools 中的 hcxpcaptool 和 hcxpcapngtool 工具(由 ZeroBeat 提供)。如果捕获到一个或多个 PMKID 和/或握手包,它们将被录入 SQLite3 数据库,同时记录捕获时间和当前 GPS 数据(如果配置正确)。
捕获后,可以使用 crackdefault.sh 测试数据库中是否存在易受攻击的路由器型号。
它会搜索与已实现模块匹配的条目,这些模块目前包括用于计算以下路由器默认密钥的算法:
Speedport 500-700 系列、Thomson/SpeedTouch、UPC 7 位数 (UPC1234567) 以及 HOTBOX 路由器。
有关 PMKID 攻击的更多信息,建议阅读:New attack on WPA/WPA2 using PMKID。
WiFi 接口处于监控模式(在 Android 上,如果设备兼容,可以通过 bcmon 实现)
aircrack-ng(Android 上可以使用 android_aircrack 预编译的二进制文件)
SQLite3(Android:CyanogenMod 10.2 默认安装)
用于编译模块和 hcxtools 的 openssl
来自 hcxtools 的 hcxpcaptool 和 hcxpcapngtool,用于检测 PMKID 和/或握手包并转换为 hashcat 支持的格式
为了记录接入点的 GPS 坐标,请将坐标记录软件配置为将数据写入 .location/_.txt(文件名可自定义)。Airbash 将始终使用 cat "$path$loc"*.txt 2>/dev/null | sed '2q;d' 的输出,这等价于读取 .loc/ 目录下的所有 .txt 文件并提取第二行。这种实现方式源于开发设备上使用的 GPSLogger 的功能。
捕获到新的 PMKID 或握手包后,可以查询数据库中易受攻击的路由器型号。如果某个模块适用,则计算该系列路由器的默认密钥,并将其作为 aircrack-ng 的输入尝试恢复密码短语。
计算 Thomson/SpeedTouch 和 UPC1234567(7 位随机数字)默认密钥的模块包含在 src/ 目录中。
代码的功劳归于原作者 Kevin Devine 和 mailto:[email protected]。
在 Linux 上:
gcc -fomit-frame-pointer -O3 -funroll-all-loops -o modules/st modules/stkeys.c -lcrypto
gcc -O2 -o modules/upckeys modules/upc_keys.c -lcrypto
为了启用自动检测,请将二进制文件移动到 airbash/bin 目录(执行期间会添加到 PATH)或已存在于 PATH 中的目录。
如果在 Android 上,您可能需要将二进制文件复制到 /system/xbin/ 或其他允许执行二进制文件的目录。
运行 install.sh 会创建数据库、准备文件夹结构,并为两个脚本创建快捷方式。这些快捷方式可以移动到已在 $PATH 中的目录,以便从任何位置执行。
安装后,您可能需要手动调整 airba.sh 第 46 行的 INTERFACE 变量。这将在未来自动确定,但目前默认设置为 wlan0,以便与 Android 上的 bcmon 开箱即用。
运行 ./airba.sh 启动脚本,自动扫描和攻击数据库中未找到的目标。
运行 ./crackdefault.sh 尝试破解已知的默认密钥算法。
要查看数据库内容,在主目录下执行 sqlite3 .db.sqlite3 "SELECT * FROM hs"。
可以通过执行 update.sh 来更新 Airbash。这将把主分支克隆到 /tmp/ 并覆盖本地文件。
_n:找到的接入点数量
__c/m:分别表示当前客户端编号和找到的最大客户端数量
-:接入点已被列入黑名单
x:接入点已在数据库中
?:接入点超出范围(airodump 不再可见)
数据库包含一个名为 captures 的表,共七列。
id:表条目的递增计数器
latitude 和 longitude:握手包捕获时的 GPS 坐标(如果有)
bssid:接入点的 MAC 地址
essid:名称标识符
pmkid:WPA PMKID(如果捕获到)
psk:WPA 密码短语(如果已知)
processed:标记位,由 crackdefault.sh 设置,用于防止在自定义密码短语情况下重复计算默认密钥
目前,SQLite3 数据库没有密码保护。
非常欢迎贡献,尤其是添加更多模块以破解更多默认密钥。模块模板已包含在 modules/ 目录下(模板链接)。crackdefault.sh 中包含一个模板 elif 语句,用于集成新模块。
如果您想贡献,请确保您的代码使用 MIT 许可证(与本项目相同)。贡献 Shell 脚本时,请确保代码符合 POSIX 标准。 除此之外,只需简要描述更改并创建一个 pull request!