牛逼的帖子,先收藏,再学习!
0x00 背景
2017年6月11日hack2Win(网络设备黑客竞赛)举办首届线上比赛,参赛选手可以通过互联网连入D-Link Dir-850L路由器然后黑掉它,其中有一名选手实现了远程任意代码执行。D-Link官方在7月27日推出了Dir-850L 路由器1.47B07版本的补丁,地址:http://support.dlink.com/ProductInfo.aspx?m=DIR-850L。
现今公布了Hack2Win竞赛中提交的3个漏洞的相关细节,地址:https://blogs.securiteam.com/index.php/archives/3364。
- 通过广域网或局域网实现远程代码执行
- 通过广域网或局域网实现远程未授权信息泄露
- 通过局域网实现root用户远程代码执行
这里仅仅分析远程命令执行的漏洞。
0x01 获取源码
D-Link Dir-850L 路由器的固件可以从官方下载获取,这里下载1.14.B07版本的固件,地址: ftp://ftp2.dlink.com/PRODUCTS/DIR-850L/REVA/DIR-850L_REVA_FIRMWARE_1.14.B07_WW.ZIP。下载固件并解压后,我们得到固件文件DIR850LA1_FW114b07WW.bin,利用binwalk提取固件内容。
上图可以看到该固件采用的是Squashfs文件系统,从binwalk解压出的文件中找到190090.squashfs文件,然后继续用binwalk提取,得到如下内容
可以看出这是一个标准的linux文件根目录。我们需要关注的是处理web服务的程序,该程序开启各种服务端口,并且为外部访问提供配置,修改等服务,文件存在于htdocs目录下, 其中应用层的服务是用PHP语言编写,也是本次分析需要重点关注的地方。
0x03 分析远程命令执行漏洞
要成功利用远程代码执行漏洞,需要组合未授权任意文件上传漏洞和命令注入漏洞才能实现。
未授权任意文件上传漏洞利用hedwig.cgi
上传xml文件,获取管理员用户名和密码。当管理员接口设置改变时,会将改变的设置以xml的格式发送给hedwig.cgi
,hedwig.cgi
会调用htdocs/webinc/fatlady.php
去载入设置。fatlady.php
核心代码如下:
foreach ($prefix."/postxml/module")