路由器固件漏洞分析

794 字
4 分钟
路由器固件漏洞分析

环境搭建#

固件提取#

UBI

ubireader_extract_images

squashfs 的魔数为:68 73 71 73 (小端序:0x73717368)12

unblob#

unblob 是更现代的固件提取工具。

安装:3

sudo apt install unblob

安装其依赖的外部提取工具:3

sudo apt install android-sdk-libsparse-utils e2fsprogs p7zip-full\
unar zlib1g-dev liblzo2-dev lzop lziprecover libhyperscan-dev zstd lz4 sasquatch

使用该命令验证所有依赖是否满足:3

unblob --show-external-dependencies

提取固件:3

unblob <xxx.bin>

binwalk#

binwalkkali (binwalk2) 或 binwalk3kali

查看:

binwalk3 xxx.bin

提取:

binwalk3 -Me xxx.bin

得到 squashfs

仿真#

用户态仿真#

由于路由器往往使用 MIPS 或 ARM 架构,直接 chroot 会出现问题。

安装 qemu-user 包后可以直接 chroot

sudo apt install qemu-user
sudo chroot ./ ./bin/sh
Note

挂载前检查一下 ./bin/sh 有没有执行权限位

全系统仿真#

全系统仿真无需手动挂载文件系统。

FirmAE#

FirmAE 本质是 QEMU 全系统仿真,但是替我们做了很多工作。

更换静态 busybox(FirmAE 会用系统的静态 busybox 替换进仿真环境)

sudo apt install busybox-static
git clone --recursive https://github.com/pr0v3rbs/FirmAE.git
cd FirmAE
sudo ./download.sh
sudo ./install.sh

安装时可能遇到:Error: Package 'uml-utilities' has no installation candidate,是因为 uml-utilities 包已经被移出 Kali 仓库,

需要另行手动安装该包,否则后面网络模拟会卡住:(FirmAE 用到该包的 tunctl)

# 安装
从 Debian 仓库拉取 deb 包后手动安装
# 验证
apt list --installed | grep uml
sudo ./init.sh

检查:

sudo ./run.sh -c <名字> <固件文件>
# 检查过程中日志在 ./scratch/1 下,模拟仿真性能损耗大,时间会比较长

如果检查通过,则可以运行仿真:

sudo ./run.sh -r <名字> <固件文件>

每次运行后都会挂载 loop 设备,会导致后续重新仿真失败,需要清除之前的挂载:

lsblk
sudo umount <挂载点>
sudo losetup -d <设备>

FAT#

FAT 是另一个 IoT 仿真工具。

qemu-system#

手动 qemu 整机模拟,比较复杂,需要处理很多工作。

NVRAM#

Web 服务通常会读写 /proc/nvram 或 /dev/nvram,如果没有挂载或对应文件不存在,会导致无法正常启动 Web 服务。

mount -t proc proc /proc
mount -t ramfs ramfs /var
/etc/init.d/S19init.sh
/etc/init.d/S20init.sh

FirmAE 会替我们处理好 NVRAM,但是用户态仿真需要手动处理。

其他常见方式:

  • touch /proc/nvram

漏洞挖掘#

Web Server#

CGI#

CGI (Common Gateway Interface) 是一种能让 Web 服务器执行外部程序来处理 HTTP(S) 请求的接口标准。4

在路由器的漏洞挖掘中,我们经常会看到 CGI 关键词

逆向工程#

内存映射

F5 反汇编

使用 IDA 打开后会生成如下文件:

  • .id0 主数据库文件
  • .id1 数据库文件
  • .id2 数据库文件
  • .nam 命名列表
  • .til 类型信息库

导入后左侧的 sub_xxx 函数是因为 IDA 没有识别到原来的名字

所有紫色背景的函数均为 .extern 动态链接的。

加粗代表该函数有函数原型,例如标准库的 sprintf, snprintf

按下 X 查看所有 Xref (Cross Reference 交叉引用):

  • Xrefs To -> 谁引用了我
  • Xrefs From -> 我引用了谁

汇编#

由于逆向工程通常使用 Intel 语法,这里统一使用 Intel 语法。

这里只列举 IoT 常见的架构

MIPS 汇编
2026-08-29#MIPS#汇编

References#

Footnotes#

  1. git.kernel.org - magic.h ↩

  2. File-Extension.info - SFS File ↩

  3. Github - unblob ↩ ↩2 ↩3 ↩4

  4. Wikipedia - CGI ↩

路由器固件漏洞分析
https://nekoside.com/posts/router-vulnerability/
作者
nekoside
发布于
2026-09-04
许可协议
CC BY-NC-SA 4.0
文章目录