2.1 KiB
AWS2Exec - .dtors & .fini_array
{{#include ../../../banners/hacktricks-training.md}}
.dtors
Caution
Hoy en día es muy raro encontrar un binario con una sección .dtors.
Los destructores son funciones que se ejecutan antes de que el programa termine (después de que la función main
retorna).
Las direcciones de estas funciones se almacenan dentro de la sección .dtors
del binario y, por lo tanto, si logras escribir la dirección en un shellcode en __DTOR_END__
, eso será ejecutado antes de que el programa termine.
Obtén la dirección de esta sección con:
objdump -s -j .dtors /exec
rabin -s /exec | grep “__DTOR”
Usualmente encontrarás los marcadores DTOR entre los valores ffffffff
y 00000000
. Así que si solo ves esos valores, significa que no hay ninguna función registrada. Así que sobrescribe el 00000000
con la dirección al shellcode para ejecutarlo.
Warning
Por supuesto, primero necesitas encontrar un lugar para almacenar el shellcode para poder llamarlo más tarde.
.fini_array
Esencialmente, esta es una estructura con funciones que serán llamadas antes de que el programa termine, como .dtors
. Esto es interesante si puedes llamar a tu shellcode simplemente saltando a una dirección, o en casos donde necesitas volver a main
nuevamente para explotar la vulnerabilidad una segunda vez.
objdump -s -j .fini_array ./greeting
./greeting: file format elf32-i386
Contents of section .fini_array:
8049934 a0850408
#Put your address in 0x8049934
Ten en cuenta que esto no creará un bucle eterno porque cuando regreses a main, el canario lo notará, el final de la pila podría estar corrupto y la función no se volverá a llamar. Así que con esto podrás tener 1 ejecución más de la vulnerabilidad.
Caution
Ten en cuenta que con Full RELRO, la sección
.fini_array
se vuelve de solo lectura.
{{#include ../../../banners/hacktricks-training.md}}