D-Link DIR-823G 命令注入漏洞分析与复现

固件安全
2022-12-26 21:14
47856

0x01.漏洞原理

D-Link DIR-823G v1.02 B05及之前的版本存在命令注入漏洞,攻击者可以通过POST的方式往 /HNAP1发送精心构造的请求,执行任意的操作系统命令。

0x02.固件环境模拟

使用 firmadyne 对固件进行模拟

image.png

模拟成功,进行初始化配置

image.png

通过 web 成功访问

image.png

0x03.漏洞分析

从官网上下载 D-Link DIR-823G 的固件,先用 binwalk 查看固件的文件系统格式 squashfs 和 小端架构

image.png

使用 binwalk 对固件进行提取

image.png

得到以下文件

image.png

我们进行分析的就是 squashfs-root 文件夹,里面的是标准的 Linux目录结构, 可以确定这个固件基于 Linux 的。

image.png

查看 /etc/init.d/rcS 文件,可以确定路由器开启的服务,发现路由器开启了一个 goahead 服务

image.png

GoAhead WebServer,它是一个源码,免费、功能强大、可以在多个平台运行的嵌入式WebServer。

goahead的websUrlHandlerDefine函数允许用户自定义不同url的处理函数

image.png

根据不同的请求交给不同的函数进行处理,这些处理函数有统一的参数:

image.png

1 int (*fn)(webs_t wp, char_t *url, char_t *path, char_t *query)

2 wp Web server connection handle.
3 url Request URL.
4 path Request path portion of the URL.
5 query Query string portion of the URL.

image.png

使用 grep 命令查找 goahead 的二进制程序

image.png

1.clb@clb-virtual-machine:~/home/clb/1iot/D-Link/D-Link_DIR-823G/dir-823g-v1.0-b05/_DIR823G_V1.0.2B05_20181207.bin.extracted/squashfs-root$ grep -r "goahead"

2.Binary file bin/goahead matches、

3.Binary file bin/timelycheck matches

4.Binary file bin/mtn_upgrade matches

5.etc/init.d/rcS_GW:goahead &

6.etc/init.d/rcS:goahead &

image.png

使用 IDA 分析 /bin/goahead 二进制文件

image.png

通过关键字 HNAP1/goform/cgi-bin快速定位到关键位置。/HNAP1处理函数的逻辑函数位于 0x42383C 跟进函数

image.png

这里可以看出如果 url处理的是 /HNAP1的话会成功回显200确定建立连接

继续往下分析,我们会发现一个函数列表

image.png

image.png

在这里我们可以发现非常熟悉的 Login 那么我们可以知道,HNAP1 根据 url 调用的不同函数来进行匹配这个函数列表,最后进行执行。由于看汇编十分墨迹,这里我使用 ghidra 进行反汇编成类C的语言

image.png

这里可以看到FUN_0040b1f4根据不同的 url 调用不同的函数进行处理,这里对应就是上面 IDA 最开始进行分析的图片

这里我们追踪 FUN_0042383c

image.png

在这里我们发现逻辑和 IDA 分析的第二个图片吻合。往下分析

image.png

这里 &PTR_s_SetMultipleActions_0058c560对应不同的函数列表

image.png

这里我们发现如果函数列表中的函数与请求的字符串相同时,会往下执行,并且调用了snprintf通过 echo的方式往 /var/hnaplog中写入了数据 param_7, param_7对应的就是 post传入的数据

image.png

post的数据要加上引号,因为echo ‘%s’ > /var/hnaplog中本身带了单引号,如果只是echo 0431lab,相当于

echo '`echo 0431lab`' > /var/hnaplog

·由于命令由引号括起,会当做字符串处理,不会执行命令
·如果使用' 进行闭合的话,post中的两个引号分别与自带的两个引号组合,反引号没有嵌套在单引号中,会当做命令执行

image.png

这个时候可以通过 post进行提交请求,也可以通过 requests 进行发包

0x04.POC

image.png

执行POC脚本,通过 web 访问 test.txt 文件,发现文件已经写入,证明漏洞漏洞执行成功

image.png

0x05.采坑

1.firmadyne 在ubuntu 64位下装不上,在32位才能装上,装了好久 ……

0x06. 参考

1.https://xz.aliyun.com/t/5705#toc-4

2.https://www.heibai.org/post/1395.html

3.https://github.com/attify/firmware-analysis-toolkit

分享到

参与评论

0 / 200

全部评论 2

zebra的头像
学习大佬思路
2023-03-19 12:15
Hacking_Hui的头像
学习了
2023-02-01 14:20
投稿
签到
联系我们
关于我们