路由器漏洞挖掘测试环境的搭建之问题总结(二)
字数 1790 2025-08-22 12:22:48
路由器漏洞挖掘测试环境搭建指南:QEMU问题详解与解决方案
前言
在固件漏洞挖掘和复现过程中,环境搭建是一个常见且复杂的问题。本文总结了使用QEMU搭建路由器漏洞挖掘测试环境时遇到的各种问题及其解决方案,特别关注QEMU版本选择、网络配置、CGI模拟、Firmadyne使用和GDB编译等关键环节。
一、QEMU版本选择与安装
推荐版本
- 最佳版本:QEMU 2.4.0
- 版本过低会导致用户模式下出现
Invalid ELF image for this architecture错误(即使大小端设置正确) - 版本过高在使用Firmadyne模拟固件时会出现
Invalid parameter 'vlan'错误
- 版本过低会导致用户模式下出现
安装方法
- 从官网下载源码:https://download.qemu.org/
- 编译安装:
./configure
sudo make -j8
sudo make install
- 验证版本:
qemu-system-<arch> --version
二、虚拟网络配置
1. 基础虚拟网卡设置
使用tunctl命令创建虚拟网卡与QEMU虚拟机通信:
sudo tunctl -t tap0 -u `whoami` # 创建虚拟网卡
sudo ifconfig tap0 10.0.0.2/24 # 配置IP地址
在虚拟机中配置:
sudo ifconfig eth0 10.0.0.1/24
测试连通性:
ping 10.0.0.1 # 从宿主机ping虚拟机
ping 10.0.0.2 # 从虚拟机ping宿主机
2. 宿主机与虚拟机网桥配置(使虚拟机连接外网)
宿主机操作:
sudo brctl addbr virbr0 # 添加网桥
sudo brctl addif virbr0 eth0 # 添加eth0网口
tunctl -t br0 -u `whoami` # 设置虚拟网卡
ifconfig br0 10.0.0.1 # 配置IP
sudo brctl addif virbr0 br0 # 添加br0到网桥
配置文件修改:
编辑/etc/network/interfaces,添加:
auto lo
iface lo inet loopback
auto virbr0
iface virbr0 inet dhcp
bridge_ports eth0 # 将网桥出口设为eth0
虚拟机配置:
ifconfig eth0 10.0.0.2
三、用户模式模拟CGI问题
1. 找不到CGI文件问题
问题现象:
运行脚本时报错找不到/htdocs/web/hedwig.cgi
原因:
使用binwalk解压固件时,将文件系统解压到了只读目录,导致符号链接无法建立
解决方案:
将固件解压到可写目录(如/home目录下)
2. QEMU只能运行xxx.cgi文件
原因分析:
- CGI的main函数根据
argv[1]判断处理函数 - 直接运行
qemu -L ./ ./htdocs/cgibin会导致argv[1]为"cgibin",无法通过判断 - 使用符号链接时,
argv[1]为符号名本身,能正常通过判断
解决方案:
使用符号链接方式调用CGI程序
四、Firmadyne使用问题
1. 无网卡IP或169.254.x.x地址
问题现象:
- 模拟系统获取到169.254.x.x地址(DHCP失败后的保留地址)
- 外部无法访问该IP
解决方案:
改用QEMU系统模式运行
2. HTTP服务无法访问问题
排查步骤:
- 检查端口是否监听:
netstat -tuln - 检查HTTP服务进程:
ps -aux | grep http - 检查配置文件(如
/var/run/httpd.conf)
常见问题:
- 配置文件绑定到
lo网卡 - 需要改为绑定到与宿主机共享的
eth0网卡
解决方案:
- 修改配置文件中的Interface为
eth0 - 重启HTTP服务:
httpd -f /var/run/httpd.conf
五、静态GDB编译问题
1. 推荐版本
- 最佳版本:GDB 7.10
- 版本过高会出现
configure: error: ***A compiler with support for c++11 language features is required - 版本过低可能无法满足需求
- 版本过高会出现
2. 编译方法
./configure \
--target=mipsel-linux \
--host=mipsel-linux \
--program-prefix=mipsel-linux \
--prefix=`echo $PWD`/bin \
CC=/path/to/mipsel-linux-gcc \
CXX=/path/to/mipsel-linux-g++ \
AR=/path/to/mipsel-linux-ar \
LD=/path/to/mipsel-linux-ld \
RANLIB=/path/to/mipsel-linux-ranlib \
STRIP=/path/to/mipsel-linux-strip \
CFLAGS="-w -static" \
CXXFLAGS="-w -static" \
LDFLAGS="-static"
sudo make -j8
make install
3. 常见错误及解决
- AR工具问题:在configure时明确指定AR路径
- 版本兼容问题:尝试修改configure文件中的条件判断(如将
!=改为==) - 编译失败:可考虑使用GitHub上预编译的版本
六、其他常见问题
1. chroot报错"No such file or directory"
解决方案:
- 使用静态链接的QEMU版本:
qemu-mips→qemu-mips-staticqemu-mipsel→qemu-mipsel-static
2. Firmadyne特定问题
- 参考GitHub issue:https://github.com/firmadyne/firmadyne/issues
- 搜索类似问题解决方案
- 咨询社区其他成员
总结
搭建路由器漏洞挖掘测试环境是一个复杂的过程,需要特别注意:
- QEMU版本选择(推荐2.4.0)
- 网络配置的正确性(虚拟网卡和网桥)
- CGI模拟时的调用方式
- Firmadyne使用中的网络服务配置
- 交叉编译GDB时的版本和参数选择
通过系统性地解决这些问题,可以建立一个稳定可靠的漏洞挖掘测试环境,为后续的安全研究工作奠定基础。