mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 20:53:37 +00:00
55 lines
4.4 KiB
Markdown
55 lines
4.4 KiB
Markdown
# 打印栈保护 Canaries
|
||
|
||
{% hint style="success" %}
|
||
学习并练习 AWS 黑客技术:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
学习并练习 GCP 黑客技术:<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>支持 HackTricks</summary>
|
||
|
||
* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
|
||
|
||
</details>
|
||
{% endhint %}
|
||
|
||
## 放大打印的栈
|
||
|
||
想象一种情况,一个**容易受到栈溢出攻击**的程序可以执行一个**指向栈溢出部分**的**puts**函数。攻击者知道**canary的第一个字节是空字节**(`\x00`),其余的canary是**随机**字节。然后,攻击者可以创建一个溢出,**覆盖栈直到canary的第一个字节**。
|
||
|
||
然后,攻击者在有效负载的中间**调用 puts 功能**,这将**打印所有的canary**(除了第一个空字节)。
|
||
|
||
有了这些信息,攻击者可以**构造并发送一个新的攻击**,知道了canary(在**同一个程序会话**中)。
|
||
|
||
显然,这种策略非常**受限**,因为攻击者需要能够**打印**他的**有效负载**的**内容**以**外泄canary**,然后能够创建一个新的有效负载(在**同一个程序会话**中)并**发送**真正的缓冲区溢出。
|
||
|
||
**CTF 示例:** 
|
||
|
||
* [**https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html**](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**](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://ir0nstone.gitbook.io/notes/types/stack/canaries) ,您可以阅读关于滥用格式字符串以读取任意内存地址的内容。
|
||
|
||
* [https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html)
|
||
* 这个挑战以一种非常简单的方式滥用格式字符串来从栈中读取 canary。
|
||
|
||
{% hint style="success" %}
|
||
学习并练习 AWS 黑客技术:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
学习并练习 GCP 黑客技术:<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>支持 HackTricks</summary>
|
||
|
||
* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
|
||
|
||
</details>
|
||
{% endhint %}
|