路由器漏洞挖掘测试环境的搭建之问题总结(二)
字数 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'错误

安装方法

  1. 从官网下载源码:https://download.qemu.org/
  2. 编译安装:
./configure
sudo make -j8
sudo make install
  1. 验证版本:
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服务无法访问问题

排查步骤

  1. 检查端口是否监听:netstat -tuln
  2. 检查HTTP服务进程:ps -aux | grep http
  3. 检查配置文件(如/var/run/httpd.conf

常见问题

  • 配置文件绑定到lo网卡
  • 需要改为绑定到与宿主机共享的eth0网卡

解决方案

  1. 修改配置文件中的Interface为eth0
  2. 重启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-mipsqemu-mips-static
    • qemu-mipselqemu-mipsel-static

2. Firmadyne特定问题

  • 参考GitHub issue:https://github.com/firmadyne/firmadyne/issues
  • 搜索类似问题解决方案
  • 咨询社区其他成员

总结

搭建路由器漏洞挖掘测试环境是一个复杂的过程,需要特别注意:

  1. QEMU版本选择(推荐2.4.0)
  2. 网络配置的正确性(虚拟网卡和网桥)
  3. CGI模拟时的调用方式
  4. Firmadyne使用中的网络服务配置
  5. 交叉编译GDB时的版本和参数选择

通过系统性地解决这些问题,可以建立一个稳定可靠的漏洞挖掘测试环境,为后续的安全研究工作奠定基础。

路由器漏洞挖掘测试环境搭建指南: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/ 编译安装: 验证版本: 二、虚拟网络配置 1. 基础虚拟网卡设置 使用 tunctl 命令创建虚拟网卡与QEMU虚拟机通信: 在虚拟机中配置: 测试连通性: 2. 宿主机与虚拟机网桥配置(使虚拟机连接外网) 宿主机操作 : 配置文件修改 : 编辑 /etc/network/interfaces ,添加: 虚拟机配置 : 三、用户模式模拟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服务: 五、静态GDB编译问题 1. 推荐版本 最佳版本 :GDB 7.10 版本过高会出现 configure: error: ***A compiler with support for c++11 language features is required 版本过低可能无法满足需求 2. 编译方法 3. 常见错误及解决 AR工具问题 :在configure时明确指定AR路径 版本兼容问题 :尝试修改configure文件中的条件判断(如将 != 改为 == ) 编译失败 :可考虑使用GitHub上预编译的版本 六、其他常见问题 1. chroot报错"No such file or directory" 解决方案 : 使用静态链接的QEMU版本: qemu-mips → qemu-mips-static qemu-mipsel → qemu-mipsel-static 2. Firmadyne特定问题 参考GitHub issue:https://github.com/firmadyne/firmadyne/issues 搜索类似问题解决方案 咨询社区其他成员 总结 搭建路由器漏洞挖掘测试环境是一个复杂的过程,需要特别注意: QEMU版本选择(推荐2.4.0) 网络配置的正确性(虚拟网卡和网桥) CGI模拟时的调用方式 Firmadyne使用中的网络服务配置 交叉编译GDB时的版本和参数选择 通过系统性地解决这些问题,可以建立一个稳定可靠的漏洞挖掘测试环境,为后续的安全研究工作奠定基础。