路由器漏洞分析系列(1):路由器固件模拟环境搭建
字数 1073 2025-08-04 08:17:24
路由器固件模拟环境搭建与漏洞分析指南
1. 固件提取工具 Binwalk 安装与使用
安装步骤
-
更新系统并安装基础工具:
sudo apt-get update sudo apt-get install build-essential autoconf git -
克隆并安装 Binwalk:
git clone https://github.com/devttys0/binwalk.git cd binwalk sudo python setup.py install sudo ./deps.sh -
提取固件(递归提取):
binwalk -Me XX.bin
2. QEMU 模拟执行环境搭建
QEMU 安装
# 用户模式安装
sudo apt-get install qemu
sudo apt-get install qemu-user-static
# 系统模式安装
sudo apt-get install qemu-system
QEMU 运行模式
用户模式 (User Mode)
-
将 QEMU 可执行文件复制到当前目录:
sudo cp $(which qemu-mips-static) . -
使用 chroot 切换根目录并运行程序:
sudo chroot . ./qemu-mips-static -E LD_PRELOAD="XX.so" -g 1234 bin/boa-E LD_PRELOAD="XX.so":用于指定动态库实现函数劫持-g 1234:开启调试模式,监听 1234 端口
系统模式 (System Mode)
-
启动 QEMU(以 MIPS 为例):
sudo qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta \ -hda debian_squeeze_mips_standard.qcow2 \ -append "root=/dev/sda1 console=tty0" \ -net nic -net tap -nographic -s参数说明:
-M:指定开发板-kernel:内核镜像路径-hda/-hdb:IDE 硬盘镜像-append:内核启动参数-s:等同于-g 1234,开启调试
-
将提取的文件系统拷贝到虚拟机:
scp -r ./cpio-root root@192.168.84.129:/root/ -
在虚拟机中运行程序:
export LD_PRELOAD='XX.so' chroot . bin/busybox
3. Firmadyne 固件模拟工具
安装与使用
-
按照 Firmadyne 官方文档步骤安装
-
建议修改 FAT.py 的
setup_network函数以获取日志:def setup_network(arch, image_id): print "[+] Setting up the network connection, please standby" network_cmd = "sudo " + firmadyne_path + "/scripts/inferNetwork.sh " + image_id + " " + arch child = pexpect.spawn(network_cmd) child.logfile = file("mylog.txt", 'w') # 添加此行获取日志 child.sendline(root_pass) child.expect("Interfaces:", timeout=None) interfaces = child.readline().strip() print "[+] Network interfaces : " + interfaces child.expect(pexpect.EOF)
常见问题解决
问题:/dev/mapper/loop0p1 does not exist and no size was specified
解决方法:
在 makeImage.sh 脚本中,将 kpartx 挂载虚拟文件系统返回的 device 作为 mkfs.ext2 的参数。
4. 交叉编译环境搭建
sudo apt-get install linux-libc-dev-mips-cross
sudo apt-get install libc6-mips-cross libc6-dev-mips-cross
sudo apt-get install binutils-mips-linux-gnu gcc-mips-linux-gnu
sudo apt-get install g++-mips-linux-gnu
5. 调试工具
GDB 调试
- 编译 MIPS 版 GDB 或使用
gdb-multiarch - 使用纯 GDB(避免插件冲突):
- 在
~/.gdbinit中注释掉各种source行
- 在
IDA 使用
- 在 Ubuntu 下通过 Wine 运行 Windows 版 IDA
Ghidra 反编译
- 需要 JDK11
- 优点:可直接查看反编译代码
- 缺点:xref 功能不如 IDA,且不要用于 patch 文件(会修改原文件)
6. 关键注意事项
- Binwalk 安装:必须完整安装,包括依赖库
- QEMU 模式选择:
- 用户模式简单但功能有限
- 系统模式复杂但信息更全面
- 网络配置:系统模式下需要正确配置网卡
- 调试准备:提前准备好调试端口和工具
- 交叉编译:确保工具链完整安装
- 反编译工具:Ghidra 和 IDA 各有优劣,建议结合使用
通过以上步骤,可以搭建完整的路由器固件模拟和漏洞分析环境,为后续的漏洞挖掘和分析工作奠定基础。