主页 环境设置 SEED 实验 书和视频 教师手册 采用情况 英文
SEED Logo

Shellcode 开发实验

Shellcode 在涉及代码注入的许多攻击中被广泛使用。编写 Shellcode 是一项具有挑战性的任务。虽然我们可以从互联网上找到现成的 Shellcode,但在有些情况下我们还是需要编写满足特定要求的 Shellcode。此外,从头开始编写自己的 Shellcode 能学到一些有趣的技术。本实验旨在帮助学生理解这些技术,从而能够编写自己的 Shellcode。

编写 Shellcode 有几个挑战,一个是确保二进制代码中没有零,另一个是找到命令中使用的数据的地址。第一个挑战并不难解决,有几种方法。针对第二个挑战的解决方案导致了两种典型的方法来编写 Shellcode。在第一种方法中,数据在执行期间被推入栈中,因此可以从栈指针获取它们的地址。在第二种方法中,数据存储在代码区域,就在 call 指令之后。当执行 call 指令时,数据的地址被当作返回地址并推入栈中。这两种解决方案都非常有意思,我们希望学生能学习这两种技术。

任务 (PDF 文件)

  • 虚拟机版本: SEED Ubuntu-20.04 VM
  • 实验环境设置文件: 不要在共享文件夹里解压缩下面的文件,否则会出问题。 把 zip 文件拷贝到其它目录, 然后在 VM 里用 unzip 命令解压缩。

SEED 参考书

Apple 芯片机器

本实验描述中给出的代码示例是基于 x86/x64 架构,如果您使用的是 Apple 芯片机器,您可以按照本这个文档中的说明进行操作: 编写 ARM64 的Shellcode(在 Ubuntu 中)