mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 12:43:23 +00:00
59 lines
4.9 KiB
Markdown
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:** 
|
|
|
|
- [**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 %}
|