4.9 KiB
Imprimir el Stack Canary
{% hint style="success" %}
Aprende y practica Hacking en AWS: HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de Telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los repositorios de HackTricks y HackTricks Cloud.
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
- 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')
- 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
- 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)
- 32 bits, ARM, sin relro, canary, nx, sin pie. Desbordamiento con una llamada a puts para filtrar el canary + ret2lib llamando a
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 y puedes leer sobre el abuso de cadenas de formato para leer direcciones de memoria arbitrarias en:
{% content-ref url="../../format-strings/" %} format-strings {% endcontent-ref %}
- 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)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de Telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los repositorios de HackTricks y HackTricks Cloud.