hacktricks/binary-exploitation/heap/house-of-orange.md

7.9 KiB
Raw Blame History

House of Orange

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS Red Team Expert

支持HackTricks的其他方式

基本信息

代码

目标

  • 滥用malloc_printerr函数

要求

  • 覆盖顶部块大小
  • Libc和堆泄漏

背景

此示例的评论中需要一些背景知识****

问题在于在旧版本的libc中当调用malloc_printerr函数时,它会遍历存储在_IO_list_all中的_IO_FILE结构的列表,并实际上执行该结构中的指令指针。
这种攻击将伪造一个我们将写入**_IO_list_all的假_IO_FILE结构,并导致malloc_printerr运行。
然后它将
执行我们在_IO_FILE**结构的跳转表中存储的任何地址,我们将获得代码执行

攻击

攻击始于设法将顶部块置于未排序的块内。这是通过使用大于当前顶部块大小但小于**mmp_.mmap_threshold默认为128K的大小调用malloc来实现的,否则会触发mmap分配。每当修改顶部块大小时,重要的是确保顶部块+其大小是页面对齐的,并且顶部块的prev_inuse**位始终设置。

要将顶部块置于未排序的块内,首先分配一个块以创建顶部块,然后更改顶部块大小(使用分配块中的溢出),使得顶部块+大小与页面对齐且prev_inuse位设置。然后分配一个大于新顶部块大小的块。请注意,永远不会调用free以将顶部块放入未排序的块中。

现在旧的顶部块位于未排序的块中。假设我们可以从中读取数据可能是由于导致溢出的漏洞则可以从中泄漏libc地址并获取**_IO_list_all**的地址。

通过滥用溢出将topChunk->bk->fwd = _IO_list_all - 0x10写入,执行未排序的块攻击。当分配新块时,旧的顶部块将被拆分,并且指针将被写入**_IO_list_all**。

下一步涉及将旧的顶部块的大小缩小以适应小块,具体设置其大小为0x61。这有两个目的:

  1. 插入到Small Bin 4:当malloc扫描未排序的块并看到此块时由于其较小的大小它将尝试将其插入到小块4中。这使得该块最终位于小块4列表的头部该列表是我们通过未排序的块攻击在**_IO_list_all**的块的FD指针的位置。
  2. 触发Malloc检查:此块大小操作将导致malloc执行内部检查。当检查虚假前向块的大小时,该大小将为零,从而触发错误并调用malloc_printerr

对小块的操作将允许您控制块的前向指针。与**_IO_list_all的重叠用于伪造一个假的_IO_FILE**结构。该结构经过精心设计,包括将_IO_write_base_IO_write_ptr设置为在libc中通过内部检查的值。此外在假结构内创建了一个跳转表其中将指令指针设置为可以执行任意代码例如system函数)的地址。

总结技术的其余部分:

  • 缩小旧的顶部块:调整旧的顶部块的大小为0x61以适应小块。
  • 设置假的_IO_FILE结构:将旧的顶部块与当前位于未排序块中的假**_IO_FILE**结构重叠,并适当设置字段以劫持执行流。

下一步涉及伪造一个与当前位于未排序块中的旧顶部块重叠的假**_IO_FILE**结构。该结构的前几个字节经过精心设计,包括指向将执行的命令(例如“/bin/sh”的指针。

在假**_IO_FILE**结构中的关键字段,如_IO_write_base_IO_write_ptr设置为通过libc中的内部检查的值。此外在假结构内创建了一个跳转表其中将指令指针设置为可以执行任意代码的地址。通常这将是system函数的地址或其他可以执行shell命令的函数的地址。

攻击达到高潮时,对malloc的调用通过操纵**_IO_FILE**结构触发代码执行。这有效地允许执行任意代码通常导致生成shell或执行其他恶意载荷。

攻击摘要:

  1. 设置顶部块:分配一个块并修改顶部块大小。
  2. 强制顶部块进入未排序的块:分配一个更大的块。
  3. 泄漏libc地址:使用漏洞从未排序的块中读取。
  4. 执行未排序的块攻击:使用溢出写入**_IO_list_all**。
  5. 缩小旧的顶部块:调整其大小以适应小块。
  6. 设置一个假的_IO_FILE结构:伪造一个假文件结构以劫持控制流。
  7. 触发代码执行:分配一个块以执行攻击并运行任意代码。

这种方法利用堆管理机制、libc信息泄漏和堆溢出来实现代码执行而无需直接调用free。通过精心设计假的**_IO_FILE**结构并将其放置在正确位置攻击可以在标准内存分配操作期间劫持控制流。这使得执行任意代码成为可能可能导致生成shell或其他恶意活动。

参考资料

从零开始学习 AWS 黑客技术,成为专家 htARTEHackTricks AWS 红队专家)

支持 HackTricks 的其他方式: