下载固件ftp://54.187.190.227/PRODUCTS/DIR-605L/REVA/DIR-605L_FIRMWARE_1.13.ZIP,
binwalk解开
binwalk -e ./dir605L_FW_113.bin
讲qemu-mips复制到固件根目录
cp $(which qemu-mips) ./
尝试直接执行
sudo chroot . ./qemu-mips ./bin/boa
chroot: failed to run command ‘./qemu-mips’: No such file or directory
后来发现需要将依赖库复制到对应目录
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 (0x00007f252e30e000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f252e09c000)
/lib64/ld-linux-x86-64.so.2 (0x00007f2531c02000)
复制
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.3 ./lib/x86_64-linux-gnu
cp /lib64/ld-linux-x86-64.so.2 ./lib64
ok,完美,接下来就是处理路由器程序的问题了(路由器的web二进制程序是boa)
sudo chroot ./ ./qemu-mips ./bin/boa
Initialize AP MIB failed!
qemu: uncaught target signal 11 (Segmentation fault) - core dumped
Segmentation fault
32位程序,那就用32位ida远程调试
$ file ./bin/boa
./bin/boa: ELF 32-bit MSB executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked, interpreter /lib/ld-uClibc.so.0, corrupted section header size
加上-g参数qemu会帮你启动一个gdbserver在那
$ sudo chroot ./ ./qemu-mips -g 1234 ./bin/boa
ida打开程序后远程附加调试,搜索字符串并在上一处跳转处下断点
可以看到是apmib_init函数返回0导致输出Initialize AP MIB failed!这个错误
查了下:http://jyhshin.pixnet.net/blog/post/47162002-realtek-apmib-library
apmib_init(),是從 flash 讀出 mib 值寫入 RAM,这个跟我们的web程序应该影响
或者使用gdb,当然要使用多架构的
sudo apt install gdb-multiarch
最好装个gef
https://github.com/hugsy/gef
gdb打开
gdb-multiarch ./boa
gdb远程附加
gef➤ target remote 127.0.0.1:1234
那就可以愉快地调试了
那我们怎么劫持这个调用呢,那我们就,搜索一下,应该是下面的so文件
$ find ./ -name "apmib*"
./lib/apmib.so
那我们编写一个动态库劫持这个init函数得了,直接return1
#include <stdio.h>
#include <stdlib.h>
int apmib_init(){
return 1;
}
编译前,装一下啊gcc-mips-linux-gnu
sudo apt install gcc-mips-linux-gnu
编译
$ mips-linux-gnu-gcc -Wall -fPIC -shared apmib.c -o apmib-ld.so
我们启动的时候可以用-E设置环境变量(LD_PRELOAD就是优先加载我们的so文件)
sudo chroot ./ ./qemu-mips -E LD_PRELOAD="./apmib-ld.so" ./bin/boa
./bin/boa: can't load library 'libc.so.6'
那就讲lib目录的文件复制一份,又来一个错误
giant@ubuntu:~/learn/ch3/_dir605L_FW_113.bin.extracted/squashfs-root-0/lib$ file libc.so.0
libc.so.0: ELF 32-bit MSB shared object, MIPS, MIPS-I version 1 (SYSV), dynamically linked, corrupted section header size
giant@ubuntu:~/learn/ch3/_dir605L_FW_113.bin.extracted/squashfs-root-0/lib$ cp libc.so.0 libc.so.6
giant@ubuntu:~/learn/ch3/_dir605L_FW_113.bin.extracted/squashfs-root-0/lib$ cd ..
giant@ubuntu:~/learn/ch3/_dir605L_FW_113.bin.extracted/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访问还是会崩,好了其实这个过程也学到了不少
《揭秘家用路由器0day漏洞挖掘技术》
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有