hacktricks/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/print-stack-canary.md

59 lines
4.9 KiB
Markdown

# Imprimir el Stack Canary
{% hint style="success" %}
Aprende y practica Hacking en AWS: <img src="/.gitbook/assets/arte.png" alt="" data-size="line"> [**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte) <img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line"> [**HackTricks Training GCP Red Team Expert (GRTE)** <img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Apoya a HackTricks</summary>
- Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
- **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
- **Comparte trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Ampliar el stack impreso
Imagina una situación donde un **programa vulnerable** a desbordamiento de pila puede ejecutar una función **puts** apuntando a una **parte** del **desbordamiento de pila**. El atacante sabe que el **primer byte del canary es un byte nulo** (`\x00`) y el resto del canary son bytes **aleatorios**. Entonces, el atacante puede crear un desbordamiento que **sobrescribe la pila hasta justo el primer byte del canary**.
Luego, el atacante **llama a la funcionalidad puts** en el medio de la carga útil que **imprimirá todo el canary** (excepto el primer byte nulo).
Con esta información, el atacante puede **crear y enviar un nuevo ataque** conociendo el canary (en la misma sesión del programa).
Obviamente, esta táctica es muy **restrictiva** ya que el atacante necesita poder **imprimir** el **contenido** de su **carga útil** para **filtrar** el **canary** y luego ser capaz de crear una nueva carga útil (en la **misma sesión del programa**) y **enviar** el **desbordamiento de búfer real**.
**Ejemplos de CTF:**&#x20;
- [**https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html**](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html)
- 64 bits, ASLR habilitado pero sin PIE, el primer paso es llenar un desbordamiento hasta el byte 0x00 del canary para luego llamar a puts y filtrarlo. Con el canary se crea un gadget ROP para llamar a puts y filtrar la dirección de puts desde el GOT y un gadget ROP para llamar a `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 bits, ARM, sin relro, canary, nx, sin pie. Desbordamiento con una llamada a puts para filtrar el canary + ret2lib llamando a `system` con una cadena ROP para hacer pop en r0 (arg `/bin/sh`) y pc (dirección de system)
## Lectura Arbitraria
Con una **lectura arbitraria** como la proporcionada por las **cadenas de formato**, podría ser posible filtrar el canary. Revisa este ejemplo: [**https://ir0nstone.gitbook.io/notes/types/stack/canaries**](https://ir0nstone.gitbook.io/notes/types/stack/canaries) y puedes leer sobre el abuso de cadenas de formato para leer direcciones de memoria arbitrarias en:
{% content-ref url="../../format-strings/" %}
[format-strings](../../format-strings/)
{% endcontent-ref %}
- [https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html)
- Este desafío abusa de una manera muy simple de una cadena de formato para leer el canary de la pila
{% hint style="success" %}
Aprende y practica Hacking en AWS: <img src="/.gitbook/assets/arte.png" alt="" data-size="line"> [**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte) <img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line"> [**HackTricks Training GCP Red Team Expert (GRTE)** <img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Apoya a HackTricks</summary>
- Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
- **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
- **Comparte trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}