一、异架构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章的学习:
这张图你看懂了吗?从上到下,我们先把三大架构的基础打牢,然后进入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 本章小结
好,咱们捋一下这章的核心:
- 异架构PWN就是针对非x86 CPU的漏洞利用,IoT设备是主战场。
- 三大架构ARM、MIPS、RISC-V各有特点,ARM最友好,MIPS有延迟槽,RISC-V最简洁。
- Shellcode是漏洞利用的最后一公里,不同架构的系统调用、参数传递、指令编码完全不同。
- 知识体系从基础到实战,层层递进,不能跳级。