一、异架构PWN概述:换个CPU,换个玩法

各位同学,欢迎来到这门课。我是你们的教练,搞了十来年二进制安全,从x86一路折腾到ARM、MIPS、RISC-V,踩过的坑比写过的shellcode还多。

今天咱们聊第一个话题:异架构PWN到底是什么?说白了,就是你的漏洞利用目标,不再是PC上那颗Intel或AMD的x86/x64处理器,而是ARM、MIPS、RISC-V这些“非主流”架构。你想想看,路由器、智能音箱、摄像头、汽车中控——这些设备里跑的CPU,十有八九都是异架构。

核心观点:异架构PWN ≠ 更难,只是规则不同。你熟悉了x86的套路,换到ARM上,寄存器名字变了、指令编码变了、调用约定变了,但漏洞利用的本质——控制程序流、执行任意代码——没变。

1.1 为什么会有异架构PWN?

我刚开始做安全那会儿,觉得全世界只有x86。直到有一次,我帮朋友看一台家用路由器,发现一个栈溢出漏洞。我兴冲冲写好x86的shellcode,结果一跑就崩。后来才意识到——那路由器用的是MIPS芯片。嗯,从那以后我就明白了:漏洞不分架构,但shellcode分。

现在IoT设备遍地都是,ARM、MIPS、RISC-V的出货量早就超过了x86。这些设备上跑着Linux,有网络服务,有用户输入,自然就有漏洞。但CTF比赛和真实漏洞挖掘中,异架构题目越来越多。为什么?因为出题人知道,大部分选手只会x86。

1.2 常见异架构一览

咱们先看看目前最常见的三种异架构。我列了个表,方便你对比:

架构 典型设备 指令长度 寄存器数量 我的评价
ARM 手机、平板、树莓派 4字节(ARM模式)/ 2字节(Thumb模式) 16个通用寄存器(R0-R15) 最像x86,资料最多,入门首选
MIPS 路由器、交换机、机顶盒 4字节(固定长度) 32个通用寄存器($0-$31) 延迟槽是噩梦,但学会后一通百通
RISC-V 新兴IoT、AI加速器 4字节(基础指令)/ 可扩展 32个通用寄存器(x0-x31) 开源、简洁,未来趋势

我的建议:如果你刚接触异架构,先从ARM入手。ARM的生态最成熟,GDB、QEMU、各种调试工具支持最好。MIPS的延迟槽会让你抓狂,但理解了它,你对CPU流水线的理解会上一个台阶。RISC-V嘛,我最近两年才开始认真搞,它的指令集确实干净,但工具链还在快速迭代中。

1.3 Shellcode在PWN中的角色

好,咱们聊聊shellcode。你写一个PWN exploit,最终目的是什么?拿到目标机器的控制权。怎么拿?通过shellcode——一段精心构造的机器码,让CPU执行你想要的逻辑。

在x86上,shellcode的套路很成熟:execve("/bin/sh", NULL, NULL),或者用connectback反弹shell。但在异架构上,事情就没那么简单了。

  • 系统调用号不同:ARM上execve是11号,MIPS上是4011号,RISC-V上又是另一套。
  • 参数传递方式不同:x86用栈传参,ARM用R0-R5,MIPS用$4-$7(即$a0-$a3)。
  • 指令编码不同:同样的nop,x86是0x90,ARM是0xe1a00000,MIPS是0x00000000。
  • 自修改代码的坑:有些架构的指令缓存(I-cache)和数据缓存(D-cache)不自动同步,你写进去的shellcode可能被CPU当成无效指令。

我曾经踩过的坑:有一次在ARM上写shellcode,明明指令字节都写对了,但一执行就段错误。查了两天,最后发现是ARM的指令对齐问题——ARM模式下指令地址必须4字节对齐,我写到了奇数地址上。嗯,从那以后我写shellcode第一件事就是检查地址对齐。

1.4 异架构PWN的知识体系

为了让你对整个课程有个全局认识,我画了一张知识结构图。这张图会贯穿我们整个30章的学习:

异架构PWN Shellcode编写知识体系 ARM MIPS RISC-V 寄存器 & 指令集 调用约定 & 系统调用 延迟槽 & 分支 ABI & 栈帧布局 基础指令集 扩展指令 & 伪指令 Shellcode编写核心技能 系统调用封装 | 地址无关编码 | 自修改 | 编码/解码器 栈溢出 & ROP 堆利用 & 格式化字符串 调试 & 逆向 QEMU用户态模拟 | GDB多架构调试 CTF真题 & 真实设备漏洞利用 每章都有实战练习 从零写shellcode

这张图你看懂了吗?从上到下,我们先把三大架构的基础打牢,然后进入shellcode编写核心技能,接着是漏洞利用技术,最后落到实战。每一层都依赖上一层,跳不过去。

1.5 你需要准备什么?

工欲善其事,必先利其器。我个人习惯用以下工具链:

  • QEMU用户态模拟: qemu-arm、qemu-mipsel、qemu-riscv64。不用买硬件,一台电脑就能跑所有架构的二进制文件。
  • GDB多架构调试: gdb-multiarch,配合QEMU的-g端口,单步调试shellcode。
  • pwntools: Python库,支持生成各架构的shellcode模板,但咱们课程里会手写,不依赖自动生成。
  • 交叉编译工具链: arm-linux-gnueabi-gcc、mipsel-linux-gnu-gcc、riscv64-linux-gnu-gcc。

安装小贴士:在Ubuntu/Debian上,一条命令装完所有工具:sudo apt install qemu-user gdb-multiarch binutils-arm-linux-gnueabi binutils-mipsel-linux-gnu binutils-riscv64-linux-gnu。我建议你装完先跑一个hello world,确认环境没问题再往下学。

1.6 本章小结

好,咱们捋一下这章的核心:

  1. 异架构PWN就是针对非x86 CPU的漏洞利用,IoT设备是主战场。
  2. 三大架构ARM、MIPS、RISC-V各有特点,ARM最友好,MIPS有延迟槽,RISC-V最简洁。
  3. Shellcode是漏洞利用的最后一公里,不同架构的系统调用、参数传递、指令编码完全不同。
  4. 知识体系从基础到实战,层层递进,不能跳级。