首页/新闻资讯/正文详情

House of Lore

发布时间:2026/9/27 22:46:09 来源:云帆数科 栏目:资讯中心
House of Lore
House of Lore是计算机安全领域特别是 CTF 比赛的 Pwn 方向中一个非常经典的“堆漏洞利用”技巧。它的名字来源于黑客杂志《Phrack》上的一篇文章听起来很魔幻但它的本质就是一个“排队骗局”。把计算机内存想象成一家“储物柜出租中心”。第一步认识“储物柜出租中心” (Heap, Malloc, Free)计算机在运行程序时经常需要临时借用内存用完再还回去。这个借用和归还的机制就是堆Heap管理。借用 (malloc)程序对管理员说“给我一个大小为 100 的储物柜Chunk”。管理员就会从空闲的柜子里挑一个给你。归还 (free)程序用完了把柜子还给管理员。回收站 (Bin)管理员为了方便管理会把归还的空柜子用绳子串起来排成一队。下次有人来借直接从队伍里拉一个出去。第二步空柜子是如何排队的(双向链表与 fd/bk)管理员在排队时用的是“双向链表”。因为柜子现在是空的管理员就在柜子里面塞了两张纸条fd(Forward pointer向前的指针)写着“下一个空柜子在几号”。bk(Backward pointer向后的指针)写着“上一个空柜子在几号”。正常的队伍是这样的[柜子 A]——互相指着——[柜子 B]——互相指着——[柜子 C]如果这时候有人来借柜子管理员会从队尾把[柜子 C]拿走分配出去队伍就变成了 A 和 B。第三步黑客的目的 (任意地址分配)作为黑客你不想要管理员给你的普通空柜子。你想让管理员把“金库的门”比如程序存放密码的内存区、或者程序的执行栈当成一个普通空柜子分配给你。只要你拿到了“金库的门”的使用权你就可以往里面写东西从而控制整个程序。这就是 House of Lore 的核心目标欺骗管理员让他把我们指定的、原本不可用的内存区域当成合法的空柜子分配给我们。第四步House of Lore 的骗局实施假设现在回收站Small Bin里有两个空柜子正在排队[管理员的起点]——[柜子 A]——[柜子 B]1. 制造漏洞篡改纸条因为程序有漏洞比如内存溢出你可以偷偷修改[柜子 A]里的纸条。你把[柜子 A]里面的bk上一个空柜子是谁擦掉写上你的“伪造柜子”金库门的地址。现在的队伍在管理员眼里变成了这样[管理员的起点] --- [柜子 A] ---[你的伪造柜子]2. 应对管理员的安全检查 (Bypass Glibc Check)现代的管理员Glibc 操作系统内存管理器没那么傻。当他顺着纸条摸到你的[伪造柜子]时他会进行一次“回头确认”。管理员会看一眼你的[伪造柜子]问“你的fd下一个柜子指向的是不是 [柜子 A] ”如果不一致管理员就会报警程序崩溃malloc(): smallbin double linked list corrupted。为了骗过他你必须提前在“金库”区域伪造好纸条在伪造柜子的fd位置写上[柜子 A]的地址。在伪造柜子的bk位置写上[另一个伪造柜子]的地址为了应对更严格的连环检查。3. 骗局收网连续申请内存一切准备就绪后你控制程序向管理员借柜子。第一次借管理员把正常的[柜子 B]给了你。第二次借管理员把正常的[柜子 A]给了你。就在这时管理员顺着被你篡改的bk纸条把[你的伪造柜子]拉进了正式的队伍里排在最前面。第三次借成功管理员看着队伍里的[你的伪造柜子]没有起疑心直接把它分配给了你。现在你名正言顺地拥有了对“金库”区域的读写权限。总结House of Lore 需要具备什么条件要完成这套连招你需要具备以下条件这也是打 CTF 比赛时的关键思路一个修改指针的漏洞比如 Heap Overflow堆溢出或者 UAF释放后使用用来篡改正在排队的某个 Chunk 的bk指针。在目标区域伪造数据的能力你需要在你想分配的那块内存你的伪造柜子里提前写好fd和bk用来绕过管理员的安全检查bck-fd victim。控制分配你得能连续调用malloc把正常的 Chunk 消耗掉直到把你的伪造 Chunk 给申请出来。例子我们用一段带有 C 语言风格的伪代码和内存布局来模拟一次真实的 House of Lore 攻击。假设你正在攻击一个程序你的最终目标是让malloc把程序“栈Stack”上的一块内存分配给你。只要拿到了栈的控制权你就能修改函数的“返回地址Return Address”从而执行你写的恶意代码比如弹出一个 Shell。1. 准备工作内存里的角色设定程序运行中有以下几个关键角色Target (目标区域)栈上的一段空间你想让malloc把它分配给你。Chunk A (合法柜子)堆上一块正常分配并被释放的内存大小为0x100。此时它安静地躺在 Small Bin双向链表里。正常情况下Small Bin 的链表看起来是这样的SmallBin 的头---Chunk A---SmallBin 的尾2. 第一步在栈上“伪造柜子” (Forge Fake Chunks)在利用漏洞篡改堆之前你必须先在栈目标区域上布置好伪造的结构用来骗过 glibc 的安全检查。你需要伪造两个 Chunk因为双向链表检查很严格。你通过程序的某种输入功能在栈上写入以下数据// 在栈上伪造的第一个 Chunk你真正想要的“金库门” void *fake_chunk_1 stack_buffer[0]; fake_chunk_1-fd Chunk_A; // 关键骗局 1指向合法的 Chunk A fake_chunk_1-bk fake_chunk_2; // 指向你的第二个伪造 Chunk // 在栈上伪造的第二个 Chunk备胎用来应付更深层的链表检查 void *fake_chunk_2 stack_buffer[0x20]; fake_chunk_2-fd fake_chunk_1; // 关键骗局 2指回第一个伪造 Chunk3. 第二步触发漏洞篡改 Chunk A (Heap Overflow / UAF)现在你利用程序里的“堆溢出Heap Overflow”或者“释放后使用UAF”漏洞修改躺在 Small Bin 里的Chunk A的指针。你把Chunk A的bk指针覆盖掉改成你刚刚在栈上伪造的fake_chunk_1的地址。此时在 glibc 内存管理器的眼里Small Bin 队伍变成了这样SmallBin 的头---Chunk A---fake_chunk_1 (栈地址!)---fake_chunk_2 (栈地址!)4. 第三步绕过安全检查 (Bypass bck-fd victim)当malloc从 Small Bin 中取出一个 Chunk比如Chunk A时它会执行一个拆卸Unlink操作并且会做一个非常经典的安全检查// glibc 内部源码的检查逻辑 bck victim-bk; // victim 就是 Chunk A它的 bk 被你改成了 fake_chunk_1 if (bck-fd ! victim) { malloc_printerr(malloc(): smallbin double linked list corrupted); }管理员在核对fake_chunk_1的fd里面写的是不是Chunk A因为你在第一步时已经提前在栈上把fake_chunk_1-fd设置成了Chunk A的地址所以这个条件完美成立系统没有报警认为这是一个合法的双向链表。5. 第四步连续 malloc收网现在链表已经被你接管你只需要在程序里触发两次内存分配**第一次申请malloc(0x100)**系统把排在队首的Chunk A取出来分配给你。系统在取出Chunk A后顺着被你篡改的bk指针把fake_chunk_1推到了 Small Bin 队伍的最前面变成了新的队首。**第二次申请malloc(0x100)**系统一看Small Bin 队首正好有一个大小合适的空闲柜子。系统直接把fake_chunk_1返回给了你。攻击成功你拿到了一个指向栈Stack的指针。接下来你往这个指针里写入数据就等于直接覆盖了栈上的关键信息比如函数的返回地址或者其他重要的局部变量从而完全控制程序的执行流。

相关推荐

House of Orange
House of Orange

“House of Orange” 是在 CTF(网络安全夺旗赛)和真实漏洞利用中非常经典且高级的一种堆溢出利用技术。它的名字来源于 2016 年 HITCON CTF 比赛中的一道同名题目。为什么会有 House of Orange?(它的核心亮点)在常规的… · 2026/9/27 22:46:09

Kubernetes API Server 详解:TaoToken 统一 Key 接入与 config.toml 配置骨架
Kubernetes API Server 详解:TaoToken 统一 Key 接入与 config.toml 配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 22:46:03

从 function call 到思维链 COT 再到 MCP 协议:用 TaoToken 统一 Key 串起大模型工具调用链路
从 function call 到思维链 COT 再到 MCP 协议:用 TaoToken 统一 Key 串起大模型工具调用链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 22:46:03

VSCODE加ESP-IDF配置指南:ESP32开发环境搭建与调试
VSCODE加ESP-IDF配置指南:ESP32开发环境搭建与调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 23:31:02

Linux 上 WFDB 心电信号分析实战:从 wfdb.tar.gz 到 HRV 频域分析
Linux 上 WFDB 心电信号分析实战:从 wfdb.tar.gz 到 HRV 频域分析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 23:31:02

ESP32-S3 免驱 USB 摄像头实战:TinyUSB UVC 协议与 OV2640 图像传输
ESP32-S3 免驱 USB 摄像头实战:TinyUSB UVC 协议与 OV2640 图像传输

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 23:30:56

建设的访问网站需要密码?3步搞定完整流程不慌
建设的访问网站需要密码?3步搞定完整流程不慌

建设的访问网站需要密码?3步搞定完整流程不慌 自己不会代码想做网站,却卡在访问需要密码这一步,其实并非技术难题,而是流程认知偏差。很多新手误以为“密码”是技术壁垒,实则是权限配置缺失。本文拆解【建设的访问网站需要密码】背后的完整流程,从原理… · 2026/9/27 23:30:56

VMware虚拟机安全移除非系统磁盘完整指南
VMware虚拟机安全移除非系统磁盘完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 23:30:56

青岛优化网站关键词实战:从模板站突围到精准获客
青岛优化网站关键词实战:从模板站突围到精准获客

青岛优化网站关键词实战:从模板站突围到精准获客 别再说模板网站太丑了,更可怕的是它丑得连搜索引擎都懒得看。很多老板拿着网上几百块的模板站,问建站报价时觉得便宜,上线后发现排名为零,客户根本搜不到你。青岛这边做本地生意的特别多,从海鲜批发到工… · 2026/9/27 23:30:56

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码