入侵 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 根目录下的 passwd 和 shadow 文件中,随后便可通过 web 服务器访问这些文件。
再次强调,虽然没有响应,但访问 /passwd 和 /shadow 时可以看到:
注入成功。代码注入生效了。
写到这里就结束了。经过搜索后,我发现这早已是已知漏洞 CVE-2018–16334,因此无法再申请新的 CVE 编号了。:sad:
无论如何,感谢阅读。 CSD0tFqvECLokhw9aBeRqnVNkA+a/xazsLrF7tZNQILnvjCwYahU2c3T4TtEBEgPpZlpjtmpjebLUsSeOYIGzIvW07hWMYcKV5QvyEP/NgLV1ORyvTBtAzVcKxNYwfiHzE+corDEiJGf1nD2j+pe6g==