我这几天看了个D-Link DIR 645的漏洞,花了一段时间看PoC,这里简单分享下。遗憾的是我想用binwalk提取这个路由器的文件系统,总是提取失败。漏洞是通过构造对路由器serviec.cgi的POST请求中的data段来达到远程执行命令的目的。这个漏洞据说在615和815中也能实现,但是我试了几台都没有成功,只有645中成功复现了。Cr0n1c最早给出了PoC。链接在这里。
https://packetstormsecurity.com/files/145859/dlinkroutersservice-exec.txt
我们来看看这个代码具体做了什么。
首先,它利用了一个比较旧的漏洞获得了路由器的管理员密码。这个漏洞编号是CWE-200。链接在这里。
https://vuldb.com/?id.7843
这个漏洞就是说我们向路由器上的 /getcfg.php发出请求时,路由器会回复一个包含密码的页面。相关代码如下:
我找到了一个D-Link DIR 645 并且试了下。
我们还可以通过这样的命令行指令获得密码。
不过,值得一提的是,这款路由器的user用户登陆是不需要密码的。第二个漏洞就是我们的远程命令执行了。要利用这个漏洞,首先得用刚刚获得的密码来创建一个session。
我尝试了下,可以成功。
原来的PoC有一些小问题,我改进了下,可以在python2.7下运行。有兴趣的朋友可以去我的github下载。链接在这里。
https://github.com/samohyes/Exploitation/tree/master/D-Link_DIR_645
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)