# Imprimir el Stack Canary {% hint style="success" %} Aprende y practica Hacking en AWS: [**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte) \ Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)** ](https://training.hacktricks.xyz/courses/grte)
Apoya a HackTricks - 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).
{% 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:** - [**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: [**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte) \ Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)** ](https://training.hacktricks.xyz/courses/grte)
Apoya a HackTricks - 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).
{% endhint %}