异构PWN¶
PWN · 知识域。非 x86 架构与平台的二进制利用。标签:ARM-PWN、AArch64-PWN、MIPS32-PWN、MIPS64-PWN、PowerPC-PWN、RISC-V-PWN。
触发特征¶
file显示 ARM/MIPS/RISC-V/PowerPC/m68k;题目配 qemu-user 或真实开发板固件。
环境基线¶
apt install qemu-user qemu-user-static gdb-multiarch
qemu-arm -L /usr/arm-linux-gnueabihf ./pwn
gdb-multiarch -ex 'set arch arm' -ex 'target remote :1234'
# 交叉编译:arm-linux-gnueabihf-gcc / aarch64-linux-gnu-gcc / mips-linux-gnu-gcc
# pwntools: context.arch='arm' / 'aarch64' / 'mips'
ARM-PWN(32位)¶
- 调用约定:r0-r3 传参;返回地址进 lr,栈上无返回地址时需
pop {pc}gadget。 - Thumb 切换:指令集切换靠 PC 低位(
bx/blx);地址 +1 表 Thumb;shellcode 用 Thumb 缩短(HackIM 2016 ARM 溢出 + Thumb shellcode)。 - gadget 源:movt/movw 组合构造常数;
pop {r0-r3, pc}模板。 - dup2 + socket 重定向 shellcode(网络服务型)。
AArch64-PWN¶
- 调用约定 x0-x7;无
pop rdi类 gadget →getusershell()这类 libc 函数当 x0 设定器(HITCON 2018);ldp批量加载。 - ret2libc 流程同 x86_64;
system需要 x0 指向 "/bin/sh"(静态数据段或自写)。 mrs/msr系统寄存器;cache 指令在 side-channel 场景。
MIPS32/MIPS64-PWN¶
- 延迟槽(delay slot):跳转后下一指令仍执行,gadget 链要考虑。
- $t9 寄存器约定:函数要求 $t9 = 函数地址(gp 计算),ret2libc 时先设 $t9。
- 缓存一致性问题(qemu 无感,真机注意);MIPS64 Cavium OCTEON 协处理器加密(SEC-T CTF 2017,逆向侧)。
- Big-endian/Little-endian 双形态确认。
PowerPC-PWN¶
- 大端为主;调用约定 r3-r10;
bl后 lr 处理;TOC/GOT 结构。 - 出题少,多见于 IOT/固件场(旧路由器、工控设备)。
RISC-V-PWN¶
- rv32/rv64;ABI:a0-a7 传参;
rdynamic缺符号时 GLIBC 符号版本补丁执行(Pwn2Win 2018)。 - 自定义扩展指令集(逆向向,→ Reverse);srdnlenCTF 2026 RISC-V 分析;EHAX 2026 RISC-V 题。
其他架构PWN(小众平台)¶
- m68k(Motorola 68000):两段式 shellcode(HackIT 2017);复古平台(老游戏机、工业设备)。
- Xtensa(ESP32):ROM symbol map 辅助逆向(Insomni'hack 2017)→ IoT。
- DOS COM 实模式:int 0x21 shellcode(SEC-T CTF 2017);16 位 MBR(CSAW 2017 psadbw 约束)。
- Chip-8/Game Boy 等解释器平台:OOB → ret2libc(IceCTF 2018);bgb 调试 Z80(Square CTF 2017)。
- Forth 解释器:system word 调用(32C3 2015)。
工具速查¶
ROPgadget --binary ./pwn --arch arm
# pwntools shellcraft.arm.linux.sh() / shellcraft.aarch64.linux.sh()
objdump -m arm -b binary -D shellcode.bin # 手动反汇编校验
转向¶
- 固件整体分析 → IoT-固件分析;架构逆向基础 → Reverse-低级语言分析