D-Link DIR850L-A1固件指令执行漏洞

4 篇文章 1 订阅
0 篇文章 0 订阅

不知道为什么D-Link的固件漏洞真的是…很多。
这次新整活还是整D-Link,首先还是老规矩,官网下载bin固件
官网下载
FTP下载
下载解压后会得到一个名为DIR850LA1_FW114b07WW.bin的二进制文件,用binwalk将其导出目录。

sudo binwalk -e ./DIR850LA1_FW114b07WW.bin

可以看到文件系统是squashfs文件系统
在这里插入图片描述

然后进入到处目录再进入squashfs-root目录,可以看出到一个与linux近乎一致的目录结构
在这里插入图片描述

然后进入htdocs目录,可以找到一个名为cgibin的执行文件,他就是我们要找的目标,他是用来解析php的一个程序。将他放入ghidra进行反编译逆向。
在这里插入图片描述

然后还是利用我一贯的老思路,先直接搜索那几个可能会存在漏洞的敏感函数,在搜索execv时并没有搜索到结果,但是在搜索另一个跟他很类似的函数system时还是得到了我们想要的结果,execv与system的区别就在于execv会完全开启一个新的进程去执行指令,而system则会在执行指令的同时阻塞住当前进程,但他们两者都可以执行系统指令。
在这里插入图片描述

然后我们来查看system函数的调用者,可以看到他有很多。
在这里插入图片描述

接下来我们就要确认那个函数中可能存在漏洞,想要有指令执行漏洞首先要满足:

	1. 会将一个字符串变量拼接并交给system函数执行。
	2. 这个字符串变量的输入内容是前端用户直接或间接可控的
	3. 没有对输入的字符串进行过滤或者其设置的过滤可以被绕过

明确了这三点,就可以对这些函数进行筛查了。接下来就是依次查看那些函数中满足以上三个条件,最后发现soapcgi_main可以满足。
在这里插入图片描述

然后来梳理一下代码逻辑,先来说明一下getenv函数用来获取指定的内容比如getenv("REQUEST_URI")就是获取访问请求的URI,所以从下面代码中可以看出他先获取了请求URI并赋值给变量__s。
在这里插入图片描述

然后就对__s进行判断是否为空,并且将URI用strchr函数以“?”为边界进行分割,然后将?后包括?在内的字符串赋值给__s1并判断__s1是否为空,然后调用strncmp对__s1的前9个字符进行匹配匹配是否是?service=
在这里插入图片描述

然后__s1=__s1+9取到service的值,但要注意从此之后的内容必须满足提交方式为POST。
在这里插入图片描述

再其后调用sprintf函数将__s1变量拼接进指令字符串,拼接后字符串为sh /var/run/'__s1变量值'_'当前进程id'.sh > /dev/console&,然后就会由system函数去调用这条指令。
在这里插入图片描述
如果我们将我们的注入指令放入service参数,即可完成指令注入,现在我们还需要知道这个漏洞如何触发,从soapcgi_main函数名可以得知这个函数是用于处理soap请求的,这是一种简单的基于XML的协议,可以使应用程序在分散或分布式的环境中通过HTTP来交换信息,也就是说首先目标设备要开启对soap的支持此漏洞才可以触发。

目前手里没有相关设备可以进行进一步准确的漏洞验证,但是从理论上来讲此漏洞是的确存在的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值