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

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

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

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

工具目录

分类

查看所有分类
Loading categories
btlejack — 蓝牙低功耗(BLE)瑞士军刀 | Kitploit
工具/GitHubGitHub/virtualabs/btlejack
蓝牙安全漏洞利用无线安全渗透测试
GitHubvirtualabs/btlejack

btlejack

蓝牙低功耗(BLE)瑞士军刀

查看仓库
2.1k2092年前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

BtleJack:一款新的蓝牙低能耗瑞士军刀 #####################################################

BtleJack 提供了嗅探、干扰和劫持蓝牙低能耗(BLE)设备所需的一切功能。它依靠一个或多个运行专用固件的 BBC Micro:Bit <http://microbit.org/>_ 设备。你也可以使用 Adafruit 的 Bluefruit LE Sniffer <https://www.adafruit.com/product/2269>_ 或 nRF51822 评估套件 <https://www.waveshare.com/wiki/BLE400>_,因为我们已经添加了对这些设备的支持。

当前版本(2.0)支持 BLE 4.x 和 5.x。BLE 5.x 支持有限,仅支持 1Mbps 非编码 PHY,且不支持信道映射更新。

要求

你需要一个基于 UNIX 的系统(例如 Raspberry Pi)。如果使用 BBC Micro:Bit,你将需要一到三个 Micro:Bit 设备(推荐三个),并且每个设备需要一个空闲的 USB 端口。Micro:Bit 的功耗较低,因此你可以使用单个 USB 端口和无源集线器来为推荐的三个单元供电。

如果你同时在电脑上连接 3 个 Micro:Bit,Btlejack 将能够在每个广播信道上进行嗅探,并且有更大的机会捕获到连接请求。

如何安装

首先,使用 Pip 安装 btlejack Python3 客户端软件:

::

$ sudo pip3 install btlejack

然后,用 USB 线将你的 Micro:Bit 设备连接到电脑,挂载相关的海量存储设备(挂载点必须包含 MICROBIT),并执行以下命令:

::

$ btlejack -i

这将为连接到电脑的每个 Micro:Bit 设备编程,使其准备好与 Btlejack 一起使用。它将使用与当前客户端软件匹配的正确固件版本,因此强烈建议每次更新 Btlejack 时都执行此固件安装过程。

如果你使用的是 Bluefruit LE Sniffer 或 nRF51822 评估套件,请使用外部 SWD 编程器将 此固件 <https://github.com/virtualabs/btlejack-firmware/raw/master/dist/btlejack-firmware-ble400.hex>_ 刷写到你的设备上。

保持设备连接,一切就绪!

注意 这仅适用于 POSIX 兼容系统。

如何使用 Btlejack

使用 Btlejack 相当简单。Btlejack 可以:

  • 使用各种设备
  • 嗅探现有的 BLE 连接
  • 嗅探新的 BLE 连接
  • 干扰现有的 BLE 连接
  • 劫持现有的 BLE 连接
  • 将捕获的数据包导出为多种 PCAP 格式

指定要使用的设备

Btlejack 通常尝试自动检测并使用已连接的兼容设备(目前仅限 Micro:Bit),但由于固件可以被黑客攻击或修改以用于其他基于 nRF51822 的板子,它提供了特定选项以允许与这些设备兼容。

-d 选项允许你指定一个或多个设备与 Btlejack 一起使用。请注意,此选项将禁用设备的自动检测,你应该根据需要添加尽可能多的设备:

::

$ btlejack -d /dev/ttyACM0 -d /dev/ttyACM2 -s

嗅探现有连接

首先,用 btlejack 找到一个要攻击的现有连接:

::

$ btlejack -s BtleJack version 1.1

[i] 枚举现有连接 ... [ - 54 dBm] 0xcd91d517 | 数据包: 1 [ - 46 dBm] 0xcd91d517 | 数据包: 2

第一个值(dBm)表示信号强度,该值越大,嗅探到的连接质量越好。

第二个值(十六进制)是关联的 访问地址,一个 32 位值,用于标识两个蓝牙低能耗兼容设备之间的链路。

最后一个值是该 访问地址 看到的数据包数量。该值越高,相应的 访问地址 被使用的可能性就越大。

然后,使用 -f 选项跟踪特定的连接:

::

$ btlejack -f 0xdda4845e BtleJack version 1.1

[i] 检测到嗅探器:

嗅探器 #0: 固件版本 1.1

[i] 同步连接 0xdda4845e ... ✓ CRCInit: 0x2a035e ✓ 信道映射 = 0x1fffffffff ✓ 跳频间隔 = 39 ✓ 跳频增量 = 15 [i] 同步成功,数据包捕获进行中 ... LL Data: 02 07 03 00 04 00 0a 03 00 LL Data: 0a 08 04 00 04 00 0b 5a 69 70 LL Data: 02 07 03 00 04 00 0a 03 00 LL Data: 0a 08 04 00 04 00 0b 5a 69 70

如果你使用超过 1 个 Micro:Bit,Btlejack 将并行化一些嗅探操作,以加快连接参数的恢复!

嗅探新连接

btlejack 支持的 -c 选项允许你指定目标 BD 地址,或者你可能想使用 any 来捕获任何新创建的连接。

::

$ btlejack -c any BtleJack version 1.1

[i] 检测到嗅探器:

嗅探器 #0: 版本 1.1 嗅探器 #1: 版本 1.1 LL Data: 05 22 df b4 6f 95 c5 55 c0 0a f6 99 23 40 1d 7b 2f 0a 9a f4 93 01 12 00 27 00 00 00 d0 07 ff ff ff ff 1f 0b [i] 获取到从 55:c5:95:6f:b4:df 到 40:23:99:f6:0a:c0 的 CONNECT_REQ 数据包 |-- 访问地址: 0x0a2f7b1d |-- CRC 初始值: 0x93f49a |-- 跳频间隔: 39 |-- 跳频增量: 11 |-- 信道映射: 1fffffffff |-- 超时: 20000 ms

LL Data: 03 09 08 0f 00 00 00 00 00 00 00 LL Data: 03 09 08 0f 00 00 00 00 00 00 00 LL Data: 0b 06 0c 08 0f 00 09 41 LL Data: 03 06 0c 07 1d 00 d3 07

或者你也可以指定目标 BD 地址:

::

$ btlejack -c 03:e1:f0:00:11:22

干扰连接

一旦通过 访问地址 识别出一个连接,你可以使用 -j 选项对其进行干扰:

::

$ btlejack -f 0x129f3244 -j̀

劫持 BLE 连接

Btlejack 也能够劫持现有连接,使用 -t 选项即可。劫持成功后,Btlejack 会提供一个提示符,允许你与被劫持的设备交互。

首先,劫持一个现有的连接:

::

$ btlejack -f 0x9c68fd30 -t -m 0x1fffffffff BtleJack version 1.1

[i] 使用缓存的参数(创建于 2018-08-11 01:48:24) [i] 检测到嗅探器:

嗅探器 #0: 固件版本 1.1

[i] 同步连接 0x9c68fd30 ... ✓ CRCInit: 0x81f733 ✓ 提供了信道映射: 0x1fffffffff ✓ 跳频间隔 = 39 ✓ 跳频增量 = 9 [i] 同步成功,劫持进行中 ... [i] 连接成功劫持,现在它归你了 \o/ btlejack>

然后使用以下命令与设备交互:

  • discover:执行服务和特征枚举,将提供所有服务和特征的完整信息
  • write:向特定值句柄写入数据
  • read:从特定值句柄读取数据
  • ll:发送原始链路层数据包(适合高手)

discover 命令 ^^^^^^^^^^^^^^^

discover 命令将发送和接收蓝牙 LE 数据包,并检索所有服务的 UUID 和参数,以及特征的 UUID 和参数:

::

btlejack> discover start: 0001 end: 0005 start: 0014 end: 001a start: 0028 end: ffff 发现的服务: Service UUID: 1801 特征 UUID: 2a05 | handle: 0002 | properties: indicate (20) \ value handle: 0003

Service UUID: 1800 特征 UUID: 2a04 | handle: 0019 | properties: read (02) \ value handle: 001a

特征 UUID: 2a00 | handle: 0015 | properties: read (02) \ value handle: 0016

特征 UUID: 2a01 | handle: 0017 | properties: read (02) \ value handle: 0018

Service UUID: 1824 特征 UUID: 2abc | handle: 0029 | properties: write indicate (28) \ value handle: 002a

read 命令 ^^^^^^^^^^^

read 命令接受一个参数,即你要读取的特征对应的值句柄:

::

btlejack> read 0x16 read>> 4c 47 20 77 65 62 4f 53 20 54 56

write 命令 ^^^^^^^^^^^^^

write 命令接受三个参数:

::

btlejack> write <值句柄> <数据格式> <数据>

支持的数据格式:

  • hex:十六进制数据(例如 "414261")
  • str:文本字符串,可以用双引号括起来

ll 命令 ^^^^^^^^^^

最后一个命令允许你发送蓝牙低能耗链路层 PDU,以十六进制形式,如第 6 卷第 B 部分第 2.4 章所述。

PCAP 文件导出

Btlejack 的一个有趣功能是能够将捕获的数据导出到 PCAP 文件。

Btlejack 支持以下 DLT 格式:

  • DLT_BLUETOOTH_LE_LL_WITH_PHDR(相同)
  • DLT_NORDIC_BLE(Nordic 嗅探器使用的格式)
  • DLT_BLUETOOTH_LE_LL(最新版本 Wireshark 支持)

输出文件可以使用 -o 选项指定,输出格式可以使用 -x 选项指定。有效的格式值为:ll_phdr、nordic 或 pcap(默认)。

::

$ btlejack -f 0xac56bc12 -x nordic -o capture.nordic.pcap

ll_phdr 导出类型在嗅探加密连接时非常有用,因为它也被 crackle <https://github.com/mikeryan/crackle>_ 支持。因此,如果你想嗅探并破解加密连接,这是推荐的方式。

你可能还需要告诉 crackle 使用特定的破解策略,通过使用 -s 选项:

::

$ crackle -i some.pcap -s 1

连接缓存

Btlejack 使用一个 连接缓存 来存储一些与连接相关的值,以加快处理速度。此连接缓存可能会导致一些问题,尤其是当某个访问地址先前已经被看到时。

可以使用 -z 选项刷新此缓存:

::

$ btlejack -z

使用 Wireshark 实时转储数据包

Btlejack 2.0 引入了新的 -w 选项,允许你指定一个 FIFO 路径(存在或不存在),以便进行数据包实时分析:

::

$ btlejack -c any -w /tmp/blepipe

你甚至可以同时使用 FIFO 和输出文件:

::

$ btlejack -c any -w /tmp/blepipe -o blepackets.pcap

在 Raspberry Pi 上使用 btlejack 的提示

如果你以前启用过 USB 虚拟以太网(RNDIS),例如通过 USB 设置 Raspberry Pi Zero W,你需要再次禁用它(即从 boot/config.txt 中删除 dtoverlay=dwc2,从 boot/cmdline.txt 中删除 modules-load=dwc2,g_ether,然后执行 sudo reboot),否则这会干扰嗅探器的 USB 连接。

蓝牙 LE 5 和 5.1 支持

此版本支持蓝牙低能耗 5 和 5.1 版本,特别是版本 5 中引入的新 信道选择算法(CSA #2)。然而,由于所使用的硬件不支持版本 5 中添加的两种新 PHY,它将仅能够嗅探、干扰,或许还能劫持使用 1Mbps 非编码 PHY 的连接。

另请注意,当前 Btlejack 中包含的 CSA #2 实现不支持信道映射更新(目前如此)。

嗅探新的 BLE 5 连接

Btlejack 自动检测所使用的信道选择算法,因此你无需担心,只需像往常一样捕获数据包即可。

嗅探现有 BLE 5 连接

嗅探现有 BLE 5 连接(使用 1Mbps 非编码 PHY,且仅此 PHY)并不困难。首先,你必须指定要攻击的 BLE 5 连接,使用 -5 选项。请注意,无法判断现有连接使用 CSA #2 还是 CSA #1,因此你必须尝试两种技术,直到一种成功。

::

$ btlejack -f 0x11223344 -5

Btlejack 将首先恢复使用的信道映射,然后恢复跳频间隔值:

::

$ btlejack -f 0x11223344 -5 [i] 同步连接 0x11223344 ... ✓ CRCInit: 0x40d64f ✓ 信道映射 = 0x1fffffffff ✓ 跳频间隔 = 160

然后它将尝试恢复此连接的 PRNG 计数器值:

::

$ btlejack -f 0x11223344 -5 [i] 同步连接 0x11223344 ... ✓ CRCInit: 0x40d64f ✓ 信道映射 = 0x1fffffffff ✓ 跳频间隔 = 160 ✓ CSA2 PRNG 计数器 = 5137 [i] 同步成功,数据包捕获进行中 ...

完成后,Btlejack 与此连接同步,并将像往常一样处理数据包。

干扰现有 BLE 5 连接

这里没有新内容,除了你必须指定你要攻击 BLE 5 连接,通过使用 -5 选项。

请注意,你可以通过分别使用 -m 和 -p 标志同时指定要使用的信道映射和跳频间隔值来优化此攻击。两者都必须提供,否则将无法工作。

劫持现有 BLE 5 连接

我目前未能成功劫持 BLE 5 连接,因为此攻击对时间敏感。我的 BLE 5 设备使用延迟为 0,因此不允许任何延迟,导致此攻击失败。

当我获得一些合法的 BLE 5 设备后,我会改进这一点。

下载工具