打印栈金丝雀
Reading time: 4 minutes
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
扩大打印的栈
想象一个情况,其中一个易受攻击的程序可以执行一个puts函数,指向****栈溢出的一部分。攻击者知道金丝雀的第一个字节是一个空字节(\x00
),其余的金丝雀是随机字节。然后,攻击者可以创建一个溢出,覆盖栈直到金丝雀的第一个字节。
然后,攻击者在有效负载的中间调用puts功能,这将打印所有金丝雀(除了第一个空字节)。
有了这些信息,攻击者可以制作并发送一个新的攻击,知道金丝雀(在同一程序会话中)。
显然,这种战术是非常受限的,因为攻击者需要能够打印其有效负载的内容以提取金丝雀,然后能够创建一个新的有效负载(在同一程序会话中)并发送****真实的缓冲区溢出。
CTF示例:
- https://guyinatuxedo.github.io/08-bof_dynamic/csawquals17_svc/index.html
- 64位,启用ASLR但没有PIE,第一步是填充溢出直到金丝雀的字节0x00,然后调用puts并泄漏它。利用金丝雀创建一个ROP小工具来调用puts以泄漏GOT中puts的地址,然后是一个ROP小工具来调用
system('/bin/sh')
- https://guyinatuxedo.github.io/14-ret_2_system/hxp18_poorCanary/index.html
- 32位,ARM,无relro,金丝雀,nx,无pie。通过调用puts来溢出以泄漏金丝雀 + ret2lib调用
system
,使用ROP链弹出r0(参数/bin/sh
)和pc(system的地址)
任意读取
通过任意读取,例如格式字符串提供的,可能泄漏金丝雀。查看这个例子:https://ir0nstone.gitbook.io/notes/types/stack/canaries,你可以阅读关于滥用格式字符串以读取任意内存地址的内容:
- https://guyinatuxedo.github.io/14-ret_2_system/asis17_marymorton/index.html
- 这个挑战以非常简单的方式滥用格式字符串从栈中读取金丝雀
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。