专栏名称: ChaMd5安全团队
一群不正经的老司机组成的史上最牛逼的安全团队。小二,来杯优乐美。
目录
相关文章推荐
运营研究社  ·  《运营总监实战手册3.0》包邮送,真香 ·  21 小时前  
91运营网  ·  如何用Deepseek运营抖音? ·  昨天  
什么值得买  ·  23万搞定近120平装修!快来抄作业… ·  3 天前  
什么值得买  ·  用过近20款烤箱后,才知道200元和2000 ... ·  3 天前  
51好读  ›  专栏  ›  ChaMd5安全团队

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

ChaMd5安全团队  · 公众号  ·  · 2024-06-16 22:19

正文

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

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

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

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

qemu user mode:

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

尝试运行程序,报MIB错误

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

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

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

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

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

这里会报错

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

可以看到服务成功启动

但是访问web页面又报错了

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

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

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

访问成功

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


看一下v1寄存器的值

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


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

使用如下命令启动

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登录







请到「今天看啥」查看全文