rios0rios0/exploit-exercises

GitHub: rios0rios0/exploit-exercises

一个用于学习系统调用漏洞利用和shellcode开发的教育性项目。

Stars: 2 | Forks: 0

Exploit Exercises

Latest Release License

这是一份针对 x86 (32位) 和 x86_64 (64位) Linux 架构的 shellcode 开发实战练习集,使用 NASM 在 Docker 容器内进行汇编。该项目旨在作为学习底层漏洞利用开发、Linux 系统调用规范以及 opcode 提取技术的教育资源。 ## 功能特性 - **多架构支持:** 包含针对 i386 (32位) 和 x86_64 (64位) 目标的练习 - **容器化构建环境:** 基于 Alpine 的容器,预装了 NASM、GNU Binutils 和 Bash,消除了对宿主机的依赖 - **基于 Makefile 的工作流:** 通过单一命令即可完成编译、链接、opcode 导出和执行 - **基于 Syscall 的 shellcode:** 练习展示了如何直接调用 Linux 内核 syscall(i386 使用 `int 0x80`,x86_64 使用 `syscall`) - **无空字节技术:** 使用 `xor` 进行寄存器清零、基于栈的字符串构造以及最小化 opcode 载荷 - **Intel 语法反汇编:** `objdump` 输出采用 Intel 语法,便于阅读 ## 练习项目 | 文件 | 架构 | 描述 | |------|-------------|-------------| | `syscalls/exit-i386.asm` | x86 (32位) | 最小化的 `exit` syscall shellcode,返回退出码 8 | | `syscalls/write-i386.asm` | x86 (32位) | 使用栈推送字符串,通过 `write` syscall 向标准输出打印 "hack the planet\n" | | `syscalls/write-x86_64.asm` | x86_64 (64位) | 使用 64 位寄存器和 `syscall` 指令,通过 `write` syscall 向标准输出打印 "hack the planet\n" | ## 技术栈 - **NASM** -- 用于 x86/x86_64 汇编的 Netwide 汇编器 - **GNU Binutils** (`ld`, `objdump`) -- 用于链接和反汇编 - **Docker** 和 **Docker Compose** -- 容器化构建环境 - **Alpine Linux** -- 轻量级基础镜像(原生支持 i386 和 x86_64) - **Make** -- 构建自动化工具 ## 项目结构 ``` exploit-exercises/ ├── .setup/ │ ├── docker-compose.yml # Defines target32 and target64 services │ ├── i386/ │ │ └── Dockerfile # Alpine i386 image with NASM and Binutils │ └── x86_64/ │ └── Dockerfile # Alpine x86_64 image with NASM and Binutils ├── syscalls/ │ ├── exit-i386.asm # 32-bit exit syscall exercise │ ├── write-i386.asm # 32-bit write syscall exercise │ └── write-x86_64.asm # 64-bit write syscall exercise ├── Makefile # Build automation (init, compile, link, dump, test) └── LICENSE ``` ## 安装说明 1. 克隆仓库: git clone https://github.com/rios0rios0/exploit-exercises.git cd exploit-exercises 2. 构建并启动 Docker 容器: make init 此命令会构建两个基于 Alpine 的 Docker 镜像(`nasm-pack:i386` 和 `nasm-pack:x86_64`),并以分离模式启动它们。 ## 使用指南 所有命令接受两个参数: - `ASM_FILE` -- 汇编源文件的路径(例如,`syscalls/write-i386.asm`) - `TARGET` -- 目标架构(`32` 或 `64`) ### 将汇编文件编译为目标文件 ``` make compile ASM_FILE=syscalls/write-i386.asm TARGET=32 ``` ### 将目标文件链接为可执行二进制文件 ``` make link ASM_FILE=syscalls/write-i386.asm TARGET=32 ``` ### 导出 opcode(提取 shellcode) ``` make dump ASM_FILE=syscalls/write-i386.asm TARGET=32 ``` 此命令在二进制文件上运行 `objdump -M intel -d`,以 Intel 语法显示反汇编的指令及其对应的 opcode。 ### 运行二进制文件 ``` make test ASM_FILE=syscalls/write-i386.asm TARGET=32 ``` ### 清理构建产物 ``` make clear ``` 从项目中移除所有 `.o` 和 `.o.bin` 文件。 ## 贡献指南 欢迎贡献。请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 了解相关指南。 ## 许可证 本项目的许可证条款详见 [LICENSE](LICENSE) 文件。
标签:Hakrawler, 版权保护, 请求拦截