DLink固件运行环境修复与调试

IoT 3个月前 admin
60 0 0

招新小广告运营组招收运营人员、CTF组诚招re、crypto、pwn、misc、合约方向的师傅,长期招新IOT+Car+工控+样本分析多个组招人有意向的师傅请联系邮箱

[email protected](带上简历和想加入的小组

在进行路由器固件分析的时候往往需要将固件模拟运行,通常firmAE和FAP等集成模拟工具是很好的选择,但是并不是所有的固件都可以模拟成功,部分固件运行依赖硬件,这就需要修复固件的运行环境,实现固件的模拟。

以dlink dir619l为例,使用firmAE和FAP模拟均未成功。所以这里采用qemu对此固件进行模拟。

qemu user mode:

首先使用binwalk解包固件,将qemu-mips-static拷贝过来。

DLink固件运行环境修复与调试

尝试运行程序,报MIB错误

DLink固件运行环境修复与调试

ida找到字符串的引用,分析这部分代码逻辑

DLink固件运行环境修复与调试

apmib_init这个函数是从flash中读取mib值到RAM中,模拟环境没有flash硬件,所以应该会读取失败。apmib_init读取数据失败返回0,赋值给v0进行检测,若为0,则回显初始化失败,报错退出。

这里采用hook的方式,编写动态库劫持。

DLink固件运行环境修复与调试

使用qemu加载动态库执行,依旧报错了

DLink固件运行环境修复与调试

重新断点运行,输出到这里没有崩溃

DLink固件运行环境修复与调试

这里会报错

DLink固件运行环境修复与调试

可以看到是由于apmib_get报错,在脚本中添加以下代码hook此函数

DLink固件运行环境修复与调试

可以看到服务成功启动

DLink固件运行环境修复与调试

但是访问web页面又报错了

DLink固件运行环境修复与调试

看一下Wizard_Easy_LangSelect.asp,试图从硬件读取信息

DLink固件运行环境修复与调试

查看first.asp,应该是进入了else分支

DLink固件运行环境修复与调试

将逻辑改为无论如何都进入Welcome.asp

DLink固件运行环境修复与调试

访问成功

DLink固件运行环境修复与调试

至此模拟成功,发送poc进行测试,但是还没有命中漏洞点就又崩溃了

DLink固件运行环境修复与调试


DLink固件运行环境修复与调试

看一下v1寄存器的值

DLink固件运行环境修复与调试

可以看到$v1的值为0x5b59,但是根据sb指令的用法此处应该是一个内存地址,所以使用gdb将v1的值改为有效内存地址或者跳过此条指令继续执行可成功控制返回地址

DLink固件运行环境修复与调试


DLink固件运行环境修复与调试

qemu system mode:

由于user mode 模拟并不能获取程序的基地址,所以真正的调试还需在system mode下进行

下载qemu-system需要的kernel和虚拟硬盘文件,此设备为mips大端

wget https://people.debian.org/~aurel32/qemu/mips/vmlinux-3.2.0-4-4kc-malta
wget https://people.debian.org/~aurel32/qemu/mips/debian_wheezy_mips_standard.qcow2

安装虚拟网络设备tun

sudo apt-get install uml-utilities

为root用户添加网卡tap0

sudo tunctl -t tap0 -u root

设置IP地址

sudo ifconfig tap0 192.168.100.2/24

查看一下我们设置的IP地址

ifconfig

DLink固件运行环境修复与调试

使用如下命令启动

sudo sudo qemu-system-mips -M malta -kernel vmlinux-3.2.0-4-4kc-malta -hda debian_wheezy_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0" -nographic  -netdev tap,id=tapnet,ifname=tap0,script=no -device rtl8139,netdev=tapnet

启动成功后登录使用root/root登录

之后将dir619l的文件系统上传到qemu虚拟机,可以同gdbserver一并上传

scp -r squashfs-root-0/ [email protected]:/root/

在”squashfs-root-0/“目录运行下面脚本,配置虚拟机网卡,启动boa程序

#!/bin/sh
echo "add ip addr ..."
ifconfig eth0 192.168.100.3/24 up
echo "hook ..."
LD_PRELOAD=/apmib-ld.so
export LD_PRELOAD
echo "run boa ..."
chroot . ./bin/boa

可以看到服务已经运行成功了

DLink固件运行环境修复与调试

接下来就是gdbserver 附加调试

另起一个终端ssh连接qemu虚拟机

ssh [email protected]

查看服务pid

DLink固件运行环境修复与调试

gdbserver 附加调试

DLink固件运行环境修复与调试

发送poc,发现在下图这个跳转不知为何报错了

DLink固件运行环境修复与调试

修改当前pc为下一条指令地址运行即可成功触发崩溃控制pc也可以查看程序的内存映射,现在可以进行后续研究

DLink固件运行环境修复与调试


DLink固件运行环境修复与调试

– END –

DLink固件运行环境修复与调试

原文始发于微信公众号(ChaMd5安全团队):DLink固件运行环境修复与调试

版权声明:admin 发表于 2024年6月17日 上午8:01。
转载请注明:DLink固件运行环境修复与调试 | CTF导航

相关文章