1. XCTF 2021 Final house_of_pig 赛题解析
house_of_pig是XCTF 2021总决赛中出现的一道高质量堆利用题目,考察选手对glibc堆管理机制的深入理解以及复杂漏洞链的构造能力。这道题目融合了多种堆利用技术,包括但不限于UAF(Use After Free)、堆风水(Heap Feng Shui)、tcache poisoning以及FSOP(File Stream Oriented Programming)等高级利用技巧。
题目环境基于glibc 2.31,这个版本引入了tcache key机制来缓解部分堆利用技术,但house_of_pig通过精心设计的交互逻辑,仍然为选手提供了多种可能的利用路径。题目名称中的"pig"可能暗指需要像搭积木一样(Pig意为堆积)精心构造堆布局,也可能暗示需要利用类似house of pig的利用技术。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 题目逆向分析与漏洞定位
2.1 程序功能分析
通过逆向工程可以还原出程序的主要功能模块:
-
用户管理系统:
- 注册功能:最多创建5个用户,每个用户结构体0x80字节
- 登录功能:通过用户名密码验证
- 删除功能:释放用户结构体但未清空指针
-
笔记系统:
- 添加笔记:分配0x100字节chunk存储笔记内容
- 编辑笔记:存在堆溢出漏洞(关键漏洞点)
- 删除笔记:正确释放内存但存在UAF可能
-
VIP功能:
- 需要特定用户权限
- 提供额外的内存分配和释放操作
2.2 关键漏洞点
程序存在两个主要漏洞:
- 用户删除后的UAF:
c复制void delete_user() {
if (current_user) {
free(current_user); // 释放后未置空指针
puts("User deleted.");
}
}
- 笔记编辑时的堆溢出:
c复制void edit_note() {
if (current_note) {
printf("Input new content: ");
read(0, c
