【学习记录】Week11(三):House of Botcake 与 House of Pig——现代 CTF 堆利用的双子星
写在前面在 Week11 的前两篇中我们复盘了传统的 House of 系列Spirit, Force, Lore, Einherjar, Rabbit, Orange。随着 glibc 版本的迭代传统的技术或被修补或难以适配现代环境。今天我们正式进入现代 CTF 高频考点的硬核环节。根据最新的 Week11 规划本篇将用最高优先级、最大的篇幅深度剖析House of Botcake与House of Pig这两项在现代堆漏洞利用中出场率极高的技术。 目录现代堆利用背景为什么是 Botcake 和 PigHouse of Botcakeglibc 2.29 的重叠制造机House of PigTcache 与 FSOP 的终极复合利用综合实战思维从 UAF 到 Shell 的现代路径总结与下篇预告1. 现代堆利用背景为什么是 Botcake 和 Pig在 glibc 2.29 引入 Tcache Key 遏制了简单的 Double Free并在后续版本中加强了prev_size一致性检查与 Safe-Linking 机制后传统的利用链遭遇了毁灭性打击。现代 CTF PWN 题特别是 glibc 2.31~2.35 环境的解题思路发生了根本性转变如何制造堆重叠-House of Botcake成为了绝对的主流答案。它巧妙地利用了 Tcache 和 Unsorted Bin 的释放顺序差异在不破坏任何元数据校验的前提下完美制造堆块重叠。如何劫持控制流- 纯堆上的 Hook如__free_hook在 glibc 2.34 中被彻底移除。于是攻击重心转移到了IO_FILE (FSOP)。House of Pig作为 Tcache 与 FSOP 的集大成者成为了获取 Shell 的王牌技术。2. House of Botcakeglibc 2.29 的重叠制造机2.1 核心思想House of Botcake 的目标是让同一个 chunk 同时存在于 Tcache 和 Unsorted Bin 中。一旦达成这个目标我们就可以通过 Unsorted Bin 中的指针泄露 Libc 地址同时通过 Tcache 修改该 chunk 的next指针实现 Tcache Poisoning。2.2 利用条件存在 UAF 漏洞或者能够对已释放的 chunk 进行读写。能够控制 chunk 的分配和释放顺序。Tcache 未满通常需要 7 个 chunk 来填满一个 Tcache bin。2.3 详细利用步骤假设我们要利用大小为0x100的 chunk。阶段一填满 Tcache 并释放进 Unsorted Bin分配 9 个大小为0x100的 chunkA, B, C, D, E, F, G, H, II用于防止与 Top Chunk 合并。依次释放A到G填满 Tcache[0x100]。释放H。因为 Tcache 已满H进入Unsorted Bin。此时H的fd和bk指向main_arena。阶段二制造双重存在4. 分配一个 chunk或调用malloc7 次清空 Tcache[0x100]。5. 再次释放G。此时 Tcache[0x100] 为空G进入Tcache。6.关键步骤再次释放H。此时 Tcache[0x100] 已经有一个G且未满。H会进入Tcache。* *等等glibc 2.29 不是有 Key 检查吗**这就是 Botcake 的精妙之处H之前是在 Unsorted Bin 中的它的内存区域并没有被写入 Tcache KeyKey 是在进入 Tcache 时写入的。当我们再次free(H)时glibc 检查H-key发现它不等于 Tcache 结构体地址因此绕过了 Double Free 检查* 此时H既在 Tcache 链表中Tcache - H - G又在 Unsorted Bin 中H仍然与前面的 chunk 连在一起或者就是独立在 Unsorted Bin。阶段三泄露与投毒7.泄露 Libc利用 UAF 读取H的fd指针此时在 Unsorted Bin 状态下指向main_arena计算出 Libc 基址。8.Tcache Poisoning利用 UAF 修改H在 Tcache 中的next指针将其指向目标地址如__free_hook或栈上的返回地址。9. 连续malloc两次第一次返回H第二次返回目标地址实现任意地址写。1. 填满 Tcache, 释放 H 进 Unsorted Bin2. 清空 Tcache3. 释放 G 进 Tcache4. 再次释放 H由于 H 无 Key, 绕过 Double Free 检查H 进入 Tcache5. 此时 H 同时在 Tcache 和 Unsorted Bin6. UAF 读取 H 的 fd 泄露 Libc7. UAF 修改 H 的 Tcache next 指针8. 连续 Malloc 两次, 获取目标地址控制权3. House of PigTcache 与 FSOP 的终极复合利用3.1 核心思想House of Pig 是针对 glibc 2.34 移除 Hook 函数后的利用难题而设计的。它结合了Tcache Poisoning和IO_FILE (FSOP)技术。其核心在于利用 Tcache Poisoning 劫持分配流将一个伪造的IO_FILE_plus结构体分配到_IO_list_all附近或可控内存中然后通过触发exit()或malloc_printerr执行 IO 流刷新操作最终调用伪造的 IO 虚表通常是_IO_str_jumps或_IO_wstrn_jumps中的函数实现控制流劫持如system(/bin/sh)或栈迁移 ROP。3.2 利用条件拥有 Tcache Poisoning 能力通常通过 House of Botcake 或 UAF 实现。能够泄露 Libc 地址和堆地址用于伪造 IO 结构和计算 Tcache 异或密钥。程序存在正常的退出路径exit或return或能触发堆错误。3.3 详细利用步骤阶段一前置原语准备通过 House of Botcake 或其他手段实现泄露 Libc 基址。泄露堆地址用于绕过 glibc 2.32 的 Safe-Linking。拥有 Tcache Poisoning 能力可以申请任意地址。阶段二伪造 IO_FILE 结构在堆上布置一个伪造的IO_FILE_plus结构体。关键字段设置如下_flags: 设置为0或特定值以绕过检查。_IO_read_ptr,_IO_read_end等通常置零。_IO_write_base: 设置为0。_IO_write_ptr: 设置为1使得_IO_write_ptr _IO_write_base触发overflow逻辑。_chain: 指向下一个 IO 结构如果是单结构可置零。vtable: 指向_IO_str_jumps或_IO_wstrn_jumps合法 vtable绕过 vtable 范围检查。关键利用点在_IO_str_overflow函数中存在如下逻辑// 伪代码 new_buf malloc(new_size); memcpy(new_buf, old_buf, old_len); free(old_buf);我们可以通过控制_IO_buf_base(old_buf) 和_IO_buf_end来控制new_size和old_buf。阶段三劫持 _IO_list_all 与触发利用 Tcache Poisoning将malloc的目标指向_IO_list_all或利用 Largebin Attack 等将伪造的堆块地址写入_IO_list_all。修改_IO_list_all的值使其指向我们在堆上伪造的IO_FILE_plus结构体。触发 FSOP调用exit()。exit会调用_IO_flush_all_lockp遍历_IO_list_all链表对每个 FILE 结构调用overflow。由于我们伪造的vtable是_IO_str_jumps最终会调用_IO_str_overflow。在_IO_str_overflow内部会执行malloc和free。此时我们已经控制了 Tcache可以让这里的malloc返回栈地址然后通过memcpy将 ROP 链写入栈上或者直接利用system(/bin/sh)完成利用。House of Pig 的变体在最新的 CTF 中由于_IO_str_overflow的检查也变严衍生出了利用_IO_wfile_overflow的House of Apple系列和利用_IO_obstack_jumps的技术但其核心架构Tcache 劫持 伪造 IO 结构 触发刷新依然是 House of Pig 奠定的。4. 综合实战思维从 UAF 到 Shell 的现代路径在现代 CTF 中一道题往往是多种技术的组合。以下是一个典型的现代堆题解题思维流漏洞点: UAF / Off-by-one利用 House of Botcake制造堆重叠信息泄露Libc Base Heap Base绕过 Safe-Linking构造 Tcache Poisoning控制流劫持由于无 Hook, 转向 IO_FILE利用 House of Pig伪造 IO_FILE 劫持 _IO_list_all触发 exit/abort执行伪造虚表Getshell / ROP这个流程图完美概括了目前 2.31~2.35 版本 glibc 堆题的通用解法。Botcake 负责“破局”制造原语Pig或 Apple负责“收网”拿下控制流。5. 总结与下篇预告5.1 核心知识点总结House of Botcake利用 Unsorted Bin 中的 chunk 没有 Tcache Key 的特性二次释放使其同时存在于 Tcache 和 Unsorted Bin完美绕过 glibc 2.29 的 Double Free 检查是制造堆重叠的首选。House of Pig在 glibc 移除 Hook 的背景下将 Tcache Poisoning 与 FSOP 结合。通过伪造IO_FILE结构和合法 vtable利用exit触发 IO 流刷新在_IO_str_overflow等函数中劫持执行流。技术组合现代堆题不再是单一技术的单打独斗而是“堆管理机制破坏 (Botcake) - 信息泄露 - 数据结构伪造 (Pig/IO_FILE)”的复合攻击。5.2 下篇预告在下一篇 Week11四中我们将继续探索现代 House 系列的其他重要成员House of Apple针对_IO_wfile_overflow的新一代 FSOP 技术。House of Tangerine2023 年高频出现的利用手法。House of Corrosion利用global_max_fast扩展 Fastbin 范围的强力攻击。综合练习UAF tcache poisoning 实战分析。最终结论House of Botcake 和 House of Pig 是现代 CTF 选手必须熟练掌握的“左右互搏”术。前者是矛撕开现代 glibc 的严密防线获取原语后者是盾在失去传统劫持点后提供可靠的控制流接管方案。掌握它们你就掌握了现代堆利用的命脉。

相关新闻

【Java项目-企悦抽】02-AI赋能产品需求规格说明书

【Java项目-企悦抽】02-AI赋能产品需求规格说明书

声明:本文档AI辅助完成,内容仅供参考 ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🎯 你正在阅读「Java项目-企悦抽」系列文章 🎯 ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🔥 弹简特 个人主页 ❄️ 个人专栏直通车…

2026/7/5 13:42:30阅读更多 →
STM32+ESP8266(AT指令)极简WiFi驱动|串口透传、自动连热点、数据上传上位机

STM32+ESP8266(AT指令)极简WiFi驱动|串口透传、自动连热点、数据上传上位机

一、前言(为什么工控首选ESP8266 AT固件) 在物联网采集、无线监控、设备远程上报项目中,STM32本身不带网络功能,常用联网方案对比: LWIP网络栈:代码量大、配置复杂、极易内存溢出,小单片机不友好。 ESP8266 SDK开发:需要单独编程、双设备联调、开发成本高。 ESP8266 AT…

2026/7/5 13:37:29阅读更多 →
HCI 功能规范【4.5. Command error handling】

HCI 功能规范【4.5. Command error handling】

这部分是 4.5 Command error handling,讲的是:HCI Command 发生错误时,Controller 应该通过什么事件返回错误、错误码放在哪里、命令是否还会继续执行、哪些返回参数仍然有效。前面 4.4 讲的是命令流控:Host 能不能继续发 HCI Com…

2026/7/5 13:37:29阅读更多 →
把 TeXstudio / LaTeX 工程交给 AI:texstudio-mcp 功能详解

把 TeXstudio / LaTeX 工程交给 AI:texstudio-mcp 功能详解

.tex、跑编译、看日志,而不是只会泛泛而谈,那么需要一个专门面向 LaTeX 工作流的 MCP 服务。texstudio-mcp 就是这样一层桥:它在你的工程目录(workspace_root)里安全地读写文件,按需调用本机已安装的 TeX 工…

2026/7/5 14:27:33阅读更多 →
只看 inline 关键字,如何准确判别代码属于 C 还是 C++ 语义?

只看 inline 关键字,如何准确判别代码属于 C 还是 C++ 语义?

一、 源码中 inline 关键字的排查 对项目仓库中所有 .c / .h / .cpp / .hpp 文件中的 inline 关键字进行了全面的审计与排查, 1、 核心结论 结论:确认代码库中所有的 inline 均属于标准 C 的 inline 关键字语义,未发现异常或误用的情况。统计…

2026/7/5 14:27:33阅读更多 →
FFmpeg移动端硬解机制

FFmpeg移动端硬解机制

一文看懂 FFmpeg 在 Android 和 iOS 上的硬件解码:MediaCodec、VideoToolbox 与 AVHWAccel FFmpeg 的硬解不是一个“开关”,而是一套把各平台系统解码器接进 AVPacket → AVFrame 通用流水线的抽象层。 做移动端播放器、剪辑器或转码工具时,迟…

2026/7/5 14:27:33阅读更多 →
OpCore-Simplify:让PC硬件说macOS语言的智能翻译器

OpCore-Simplify:让PC硬件说macOS语言的智能翻译器

OpCore-Simplify:让PC硬件说macOS语言的智能翻译器 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 你是否曾想过,为什么在PC上…

2026/7/5 14:27:33阅读更多 →
Kafka 消息重试设计:别让失败消息原地打转

Kafka 消息重试设计:别让失败消息原地打转

Kafka 消息重试设计:别让失败消息原地打转 一、重试不是直接再消费一次 Kafka 常用于微服务解耦。消费失败时,很多代码会直接抛异常,让消息再次被消费。这样简单,但如果下游一直不可用或消息本身有问题,就会原地打转&a…

2026/7/5 14:27:33阅读更多 →
ROS集成开发环境

ROS集成开发环境

1.TER快捷键2.VS code 安装首先 在网站下载VS code,Linux最好用.deb格式下载好以后,直接拖到linux的文件夹中在这个文件夹打开终端sudo dpkg -i x.debx.deb是你的安装包名卸载代码code的代码:sudo dpkg --purge code插件里面ros现在使用robot…

2026/7/5 14:22:33阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/5 0:01:08阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/5 0:01:08阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/5 0:01:08阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/5 0:01:08阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/5 0:01:08阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/5 0:01:08阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/5 1:30:27阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/5 3:48:10阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/5 3:48:09阅读更多 →