打印栈金丝雀
Reading time: 4 minutes
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 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 gadget 来调用 puts 泄漏 GOT 中 puts 的地址,然后是一个 ROP gadget 来调用
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)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。