欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

物联网入门 --------- 首次 cve 复制(CVE-2020-24581 D-Link DSL-2888A 远程命令执行漏洞分析)

最编程 2024-07-14 16:55:46
...

漏洞描述:

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

漏洞编号: CVE-2020-24581、CVE-2020-24579

fofa指纹: body=”DSL-2888A” && server==”uhttpd”

影响版本: AU_2.31_V1.1.47ae55之前版本

固件下载:https://www.dlink.com.sg/dsl-2888a/

漏洞分析:

首先我们需要binwalk将固件解开

binwalk -Me DSL-2888A_AU_2.12_V1.1.47Z1-Image-all.bin

这里我要吐槽一下,因为我的虚拟机环境是ubuntu 21.10 这binwalk我总是提取不出来root目录,在耗费了一天的时间之后,才发现devttys0的binwalk在py3好像是有问题的,所以我们需要下载liyansong2018的binwalk

下载过程

cd ../../
git clone https://github.com/liyansong2018/binwalk.git
cd binwalk
sudo ./deps.sh
sudo python3 setup.py install
sudo pip3 install python3-magic

提取之后

 

 因为这个漏洞是需要web服务的,所以我们需要了解一下固件中组件的位置,我们可以去查看开机启动脚本/ect/rc.d/rcS文件查看

 

所以我们通过在源代码中查找这个文件进行代码审计

通过shift+f12根据./cgi-bin发现了该字符串在函数sub_BEA0有所调用

于是乎进行代码审计

 

 首先是获取要访问的文件路径,然后将cgi-bin拼接到文件路径之后

 

 

 

 这里就是给参数拼接环境变量,然后后面的post看出可能是需要设备登录权限

 

 这里主要是用来执行文件的函数

经过这里的判断可以看出,如果设备登录,就可以任意执行文件

然后再去查看httpd是如何调用到cgi-bin的,继续搜索字符串在别的函数的调用

 

 我们可以看到在函数sub_9C4C加载了/cgi-bin路径并且运行了sub_BEA0这个函数

 

 而这个函数在sub_9F24中被调用,是为了加载/cgi-bin /goform等各种组件

然后我们去查看execute_cmd.cgi这个文件在cgi-bin文件里面

#!/bin/sh
. /usr/syscfg/api_log.sh
cmd=`echo ${QUERY_STRING} | cut -d = -f 3` #取出cmd=后面的内容
cmd=`echo ${cmd} |tr "%20" " "` #将%02转化成空格

result=`${cmd}`   #运行命令
TGP_Log ${TGP_LOG_WARNING} "cmd=${cmd}, result=${result}"

echo  "Content-type: text/html"
echo  ""
echo -n ${result}

可以看到他获取了QUERY_STRING这个参数的值,然后去运行,并没有对参数进行过滤,甚至不同的参数都是可以的

然后我们去到httpd代码中寻找QUERY_STRING这个参数

 

 可以看到在这个函数中加载了这参数

我们在ajax.js(/www/js/ajax.js)中也可以看到querystring 字符串

 

 我们可以看到他是将url通过这个js文件拼接号之后送到dhttpd中进行处理

############################################################################

所以这个漏洞利用就是,我们通过登录设备后,去访问execute_cmd.cgi这个文件然后通过timostamp参数&后+cmd命令进行任意代码执行,甚至说不需要这些参数即可任意代码执行

#############################################################################

因为我的firmae一直没download.sh好,所以我就跟作者一样通过fofa去搜索了该设备进行复现

 

 

可以看到在我们错误输入密码之后,拼接了wifi.shtml成功访问到了改文件

 

所以我们同样能通过访问cgi-bin/execute_cmd.cgi文件跟cmd命令去实现任意代码执行

 

复现感觉:

第一次复现iot漏洞后,我通过根据师傅的文章进行复现,面对如此广的的各种配置文件和各种函数,感觉到了漏洞挖掘过程中,需要不断的积累经验和代码审计能力的提高,革命尚未成功,同志们仍需努力,冲!

感谢师傅在网上的文章,能帮助我去复现漏洞,非常感谢

CVE-2020-24581 D-Link DSL-2888A 远程命令执行漏洞分析 - 安全客,安全资讯平台 (anquanke.com)