您现在的位置是:首页 > 编程 > 

一次qemu动态调试路由程序的记录

2025-07-28 09:59:54
一次qemu动态调试路由程序的记录 实践下载固件ftp://54.187.190.227/PRODUCTS/DIR-605L/REVA/DIR-605L_FIRMWARE_1.1.ZIP,binwalk解开代码语言:javascript代码运行次数:0运行复制binwalk -e ./dir605L_FW_11.bin讲qemu-mips复制到固件根目录代码语言:javascript代码运行次

一次qemu动态调试路由程序的记录

实践

下载固件ftp://54.187.190.227/PRODUCTS/DIR-605L/REVA/DIR-605L_FIRMWARE_1.1.ZIP,

binwalk解开

代码语言:javascript代码运行次数:0运行复制
binwalk -e ./dir605L_FW_11.bin

讲qemu-mips复制到固件根目录

代码语言:javascript代码运行次数:0运行复制
cp $(which qemu-mips) ./

尝试直接执行

代码语言:javascript代码运行次数:0运行复制
sudo chroot . ./qemu-mips ./bin/boa
chroot: failed to run command ‘./qemu-mips’: o such file or directory

后来发现需要将依赖库复制到对应目录

代码语言:javascript代码运行次数:0运行复制
giant@ubuntu:~$ ldd /usr/bin/qemu-mips
	linux-vdso.so.1 =>  (0x00007fffc016e000)
	libgmodule-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so.0 (0x00007f252f59a000)
	libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f252f286000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f252f07e000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f252ed28000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f252eb11000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f252e8f2000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f252e512000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f252e0e000)
	libpcre.so. => /lib/x86_64-linux-gnu/libpcre.so. (0x00007f252e09c000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f251c02000)

复制

代码语言:javascript代码运行次数:0运行复制
cp /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so.0  ./usr/lib/
cp /lib/x86_64-linux-gnu/libglib-2.0.so.0  ./lib/x86_64-linux-gnu
cp /lib/x86_64-linux-gnu/librt.so.1  ./lib/x86_64-linux-gnu
cp /lib/x86_64-linux-gnu/libm.so.6  ./lib/x86_64-linux-gnu
cp /lib/x86_64-linux-gnu/libgcc_s.so.1  ./lib/x86_64-linux-gnu
cp /lib/x86_64-linux-gnu/libpthread.so.0  ./lib/x86_64-linux-gnu
cp /lib/x86_64-linux-gnu/libc.so.6  ./lib/x86_64-linux-gnu
cp /lib/x86_64-linux-gnu/libdl.so.2  ./lib/x86_64-linux-gnu
cp /lib/x86_64-linux-gnu/libpcre.so.  ./lib/x86_64-linux-gnu
cp /lib64/ld-linux-x86-64.so.2  ./lib64

ok,完美,接下来就是处理路由器程序的问题了(路由器的web二进制程序是boa)

代码语言:javascript代码运行次数:0运行复制
sudo chroot ./ ./qemu-mips ./bin/boa
Initialize AP MIB failed!
qemu: uncaught target signal 11 (Segmentation fault) - core dumped
Segmentation fault

2位程序,那就用2位ida远程调试

代码语言:javascript代码运行次数:0运行复制
$ file ./bin/boa
./bin/boa: ELF 2-bit MSB executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked, interpreter /lib/ld-uClibc.so.0, corrupted section header size

加上-g参数qemu会帮你启动一个gdbserver在那

代码语言:javascript代码运行次数:0运行复制
$ sudo chroot ./ ./qemu-mips -g 124 ./bin/boa

ida打开程序后远程附加调试,搜索字符串并在上一处跳转处下断点

可以看到是apmib_init函数返回0导致输出Initialize AP MIB failed!这个错误

查了下:

apmib_init(),是從 flash 讀出 mib 值寫入 RAM,这个跟我们的web程序应该影响

或者使用gdb,当然要使用多架构的

代码语言:javascript代码运行次数:0运行复制
sudo apt install gdb-multiarch

最好装个gef

代码语言:javascript代码运行次数:0运行复制

gdb打开

代码语言:javascript代码运行次数:0运行复制
gdb-multiarch ./boa

gdb远程附加

代码语言:javascript代码运行次数:0运行复制
gef➤  target remote 127.0.0.1:124

那就可以愉快地调试了

那我们怎么劫持这个调用呢,那我们就,搜索一下,应该是下面的so文件

代码语言:javascript代码运行次数:0运行复制
$ find ./ -name "apmib*"
./lib/apmib.so

那我们编写一个动态库劫持这个init函数得了,直接return1

代码语言:javascript代码运行次数:0运行复制
#include <stdio.h>
#include <stdlib.h>

int apmib_init(){
    return 1;
}

编译前,装一下啊gcc-mips-linux-gnu

代码语言:javascript代码运行次数:0运行复制
sudo apt install gcc-mips-linux-gnu

编译

代码语言:javascript代码运行次数:0运行复制
$ mips-linux-gnu-gcc -Wall -fPIC -shared  -o apmib-ld.so

我们启动的时候可以用-E设置环境变量(LD_PRELOAD就是优先加载我们的so文件)

代码语言:javascript代码运行次数:0运行复制
sudo chroot ./ ./qemu-mips -E LD_PRELOAD="./apmib-ld.so" ./bin/boa
./bin/boa: can't load library 'libc.so.6'

那就讲lib目录的文件复制一份,又来一个错误

代码语言:javascript代码运行次数:0运行复制
giant@ubuntu:~/learn/ch/_dir605L_FW_11./squashfs-root-0/lib$ file libc.so.0 
libc.so.0: ELF 2-bit MSB shared object, MIPS, MIPS-I version 1 (SYSV), dynamically linked, corrupted section header size
giant@ubuntu:~/learn/ch/_dir605L_FW_11./squashfs-root-0/lib$ cp libc.so.0 libc.so.6
giant@ubuntu:~/learn/ch/_dir605L_FW_11./squashfs-root-0/lib$ cd ..
giant@ubuntu:~/learn/ch/_dir605L_FW_11./squashfs-root-0$ sudo chroot ./ ./qemu-mips -E LD_PRELOAD="./apmib-ld.so" ./bin/boa
Create chklist file error!
Create chklist file error!
qemu: uncaught target signal 11 (Segmentation fault) - core dumped
Segmentation fault

这个报错是两个函数里头

但一时发现不了是哪里出错,那就从之前apmib_init开始调试

但是不知道为何v0已经为1了,我单步还是不跳,无语

直接用作者的.c去编译就可以启动起来,但是用web访问还是会崩,好了其实这个过程也学到了不少

reference

《揭秘家用路由器0day漏洞挖掘技术》

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2018-04-16,如有侵权请联系 cloudcommunity@tencent 删除程序路由调试linuxqemu

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1207582.html

相关标签:无
上传时间: 2025-07-24 14:17:53
留言与评论(共有 14 条评论)
本站网友 白中白
19分钟前 发表
dynamically linked
本站网友 宗庆后国籍
17分钟前 发表
ELF 2-bit MSB executable
本站网友 重庆家乐福
7分钟前 发表
那就用2位ida远程调试代码语言:javascript代码运行次数:0运行复制$ file ./bin/boa ./bin/boa
本站网友 汉正街一号楚味私厨
5分钟前 发表
can't load library 'libc.so.6'那就讲lib目录的文件复制一份
本站网友 首开华润城
17分钟前 发表
can't load library 'libc.so.6'那就讲lib目录的文件复制一份
本站网友 石家庄苏宁电器
9分钟前 发表
~/learn/ch/_dir605L_FW_11./squashfs-root-0/lib$ cp libc.so.0 libc.so.6 giant@ubuntu
本站网友 刷百度
15分钟前 发表
分享自作者个人站点/博客
本站网友 脸萌
11分钟前 发表
装一下啊gcc-mips-linux-gnu代码语言:javascript代码运行次数:0运行复制sudo apt install gcc-mips-linux-gnu编译代码语言:javascript代码运行次数:0运行复制$ mips-linux-gnu-gcc -Wall -fPIC -shared -o apmib-ld.so我们启动的时候可以用-E设置环境变量(LD_PRELOAD就是优先加载我们的so文件)代码语言:javascript代码运行次数:0运行复制sudo chroot ./ ./qemu-mips -E LD_PRELOAD="./apmib-ld.so" ./bin/boa ./bin/boa
本站网友 脚本错误
18分钟前 发表
MIPS
本站网友 伊曲康唑
29分钟前 发表
dynamically linked
本站网友 首都儿科研究所附属儿童医院
24分钟前 发表
好了其实这个过程也学到了不少reference《揭秘家用路由器0day漏洞挖掘技术》本文参与 腾讯云自媒体同步曝光计划
本站网友 48号文
30分钟前 发表
无语直接用作者的.c去编译就可以启动起来
本站网友 youxy
18分钟前 发表
corrupted section header size giant@ubuntu