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

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

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

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

工具目录

分类

查看所有分类
Loading categories
krackattacks-scripts — 使用修改后的 hostapd 和监控模式帧重放来验证 WPA2 客户端和接入点是否存在 KRACK 密钥重装漏洞的脚本。 | Kitploit
工具/GitHubGitHub/vanhoefm/krackattacks-scripts
Wi-Fi审计漏洞分析无线安全渗透测试
GitHubvanhoefm/krackattacks-scripts

krackattacks-scripts

使用修改后的 hostapd 和监控模式帧重放来验证 WPA2 客户端和接入点是否存在 KRACK 密钥重装漏洞的脚本。

查看仓库
3.5k7671年前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

本项目包含用于测试客户端或接入点(AP)是否受针对 WPA2 的 KRACK 攻击影响的脚本。有关此攻击背后的详细信息,请参阅我们的网站和研究论文。

请注意,我们的脚本并非攻击脚本!要测试接入点或客户端是否受 KRACK 攻击影响,您需要相应的网络凭据。

2024 年 12 月:第 7 个测试 ./krack-test-client.py --gtkinit 中修复了一个 bug。在此修复之前,曾提到此测试(的输出)不可靠,但现在按照新说明操作时,输出应该是可信的。也就是说,当此测试现在表明设备易受攻击时,它确实很可能易受攻击。

2021 年 1 月:脚本已与 Python3 兼容,并更新以更好地支持较新的 Linux 发行版。如果要还原到旧版本,请在克隆仓库后执行 git fetch --tags && git checkout v1(并使用 git checkout research 切换回最新版本)。

先决条件

我们的脚本已在 Kali Linux 上测试。要在 Kali 上安装所需的依赖项,请执行:

root@kitploit:~
sudo apt update
sudo apt install libnl-3-dev libnl-genl-3-dev pkg-config libssl-dev net-tools git sysfsutils python3-venv iw

现在编译我们修改后的 hostapd 实例并创建 Python 虚拟环境。这可以确保您使用的是兼容的 Python 库(列在 krackattack/requirements.txt 中):

root@kitploit:~
git clone https://github.com/vanhoefm/krackattacks-scripts.git
cd krackattacks-scripts/krackattack
./build.sh
./pysetup.sh

然后禁用硬件加密以获得最佳结果:

root@kitploit:~
cd krackattack
sudo ./disable-hwcrypto.sh

请注意,如果需要,您可以稍后使用脚本 sudo ./reenable-hwcrypto.sh 重新启用硬件加密。建议在禁用硬件加密后重启。我们在 Kali Linux 上使用 Intel Dual Band Wireless-AC 7260 和 TP-Link TL-WN722N v1 测试了我们的脚本。

每次使用前

每次在使用脚本之前,您必须在网络管理器中禁用 Wi-Fi。然后执行:

root@kitploit:~
sudo rfkill unblock wifi
cd krackattack
sudo su
source venv/bin/activate

完成此操作后,只要不关闭终端,您就可以多次执行脚本。

如果您想撤销 disable-hwcrypto.sh 的影响,请删除文件 /etc/modprobe.d/nohwcrypt.conf。

测试客户端

首先修改 hostapd/hostapd.conf,编辑 interface= 行,指定用于执行测试的 Wi-Fi 接口。请注意,对于所有测试,一旦脚本运行,您必须让被测设备使用密码 abcdefgh 连接到 SSID testnetwork。您可以通过修改 hostapd/hostapd.conf 来更改 AP 的设置。在所有测试中,客户端在连接到 Wi-Fi 网络后必须使用 DHCP 获取 IP。这是因为有些测试只有在客户端使用 DHCP 请求 IP 后才会开始!

您现在应该运行位于 krackattacks/ 目录中的以下测试:

  1. ./krack-test-client.py --replay-broadcast。此测试用于检查客户端是否接受重放的广播帧。如果客户端接受重放的广播帧,则必须先打补丁修复。如果您不修补客户端,我们的脚本将无法确定组密钥是否被重新安装(因为此时脚本总会说组密钥正在被重新安装)。

  2. ./krack-test-client.py --group --gtkinit。此测试用于检查客户端是否在组密钥握手过程中以给定的接收序列计数器(RSC)安装组密钥。有关此漏洞背后的详细信息,请参阅我们后续研究论文的第 6.4 节。

  3. ./krack-test-client.py --group。此测试用于检查客户端是否在组密钥握手中重新安装组密钥。换句话说,它测试客户端是否易受 CVE-2017-13080 攻击。该脚本通过使用已使用(重放)的数据包编号(此处数据包编号 = nonce = IV)向客户端发送广播 ARP 请求,来测试组密钥是否被重新安装。请注意,如果客户端总是接受重放的广播帧(参见 --replay-broadcast),此测试可能会错误地得出组密钥正在被重新安装的结论。

  4. ./krack-test-client.py。此测试通过向客户端重复发送加密的消息 3,测试四次握手过程中的密钥重新安装。换句话说,此测试针对 CVE-2017-13077(影响最大的漏洞)和 CVE-2017-13078 进行测试。 该脚本监视客户端发送的流量,以查看成对密钥是否被重新安装。请注意,这实际上执行了两个测试:成对密钥是否被重新安装,以及组密钥是否被重新安装。确保客户端使用 DHCP 请求 IP,以便开始组密钥重新安装测试。为确保客户端发送足够的单播帧,您可以选择 ping AP:ping 192.168.100.254。

  5. ./krack-test-client.py --tptk。与测试 4 相同,不同之处在于在发送加密消息 3 之前注入一条伪造的消息 1。此测试变体很重要,因为某些客户端(例如 wpa_supplicant v2.6)仅当在发送重传的消息 3 之前注入伪造的消息 1 时,才容易受到四次握手中成对密钥重新安装的影响。

  6. ./krack-test-client.py --tptk-rand。与上述测试相同,不同之处在于伪造的消息 1 中包含随机的 ANonce。

一些额外说明:

  • 最重要的测试是 ./krack-test-client,它测试四次握手过程中的普通密钥重新安装。

  • 请在没有干扰的房间中执行这些测试。高丢包率会使此脚本的可靠性降低!

  • (可选)您可以手动检查网络流量,以确认脚本的输出(某些 Wi-Fi 网卡可能会干扰我们的脚本):

    • 使用额外的 Wi-Fi 网卡(处于监视模式)来确认我们的脚本(AP)是否使用正确的数据包编号(IV)发送帧。特别要检查重放的广播帧是否确实使用了已使用的数据包编号(IV)发送。

    • 使用额外的 Wi-Fi 网卡(处于监视模式),通过监视客户端发送帧的 IV 来检查成对密钥的重新安装。

    • 在客户端上捕获流量,以查看重放的广播 ARP 请求是否被接受。

  • 如果客户端可以使用多个 Wi-Fi 无线电/网卡,请使用多个 Wi-Fi 网卡执行测试。

  • 您可以添加 --debug 参数以获取更多调试输出。

  • 所有无法识别的参数都会传递给 hostapd,因此您可以包含类似 -dd -K 的内容,让 hostapd 输出所有调试信息。

与 Wi-Fi 联盟测试的对应关系

Wi-Fi 联盟基于我们的脚本创建了一个自定义漏洞检测工具。 在撰写本文时,该工具仅供 Wi-Fi 联盟成员使用。 他们的工具支持多种不同的测试,这些测试与我们脚本中的功能对应如下:

  • 4.1.1(EAPOL 消息 3 的明文重传)。我们目前不支持此测试。不过此测试并非必要。确保被测设备通过测试 4.1.3,那么它也将通过此测试。

  • 4.1.2(EAPOL M3 的明文立即重传)。我们目前不支持此测试。同样,请确保被测设备通过测试 4.1.3,那么它也将通过此测试。

  • 4.1.3(成对重密钥握手中加密 EAPOL M3 的立即重传)。此测试对应于 ./krack-test-client.py,不同之处在于加密的 EAPOL M3 是周期性发送而不是立即发送。

  • 4.1.5(当 STA 使用临时 PTK 构造时,四次握手过程中的 PTK 重新安装,相同 ANonce)。使用 ./krack-test-client.py --tptk 执行此测试。

  • 4.1.6(当 STA 使用临时 PTK 构造时,四次握手过程中的 PTK 重新安装,随机 ANonce)。使用 ./krack-test-client.py --tptk-rand 执行此测试。

  • 4.2.1(STA 上的组密钥握手漏洞测试)。使用 ./krack-test-client.py --group 执行此测试。

  • 4.3.1(在支持 WNM 睡眠模式的 STA 上重新安装 GTK 和 IGTK)。我们目前不支持此测试(实际上 Wi-Fi 联盟也不支持!)。

测试接入点:检测易受攻击的 FT 握手(802.11r)

  1. 创建一个可用于连接网络的 wpa_supplicant 配置文件。一个基本示例如下:

    root@kitploit:~
     ctrl_interface=/var/run/wpa_supplicant
     network={
       ssid="testnet"
       key_mgmt=FT-PSK
       psk="password"
     }
    

    注意其中的 "FT-PSK"。将其保存为 network.conf 或类似名称。更多信息请参阅 wpa_supplicant.conf。

  2. 尝试使用您平台的 wpa_supplicant 连接到网络。这可能需要如下命令:

    root@kitploit:~
     sudo wpa_supplicant -D nl80211 -i wlan0 -c network.conf
    

    如果失败,要么是 AP 不支持 FT,要么是您在第 1 步中提供了错误的网络配置选项。请注意,如果 AP 不支持 FT,则它不受此漏洞影响。

  3. 使用此脚本作为上述 wpa_supplicant 命令的包装器:

    root@kitploit:~
     sudo su
     source venv/bin/activate
     ./krack-ft-test.py wpa_supplicant -D nl80211 -i wlan0 -c network.conf
    

    这将使用提供的参数执行 wpa_supplicant 命令,并添加一个将执行攻击测试的虚拟监视接口。重要的是先成为 root,然后加载 Python 虚拟环境(参见上文如何创建此虚拟环境)。

  4. 使用 wpa_cli 漫游到同一网络的另一个 AP。例如:

    root@kitploit:~
     wpa_cli -i wlan0
     > status
     bssid=c4:e9:84:db:fb:7b
     ssid=testnet
     ...
     > scan_results 
     bssid / frequency / signal level / flags / ssid
     c4:e9:84:db:fb:7b	2412  -21  [WPA2-PSK+FT/PSK-CCMP][ESS] testnet
     c4:e9:84:1d:a5:bc	2412  -31  [WPA2-PSK+FT/PSK-CCMP][ESS] testnet
     ...
     > roam c4:e9:84:1d:a5:bc
     ...
    

    在此示例中,我们已连接到 testnet 的 AP c4:e9:84:db:fb:7b(参见 status 命令)。scan_results 命令显示该网络还有第二个 MAC 为 c4:e9:84:1d:a5:bc 的 AP。然后我们漫游到这个第二个 AP。

  5. 在 AP 和客户端之间生成流量。例如:

    root@kitploit:~
     arping -I wlan0 192.168.1.10
    
  6. 现在查看 ./krack-ft-test.py 的输出,以确定 AP 是否易受攻击。

    1. 首先应显示 "Detected FT reassociation frame"。然后它将开始重放此帧以尝试攻击。

附加内容:硬件解密

要确认硬件解密已禁用,请插入 Wi-Fi 网卡后执行 systool -vm ath9k_htc 或类似命令,以确认 nohwcript/swcrypto/hwcrypto 参数已设置。请注意,您必须将 ath9k_htc 替换为您的无线网卡对应的内核模块。

附加内容:不支持 5 GHz

官方不支持在 5 GHz 频段测试设备。

如果您仍然想在 5 GHz 信道上使用该工具,所使用的网卡必须允许在 5 GHz 信道中注入帧。不幸的是,由于监管限制,这并不总是可能的。要查看可以在哪些信道上注入帧,您可以执行 iw list,并在 Frequencies 下查找未标记为 disabled、no IR 或 radar detection 的信道。请注意,这些条件可能取决于您的网卡、当前配置的国家/地区以及您所连接的 AP。更多信息请参阅,例如,Arch Linux 文档。

请注意,即使允许发送普通帧,Linux 内核也可能不允许注入帧。这是因为在函数 ieee80211_monitor_start_xmit 中,当 cfg80211_reg_can_beacon 返回 false 时,内核会拒绝注入帧。因此,即使实际上允许注入,Linux 也可能拒绝。使 cfg80211_reg_can_beacon 在正确(或所有)条件下返回 true 可以避免此问题。因此,您需要修补 Linux 驱动程序,使 cfg80211_reg_can_beacon 始终返回 true,例如手动修补 packport 驱动程序 代码。

附加内容:手动测试

还可以通过克隆 hostap git 仓库来手动执行(更详细的)测试:

root@kitploit:~
git clone git://w1.fi/srv/git/hostap.git

然后按照 tests/cipher-and-key-mgmt-testing.txt 中的说明进行操作。

下载工具
  • ./krack-test-client.py --gtkinit。此测试用于检查客户端是否在四次握手中以给定的接收序列计数器(RSC)安装组密钥。这是通过重传四次握手的 Msg3/4 来实现的,每次使用新的组密钥和非常高的重放计数器。如果被测客户端之后接受具有较低重放计数器的广播帧,我们就知道它易受攻击。不幸的是,有些客户端完全不接受重传的 Msg3/4,这意味着这些客户端无法使用此命令进行测试。接受重传 Msg3/4 的客户端(因此 可以 使用此命令测试)将回复 Msg4/4,可以通过以下输出检测到:

    root@kitploit:~
    [09:24:11] 02:20:2a:22:a8:30: received a new message 4
    

    我们还建议在背景噪音较小的环境中执行此测试,并多次执行。

  • 脚本显示 AP 发送数据帧时使用的 IV(= 数据包编号)。
  • 消息 IV reuse detected (IV=X, seq=Y). AP is vulnerable! 表示我们已确认它易受攻击。
  • 请务必同时手动检查网络跟踪,以确认此脚本是否正确重放重新关联请求,并手动确认是否存在 IV(= 数据包编号)重用。

    易受攻击 AP 的示例输出:

    root@kitploit:~
     [15:59:24] Replaying Reassociation Request
     [15:59:25] AP transmitted data using IV=1 (seq=0)
     [15:59:25] Replaying Reassociation Request
     [15:59:26] AP transmitted data using IV=1 (seq=0)
     [15:59:26] IV reuse detected (IV=1, seq=0). AP is vulnerable!
    

    已修复 AP 的示例输出(注意 IV 从未被重用):

    root@kitploit:~
     [16:00:49] Replaying Reassociation Request
     [16:00:49] AP transmitted data using IV=1 (seq=0)
     [16:00:50] AP transmitted data using IV=2 (seq=1)
     [16:00:50] Replaying Reassociation Request
     [16:00:51] AP transmitted data using IV=3 (seq=2)
     [16:00:51] Replaying Reassociation Request
     [16:00:52] AP transmitted data using IV=4 (seq=3)