一次qemu动态调试路由程序的记录
一次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组装电脑配置单推荐报价格
留言与评论(共有 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 |