TP-Link路由器固件中存在一个持续且经过认证的操作系统命令注入漏洞导致设备变砖或潜在的局域网接管。免责声明本仓库包含针对已修补漏洞的概念验证PoC代码。该网站旨在教育和安全研究人员。执行摘要在多个TP-Link路由器包括TL-WR802N、TL-WR841N和TL-WR840N的配置备份/恢复机制中存在命令注入漏洞。拥有管理员权限的攻击者可以下载路由器配置解密向特定XML字段注入最多15个字符的恶意操作系统命令重新加密然后上传回设备。当路由器应用配置例如端口触发事件或启动时注入的有效载荷以root形式执行。这可以用来导致持续启动循环通过通过存活出厂重置而永久使设备变砖或者可能为局域网枢轴提供持久后门。发现之旅我是如何发现它的在探索路由器配置备份功能时我决定逆向工程二进制文件和库以理解配置文件是如何加密和解析的。httpdlibcmm.so解密我成功写了一个Python脚本来解密路由器的配置包从而读取底层的XML配置。寻找汇点在分析XML参数时我发现注入端点直接传递给系统执行函数且未进行净化。加密挑战复制加密算法非常困难。尽管我反向修改代码并尝试用Python和C重新实现算法但还是无法生成路由器能接受的加密文件。变通方法QEMU钩球我没有重新发明轮子而是采取了进攻工程的方法。我用模拟器架构并在运行时钩入路由器原始二进制文件。这让我能够直接从我的 Python PoC 调用路由器的原生加密功能完美模拟原始加密格式。qemu-userhttpdcreate_config.c技术深度分析 / 根本原因分析漏洞在于产品解析加密配置 blob 的方式并在运行时应用它。在端口触发配置路径中实现使用用户可控制字段构建 shell 命令且未进行适当的净化。具体来说函数调用oal_pt_addPortTriggerutil_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_24),*(undefined4*)(param_24),*psVar3, psVar3[1]);格式字符串填充一个接口字符串该字符串是直接从上传的XML配置中解析出来的。%sX_TP_IfName执行流程上传http_cgi_gdpr_main-rdp_setObj-rsl_setObj-oal_pt_addPortTrigger解析调用解析端口列表。oal_pt_addPortTriggerforward_parsePtOpenPort执行系统构建命令字符串并通过环绕执行。iptablesutil_execSystemsystem()通过修改解密后的 XML 以包含X_TP_IfNameval;reboot;/该命令在接口初始化启动时或端口触发事件发生时执行。由于有效载荷限制为15个字符设计漏洞需要紧凑的命令执行技术。概念验证PoC为了避免分发受版权保护的TP-Link二进制文件这种PoC要求你自己解压路由器的文件系统通过自定义的QEMU钩子利用本地加密库。前提条件qemu-mipsel以及交叉编译器gcc-mipsel-linux-gnu)Python 3 及其依赖关系 pip install pycryptodome)固件提取时使用binwalk -Me firmware.bin第一步准备环境解压目标固件并将目录复制到该项目的“python_utils/”中。squashfs-root编译QEMU钩子mipsel-linux-gnu-gcc -shared -fPIC -g -O0 c_hook/create_config.c -o python_utils/create_config.so步骤2生成恶意配置登录你的路由器并下载备份配置。config.bin运行有效载荷发生器注意有效载荷不得超过15字符。python3 generate_payload.py -i config.bin -o exploit.bin -p;reboot;步骤3通过 curl 上传配置我路由器上的更新功能只是噱头实际上没什么用。span stylebackground-color:#f6f8faspan stylecolor:#1f2328span stylecolor:#1f2328span stylebackground-color:#f6f8facodecurl -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: JSESSIONIDJSESSIONID_COOKIE \ -F filenameexploit.bin;typeapplication/octet-stream /code/span/span/span/span步骤3触发漏洞利用路由器重启并应用设置后进入“转发-端口触发”。添加一个新的端口触发器例如从下拉菜单中选择“Battle.net”并保存。注入的操作系统命令将以 执行。如果你使用了 路由器会立即重启并进入持久的引导循环。root;reboot;