mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 12:43:23 +00:00
4.8 KiB
4.8 KiB
Einherjar之屋
{% hint style="success" %}
学习并练习AWS黑客:HackTricks培训AWS红队专家(ARTE)
学习并练习GCP黑客:HackTricks培训GCP红队专家(GRTE)
支持HackTricks
- 查看订阅计划!
- 加入 💬 Discord群 或 电报群 或 关注我们的Twitter 🐦 @hacktricks_live.
- 通过向HackTricks和HackTricks Cloud github仓库提交PR来分享黑客技巧。
基本信息
代码
- 查看示例:https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
- 或者查看:https://guyinatuxedo.github.io/42-house_of_einherjar/house_einherjar_exp/index.html#house-of-einherjar-explanation(可能需要填充tcache)
目标
- 目标是在几乎任意特定地址上分配内存。
要求
- 当我们想要分配一个块时,创建一个伪造的块:
- 设置指针指向自身以绕过完整性检查
- 通过一个块到下一个块的一个字节溢出,使用空字节修改
PREV_INUSE
标志。 - 在被滥用的块的
prev_size
中指示自身与伪造块之间的差异 - 伪造块的大小也必须设置为相同大小以绕过完整性检查
- 为构造这些块,您将需要一个堆泄漏。
攻击
- 攻击者在一个受攻击者控制的块内创建一个伪造块,用
fd
和bk
指向原始块以绕过保护 - 分配2个其他块(
B
和C
) - 在
B
中滥用prev in use
,清除prev_size
数据,并用C
块分配的位置与之前生成的伪造A
块之间的差异进行覆盖 - 这个
prev_size
和伪造块A
中的大小必须相同以绕过检查。 - 然后,填充tcache
- 然后,释放
C
,使其与伪造块A
合并 - 然后,创建一个新块
D
,它将从伪造A
块开始,覆盖B
块 - Einherjar之屋到此结束
- 这可以继续进行快速bin攻击或Tcache污染:
- 释放
B
以将其添加到快速bin / Tcache - 覆盖
B
的fd
,使其指向目标地址,滥用包含B
的D
块(因为它包含B
) - 然后,进行2次malloc,第二次将分配目标地址
参考和其他示例
- https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
- CTF https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_einherjar/#2016-seccon-tinypad
- 在释放指针后,它们没有被置空,因此仍然可以访问它们的数据。因此,在未排序的bin中放置一个块,并泄漏它包含的指针(libc泄漏),然后在未排序的bin中放置一个新堆,并从它获得的指针泄漏一个堆地址。
- baby-talk. DiceCTF 2024
strtok
中的空字节溢出漏洞。- 使用Einherjar之屋获得重叠块情况,并最终通过Tcache污染获得任意写入原语。
{% hint style="success" %}
学习并练习AWS黑客:HackTricks培训AWS红队专家(ARTE)
学习并练习GCP黑客:HackTricks培训GCP红队专家(GRTE)
支持HackTricks
- 查看订阅计划!
- 加入 💬 Discord群 或 电报群 或 关注我们的Twitter 🐦 @hacktricks_live.
- 通过向HackTricks和HackTricks Cloud github仓库提交PR来分享黑客技巧。