2.7 KiB

Imprimir Stack Canary

{{#include ../../../banners/hacktricks-training.md}}

Ampliar stack impreso

Imagina una situación donde un programa vulnerable a desbordamiento de stack puede ejecutar una función puts apuntando a parte del desbordamiento de stack. El atacante sabe que el primer byte del canario es un byte nulo (\x00) y el resto del canario son bytes aleatorios. Entonces, el atacante puede crear un desbordamiento que sobrescriba el stack hasta justo el primer byte del canario.

Luego, el atacante llama a la funcionalidad puts en medio de la carga útil que imprimirá todo el canario (excepto el primer byte nulo).

Con esta información, el atacante puede elaborar y enviar un nuevo ataque conociendo el canario (en la misma sesión del programa).

Obviamente, esta táctica es muy restringida ya que el atacante necesita poder imprimir el contenido de su carga útil para exfiltrar el canario y luego ser capaz de crear una nueva carga útil (en la misma sesión del programa) y enviar el verdadero desbordamiento de buffer.

Ejemplos de CTF:

Lectura Arbitraria

Con una lectura arbitraria como la proporcionada por cadenas de formato podría ser posible filtrar el canario. 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:

{{#ref}} ../../format-strings/ {{#endref}}

{{#include ../../../banners/hacktricks-training.md}}