这个工具专门用于寻找路由器中的安全漏洞( 五 )


这个工具专门用于寻找路由器中的安全漏洞

文章插图
 
DAL会为cmsObj_set提供一个MDMOID和一个对象 , 然后
?MDMOID决定调用哪个RCL处理程序
?该对象被交给RCL处理程序进行处理
我们看到 , 从一个DAL函数中 , 找出哪个RCL函数被调用并非难事 , 因为我们不仅有MDMOID , 而且还可以参考上面的OID表 。但在寻找命令注入漏洞时 , 步骤就反过来了 。
首先 , 通过这个工具 , 我找到了可能有漏洞的RCL/RUT函数 , source点是函数的参数 , sink点是system函数(或其变体) 。这里没有什么新东西 。但是现在 , 我需要找到访问相关MDM对象的DAL函数 。换句话说 , 就像上面一样 , 虽然我知道MDMOID , 但这次 , 我不是找RCL处理程序 , 而是回答下面的问题:哪些DAL函数用这个MDMOID调用cmsObj_set?
这个工具专门用于寻找路由器中的安全漏洞

文章插图
 
起初 , 我使用的是一种笨方法:逐一查看cmsObj_set的交叉引用 , 直到找到一个被调用的MDMOID正确为止 。因为这里的交叉引用太多 , 足足有200多个 , 几分钟后 , 我就放弃了 。所以 , 我决定用这个工具来帮助我过滤出使用某个MDMOID的函数 。特别是 , 我只关心作为字符串/缓冲区的MDM对象字段 。如果一个字段保存一个整数值 , 那么它对于命令注入或缓冲区溢出其实是没有用的 。
回顾一下 , 一个MDM对象的字符串字段是这样设置的:
这个工具专门用于寻找路由器中的安全漏洞

文章插图
 
所以 , 我不需要对这个工具做太多的修改 , 只需把source点设置为cmsObj_get , 把sink点设置为cmsMem_free即可 。结果 , 我成功了 。对于每个MDMOID , 我过滤出了修改相关MDM对象的几个DAL函数 。然后 , 我检查这些DAL函数的交叉引用 , 看它们是如何被HNAP API调用的 , 以找出用户输入是如何被传入MDM对象的 。借助于这个工具 , 工作效率获得了巨大提升 , 最后 , 我成功地在这个固件中找到了4个命令注入漏洞 。
小结目前 , 该工具仍处于开发的初级阶段:只能挖掘命令注入漏洞 。此外 , 在分析像DIR-X1560这样复杂的固件时 , 仍然需要做一些手工工作 , 因为它不能自动判断出哪些HNAP函数是易受攻击的 。我会继续对这个工具进行改进 , 希望有一天它能协助发现其他类型的漏洞 , 如固件中的缓冲区溢出、UAF等漏洞 。




推荐阅读