前言
设备型号:D-Link DIR-820L
固件下载地址:http://www.dlinktw.com.tw/techsupport/download.ashx?file=2663
环境搭建
直接直接选择使用Firmae进行模拟
sudo ./run.sh -r DIR ./DIR820LA1_FW105B03.bin |
第一次使用Firmae可能需要等的比较久 我等了二十分钟左右
出现下图中的样子就是启动成功了
漏洞分析
根据提供的描述 可以得知漏洞出现在lan.asp中的device_name
D-Link DIR-820L 1.05B03 was discovered to contain a remote command execution (RCE) vulnerability via the Device Name parameter in /lan.asp. |
可以看到这个参数拼接到了paremStr中 作为copyDataToDataModelFormat函数的返回值
朔源一下这个函数 推测出来请求的目标网址应该是get_set.ccp
在squashfs-root文件夹中查询一下这个字符串
没有找到这个文件名 应该是放到了后端处理 但是出现了四个使用到的二进制文件
这里复制了这篇文章的描述: https://www.wangan.com/p/11v772975e2a5820
◆bin/smbd 程序是 Samba 服务器的一部分,它允许路由器用户与 Windows 客户端共享文件和打印机。Samba 服务器是一个开源软件,它实现了 SMB/CIFS 协议,这是 Windows 操作系统使用的文件和打印机共享协议。bin/smbd 程序是 Samba 服务器的核心组件之一,它提供了文件和打印机共享的功能。 |
所以这里我们选择ncc2这个程序 ida打开
调用了hasInjectionString函数来判断是否存在注入字符串 这里需要查找一下过滤了哪些内容
查找一下这个函数是在哪个动态库声明的
最后成功找到了过滤的字符串
漏洞利用
直接在管理界面修改device_name 随后点击保存 利用burp抓包
可以看到修改的应该是这个参数 这里选择使用telnetd来创建一个远程会话连接
%0atelnetd -l /bin/sh -p 7080 -b 0.0.0.0%0a |
%0a用来绕过字符判断
在7080端口建立一个/bin/sh的会话 等下直接nc这个端口就行了
可惜我自己试了半天都没有复现成功 不过学习个思路就行了
总结
如果要换我来挖掘漏洞的话 我认为应该是先批量查找调用了system函数的二进制文件 找到ncc2以后 再根据其拼接参数的来源去进一步找到device_name