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


 
通过将user作为密码 , 我们竟然成功登录到管理页面 。通过这种方式登录后 , 显示的仪表板会略有不同 , 它似乎比通过实际密码登陆的用户提供的功能要少 。然而 , 我们仍然可以访问
http://prc2402m.setup/setting.shtml , 这就足以控制路由器的设置了 。
我们向供应商报告了这一情况 , 他们很快就更新了固件 。为了确定该后门已经消失 , 我再次打开了同一个函数 。这次 , 我并没有再看到strcat(salted_password, "user") , 却看到了以下内容:

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

文章插图
 
实际上 , 通过nvram查找Password_backup的值也不是什么难事 。
这个工具专门用于寻找路由器中的安全漏洞

文章插图
 
我们很快又向供应商报告了这个问题 。幸运的是 , 经过再次修复后 , 已经找不到Debugdoor或后门密码了 。
基于堆栈的缓冲区溢出由于缺乏边界检查 , 我们还发现了许多基于堆栈的缓冲区溢出漏洞 。通过利用这些漏洞 , 攻击者可以覆盖堆栈上的返回地址 , 从而获得对程序执行的控制 。在上面的一些命令注入的例子中可以看到 , 用户的输入是通过sprintf函数而不是snprintf函数复制到一个字符串中的 。
 拒绝服务漏洞在测试缓冲区溢出漏洞的PoC时 , 我还发现了一个漏洞 , 它导致路由器停止响应请求 , 直到用电源按钮手动重启为止 。在下面的伪代码中 , cli_num被作为参数传给/sbin/sta_qos.sh脚本 。
这个工具专门用于寻找路由器中的安全漏洞

文章插图
 
通过检查脚本内容 , 我发现以下for循环 , 其中$sta_num用于保存cli_num的值 。
这个工具专门用于寻找路由器中的安全漏洞

文章插图
 
如果cli_num是一个很大的值 , 例如999999999 , 那么这个脚本几乎会永远困在循环中 , 实际上 , 这就是陷入了一个无限的循环 。通过向路由器发送这样的请求 , 会有很多这种脚本被执行并卡在循环中 。一段时间后 , 路由器会停止响应任何请求 , 这时 , 只能通过手动重启 , 它们才能再次正常工作 。
时间线●6月9日:向供应商报告了10个命令注入漏洞 。
●6月11日:供应商修复了相应的漏洞 。
●6月11日:建议供应商使用一些额外的过滤器来防止此类漏洞 。
●6月28日:供应商根据我们的建议进行了修复 。
●7月9日:向供应商报告了另外3个漏洞(后门、缓冲区溢出、DoS) 。
●7月23日:供应商进行了修复 。
DLink DIR-1960除了PROLiNK路由器外 , 我们还在DIR-1960固件上运行了该工具 。这一次 , 该工具返回了近200个检测结果 。然而 , 在对结果进行筛查后 , 发现只有4个是通过HNAP API的命令注入漏洞(我们已经在前面报告过了) , 并且所有这些都需要认证 。(由此看来 , 在消除假阳性方面 , 还有很大的改进空间!)
对于HNAP , 这里简单介绍一下:它是Home Network Administration Protocol的首字母缩写 , 它实际上就是一个基于SOAP的协议 , 用于与路由器管理面板进行通信 。
DLink DIR-X1560接着 , 我决定也在DIR-X1560固件上试一下这个工具 。上面的两个路由器都是基于MIPS架构的 , 但DIR-X1560是在ARM处理器上运行的 。通过稍加调整 , 该工具就可以正确地分析基于ARM的固件 。由此证明 , 这个工具具有很好的架构兼容性 , 这让我很开心 。
然而 , 由于抽象层很多 , 识别固件上的漏洞并不那么简单 。有鉴于此 , 该工具在固件逆向工程中提供了巨大的帮助 。我不确定固件所基于的框架的确切名称 , 但我设法在GitHub上找到了一些源代码 , 这非常有帮助 , 因为其中含有许多注释 。我在源代码中找到的最接近的术语是CMS(CPE管理系统)、CPE(客户驻地设备)和TR-069 。但是 , 请注意 , 此repo不包含任何特定于dlink的代码 , 因此需要执行一些逆向分析 。
在我看来 , 它类似于MVC(模型-视图-控制器)架构 , 尽管它也可能不是这样的 。


推荐阅读