D-Link DSL-2888A AU_2.31_V1.1.47ae55之前的版本存在远程命令执行漏洞,经过身份验证的用户可通过访问/cgi-bin/execute_cmd.cgi触发命令执行漏洞。
D-Link DSL-2888A AU_2.31_V1.1.47ae55之前的版本
执行命令binwal -Me ../IOT_BUG/CVE-2020-24581/DSL-2888A_AU_2.12_V1.1.47Z1-Image-all.bin --run-as=root将固件文件系统提取,提取后的目录结构如图所示
执行命令
cd jffs2-root
进入文件系统,文件系统结构如图所示
该漏洞为web应用漏洞,该固件中web组件为dhttpd,执行命令find . -name “dhttpd”搜索web组件位置,搜索结果如图所示
如图所示,通过IDA打开dhttpd
该远程命令执行接口为/cgi-bin/execute_cmd.cgi,如图所示,在函数sub_9C4C中,如果访问路径中存在/cgi-bin,则调用sub_BEA0函数进行处理
跟进sub_BEA0函数,如图所示,在sub_BEA0函数的第52行将cgi文件与cgi-bin目录进行拼接,在第53行判断cgi文件是否存在,在第63行判断cgi文件是否存在执行权限
跟进sub_BEA0函数,如图所示,在sub_BEA0函数的第70行将获取当前文件路径,在71行在file查找”/”最后一次的位置,如果该位置存在,则在第76行进入file目录
跟进sub_BEA0函数,如图所示,在sub_BEA0函数的105-108行将进行cgi文件执行环境变量配置
跟进sub_BEA0函数,如图所示,在sub_BEA0函数的111-143行将进行身份校验
继续跟进sub_BEA0函数,如图所示,通过身份校验后,在第149行调用sub_BB5C函数对cgi文件进行处理
跟进sub_BB5C函数,在sub_BB5C函数的第40行调用execve函数执行cgi文件
查看execute_cmd.cgi文件具体内容,execute_cmd.cgi文件具体内容如图所示,execute_cmd.cgi文件内容为获取QUERY_STRING中第二个参数的值,并通过反引号``以执行命令方式执行该值
在IDA中搜索QUERY_STRING,搜索结果如图所示
在js文件目录查找QueryString,查找结果如图所示
访问存在QueryString字符的ajax.js文件,ajax.js文件内容如图所示
故当通过身份校验时,构造uri:/cgi-bin/execute_cmd.cgi?timestamp=1&cmd=cmd可执行任意命令,由于该版本路由器在密码栏输入任意密码后即可绕过身份校验,所以不需知道设备密码即可触发命令执行漏洞
原文始发于微信公众号(第59号):CVE-2020-24581 D-Link DSL-2888A 远程命令执行漏洞复现与分析
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论