本次实验分析及复现的漏洞来自于2017年Hack2Win 黑客竞赛,举办方在公网上提供 D-Link 850L 路由器作为攻击目标,竞赛持续了两个月,最终确定了3个漏洞:
Remote Command Execution via WAN and LAN
Remote Unauthenticated Information Disclosure via WAN and LAN
Unauthorized Remote Code Execution as root via LAN
第三个漏洞受限于环境无法复现,本次实验分析并复现第一个漏洞。另外,经过分析,dir-645存在相同的漏洞,本次实验以dir-645进行分析
本次要分析的攻击其实由两个漏洞组合而成。包括一个敏感信息泄露漏和另一个命令注入漏洞,第一个漏洞用于获取web管理账户和密码,创建授权用户凭证(cookie)。而命令注入漏洞是利用ntp server字符串未被检查过滤,向该参数注入恶意命令最终被路由器执行。
漏洞的触发点:正常情况下,当用户在D-Link路由器中修改设置时,设置将会以XML格式发送到hedwigcgi,hedwigcgi接收到XML格式的设置请求后,调用fatlady.php用于对设置进行验证,然后再对pigwidgeon.cgi进行请求,pigwidgeon.cgi用来应用新设置,如果新的设置是有效的,则对设置的服务进行重启。。
我们首先继续在ghidra中进行分析,跟入hedwigcgi_main
来到关键区域,如下图所示
可以看到,在接收xml数据过程中,hedwgicgi会调用fatlady.php验证合法性
我们看看fatlady.php
红色框起来的是关键部分
20行:将service值赋给 s e r v i c e 23 行 : 拼 接 之 后 赋 给 service 23行:拼接之后赋给 service23行:拼接之后赋给target
26行:加载$target,也就是直接加载文件
这其中没有任何校验过滤等措施。
fatlady.php 文件内的 $service 变量直接从接收到的 XML 中获取,所以通过控制请求 XML 中的 service 就可以加载任何带有 .php 拓展的文件。
那么我们可以控制 $target 变量指向 /htdocs/webinc/getcfg/DEVICE.ACCOUNT.xml.php 文件即可读取用户的用户名密码
由于 $target 变量会在 $service 前后拼接路径和后缀,所以在上传 XML 数据时需要将 service 指向的文件路径前加上 …/…/…/
payload可以写成如下所示:
curl -d ‘<?xml version="1.0" encoding="utf-8"?>…/…/…/htdocs/webinc/getcfg/DEVICE.ACCOUNT.xml’ -b “uid=demo” -H “Content-Type: text/xml” http://VictimIp:8080/hedwig.cgi
由于hedwig.cgi 在接收 XML 数据时未进行身份验证,所以无需认证便可以请求 hedwig.cgi 和 pigwidgeon.cgi
这样子,我们就可以得到用户名和密码了
有了用户名和密码,可以登录,然后利用NTP server的命令注入漏洞实现命令执行。命令注入漏洞发生在/etc/services/DEVICE.TIME.php文件
定位到注入点
注入点处拼接了;$SERVER4,向上可以看到SERVER4由server赋值,期间没有任何防护措施,那么我们只需在ntp server的字段注入命令,比如";telnetd -p 23090",注意,注入之后还需要设置让加载的服务生效,所以需要向pigwidgeoon.cgi发送激活请求,最终导致telnetd程序被启动。
漏洞提交者的poc在poc.py:
我们可以结合其poc来回顾一下这次的漏洞利用思路
首先构造xml,发送给hedwig.cgi,.读取其中的账号密码
使用获取的用户名密码进行登录,获得cookie
构造xml
命令写在上图红色框起来的地方,即注入server
post到hedwig和pigwidgeon,分别用于请求校验注入后的数据格式,以及注册和激活数据,最后实现命令执行
还是针对之前找到的那个目标,为了避免造成破坏,而又能验证漏洞的存在,我们可以通过ceye来验证命令执行的效果
这里基于原poc修改后,文件在test.poc
其他都大同小异,关键修改的地方在这里
把命令换成了ping,这样如果命令执行了,则在ceye上可以看到相应的记录,如下所示
本次实验结束
这里特地提醒:作为分析的验证环节,本次通过在线的搜索引擎进行寻找目标进行验证。一是为了展示真实环境下黑客是如何进行路由器攻击的,希望能以此来提高大家的安全意识。二是给大家提供新思路,在无法搭建环境时可以考虑本次实验的验证方法。三是想和大家提个醒,在进行此类的漏洞验证行为时,切勿做出攻击性行为,比如本次,对于命令执行的漏洞,可以通过CEYE等平台进行验证。
。
参考:
https://paper.seebug.org/papers/Archive/D-Link%20%E8%B7%AF%E7%94%B1%E5%99%A8%E4%BF%A1%E6%81%AF%E6%B3%84%E9%9C%B2%E5%92%8C%E8%BF%9C%E7%A8%8B%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90%E5%8F%8A%E5%85%A8%E7%90%83%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E6%8A%A5%E5%91%8A.pdf
1.https://ssd-disclosure.com/archives/3236/hack2win-2017-the-online-version-wip
2.https://ssd-disclosure.com/archives/3364/ssd-advisory-d-link-850l-multiple-vulnerabilities-hack2win-contest
转载:https://blog.csdn.net/yalecaltech/article/details/117299643