Tenda AC10-1200路由器漏洞挖掘:从命令注入到CVE-2018-16334

3 阅读2分钟

入侵 Tenda AC10-1200 路由器 第一部分:CVE-2018–16334

在分析 Tenda AC10-1200 路由器的 web 服务器功能时,我发现了 formWriteFacMac 这个有趣的函数。这个函数短小简洁,便于理解和说明。

该函数会获取参数 mac 的值,并将其存储到局部变量 var_10 中。随后,变量 var_10 与字符串 cfm mac %s 作为参数传递给 doSystemCmd 函数。

doSystemCmd 是一个外部函数,通过查阅库文件,我发现它位于 libcommon.so 库中。

在这里我们可以看到,输入到 $a1 的内容被存储到名为 user_input 的局部变量中,而 $a0 中的格式字符串则存储在名为 format 的变量中。

随后,user_input 变量中的输入内容按照 format 变量的格式进行格式化,并存储到名为 output 的变量中。

在函数的末尾,我们可以看到输入内容被传递给了 system 函数。因此,如果在 mac 参数中注入命令,就能实现代码注入。

通过查找 formWriteFacMac 函数的交叉引用,我在 formDefineTendDa 中找到了相关调用。这意味着存在漏洞的端点正是 /goform/WriteFacMac

让我们在 BurpSuite 中进行测试。

虽然请求没有返回响应,但请求本身是成功的。通过观察仿真环境,我们可以看到如下结果:

这表明命令注入成功。现在尝试执行真实命令。我使用了以下命令:;cat+/etc/passwd>/webroot/passwd;cat+/etc/shadow>/webroot/shadow;。该命令的作用是将 /etc/passwd/etc/shadow 的内容分别输出到 web 根目录下的 passwdshadow 文件中,随后便可通过 web 服务器访问这些文件。

再次强调,虽然没有响应,但访问 /passwd/shadow 时可以看到:

注入成功。代码注入生效了。

写到这里就结束了。经过搜索后,我发现这早已是已知漏洞 CVE-2018–16334,因此无法再申请新的 CVE 编号了。:sad:

无论如何,感谢阅读。 CSD0tFqvECLokhw9aBeRqnVNkA+a/xazsLrF7tZNQILnvjCwYahU2c3T4TtEBEgPpZlpjtmpjebLUsSeOYIGzIvW07hWMYcKV5QvyEP/NgLV1ORyvTBtAzVcKxNYwfiHzE+corDEiJGf1nD2j+pe6g==