mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 06:30:37 +00:00
4.4 KiB
4.4 KiB
打印栈保护 Canaries
{% hint style="success" %}
学习并练习 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习并练习 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
支持 HackTricks
- 查看订阅计划!
- 加入 💬 Discord 群组 或 电报群组 或 关注我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库提交 PR 来分享黑客技巧。
放大打印的栈
想象一种情况,一个容易受到栈溢出攻击的程序可以执行一个指向栈溢出部分的puts函数。攻击者知道canary的第一个字节是空字节(\x00
),其余的canary是随机字节。然后,攻击者可以创建一个溢出,覆盖栈直到canary的第一个字节。
然后,攻击者在有效负载的中间调用 puts 功能,这将打印所有的canary(除了第一个空字节)。
有了这些信息,攻击者可以构造并发送一个新的攻击,知道了canary(在同一个程序会话中)。
显然,这种策略非常受限,因为攻击者需要能够打印他的有效负载的内容以外泄canary,然后能够创建一个新的有效负载(在同一个程序会话中)并发送真正的缓冲区溢出。
CTF 示例:
- https://guyinatuxedo.github.io/08-bof_dynamic/csawquals17_svc/index.html
- 64 位,启用 ASLR 但没有 PIE,第一步是填充溢出直到 canary 的字节 0x00,然后调用 puts 泄露它。使用 canary 创建 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,canary,nx,没有 pie。溢出并调用 puts 来泄露 canary + ret2lib 调用
system
以及 ROP 链来弹出 r0(参数/bin/sh
)和 pc(system 的地址)
任意读取
通过类似格式字符串提供的任意读取,可能可以泄露 canary。查看这个例子:https://ir0nstone.gitbook.io/notes/types/stack/canaries ,您可以阅读关于滥用格式字符串以读取任意内存地址的内容。
- https://guyinatuxedo.github.io/14-ret_2_system/asis17_marymorton/index.html
- 这个挑战以一种非常简单的方式滥用格式字符串来从栈中读取 canary。
{% hint style="success" %}
学习并练习 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习并练习 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
支持 HackTricks
- 查看订阅计划!
- 加入 💬 Discord 群组 或 电报群组 或 关注我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库提交 PR 来分享黑客技巧。