Yigods/pwn2heap
GitHub: Yigods/pwn2heap
一套渐进式 CTF 堆 Pwn 练习题集,提供七道从 UAF 到 SROP ORW 的题目及其完整源码、部署文件和 exploit。
Stars: 0 | Forks: 0
# pwn2heap
HN2026 的 7 道Pwn 题目,包含源码、发布附件、对应 glibc/loader、Docker 部署文件及exp。
## 致谢与说明
本系列部分题目的设计灵感来源于[Study in Australia | UNSW Sydney](https://www.unsw.edu.au/study) 的网络安全硕士相关考核中接触到的 Pwn 思
路,就此摘出。
系列难度作为学习heap的pwn有很大帮助,可以去理解这些题目掌握heap pwn。在ai盛行的时代,这些题目可以考察一些作为网络安全从业人员的基本功是否扎实。我自己第一次做这些题目的时候也是做了将近一周,希望未来在学习ctf pwn的cyber能够借鉴,ai时代,能够不浮躁做出这些题目,尤为可贵。
## 题目与难度
| 境界 | 目录 | 运行环境 | 核心考点 |
|---|---|---|---|
| 炼气 | `ezpz1` | amd64 / glibc 2.39 | UAF、chunk overlap、函数指针劫持到 `win()` |
| 筑基 | `ezpz2` | amd64 / glibc 2.39 | heap overflow、libc 泄漏、控制流劫持 |
| 筑基 | `notezpz1` | i386 / glibc 2.27 | tcache poisoning、PIE/libc leak、`__free_hook` |
| 金丹 | `notezpz1-plus` | amd64 / glibc 2.39 | 现代堆利用、泄漏与 `setcontext` 利用链 |
| 金丹 | `notezpz2` | amd64 / glibc 2.39 | UAF、largebin、任意读写、栈 ROP |
| 元婴 | `applepie` | amd64 / glibc 2.39 | House of Apple 2 / FSOP → `setcontext` → SROP ORW |
| 元婴 | `darklamp` | amd64 / glibc 2.39 | byte oracle、状态机堆利用、受限 AAR/AAW、`setcontext` → SROP ORW |
## 快速开始
### Docker:完整构建与验证
docker compose build
docker compose up -d
./test_all_docker.sh
所有服务在容器内监听 `9999`,本地映射如下:
| 题目 | 本地端口 |
|---|---:|
| ezpz1 | 8002 |
| ezpz2 | 8003 |
| notezpz1 | 8004 |
| notezpz2 | 8005 |
| applepie | 8006 |
| notezpz1-plus | 8007 |
| darklamp | 8008 |
停止环境:
docker compose down
### 从源码重新构建
./build_all.sh
- `notezpz1` 在 `ubuntu:18.04` 中按 i386 / glibc 2.27 构建;
- 其余题目在 `ubuntu:24.04` 中按 glibc 2.39 构建;
- 需要 Docker、`make` 与网络镜像源访问。
## GZ::CTF 部署
每题 Docker 镜像通过启动脚本读取 `GZCTF_FLAG` 并写入 chroot 中的 `/flag`。在 GZ::CTF 后台:
Container Image: <你的镜像地址>
Container Port: 9999
Challenge Type: Dynamic Container
不要在镜像中写入真实 flag。仓库的 `flag.example` 仅供本地非 Docker 调试参考,实际 `/flag` 在容器启动时生成。
管理员“测试容器”出现 `flag{GZCTF_dynamic_flag_test}` 是 GZ::CTF 的预期测试 flag;选手实例会注入各队独立的 `GZCTF_FLAG`。
## 推送镜像
构建后可推送全部镜像:
./push_all.sh docker.io//hn2026
Docker Hub 会推送为:
docker.io//hn2026-ezpz1:latest
docker.io//hn2026-ezpz2:latest
...
通用私有仓库(例如阿里云)则保留层级路径:
./push_all.sh registry.example.com/hn2026
## 发布附件
每个题目目录中的 `*_patched`、`libc.so.6` 和对应 `ld-linux*` 是选手运行所需的发布附件;源码可通过 `build_all.sh` 重建。
标签:Pwn, Web报告查看器, 二进制安全, 堆漏洞, 安全靶场, 版权保护, 请求拦截