Exploiting Tools
Last updated
Last updated
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)
Puedes usar opcionalmente este fork de GEF que contiene instrucciones más interesantes.
Mientras depuras, GDB tendrá direcciones ligeramente diferentes a las utilizadas por el binario cuando se ejecuta. Puedes hacer que GDB tenga las mismas direcciones haciendo:
unset env LINES
unset env COLUMNS
set env _=<path>
Coloca la ruta absoluta al binario
Explota el binario utilizando la misma ruta absoluta
PWD
y OLDPWD
deben ser las mismas al usar GDB y al explotar el binario
Cuando tienes un binario vinculado estáticamente, todas las funciones pertenecerán al binario (y no a bibliotecas externas). En este caso, será difícil identificar el flujo que sigue el binario para, por ejemplo, pedir entrada del usuario.
Puedes identificar fácilmente este flujo ejecutando el binario con gdb hasta que se te pida entrada. Luego, deténlo con CTRL+C y usa el comando bt
(backtrace) para ver las funciones llamadas:
gdbserver --multi 0.0.0.0:23947
(en IDA tienes que llenar la ruta absoluta del ejecutable en la máquina Linux y en la máquina Windows)
Ghidra es muy útil para encontrar el desplazamiento para un desbordamiento de búfer gracias a la información sobre la posición de las variables locales.
Por ejemplo, en el ejemplo a continuación, un desbordamiento de búfer en local_bc
indica que necesitas un desplazamiento de 0xbc
. Además, si local_10
es una galleta canaria, indica que para sobrescribirla desde local_bc
hay un desplazamiento de 0xac
.
&#xNAN;Remember que los primeros 0x08 desde donde se guarda el RIP pertenecen al RBP.
Get every opcode executed in the program.
gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2 --> Compilar sin protecciones &#xNAN;-o --> Salida &#xNAN;-g --> Guardar código (GDB podrá verlo) echo 0 > /proc/sys/kernel/randomize_va_space --> Para desactivar el ASLR en linux
Para compilar un shellcode: nasm -f elf assembly.asm --> devuelve un ".o" ld assembly.o -o shellcodeout --> Ejecutable
-d --> Desensamblar secciones ejecutables (ver opcodes de un shellcode compilado, encontrar ROP Gadgets, encontrar dirección de función...) &#xNAN;-Mintel --> Sintaxis Intel &#xNAN;-t --> Tabla de símbolos &#xNAN;-D --> Desensamblar todo (dirección de variable estática) &#xNAN;-s -j .dtors --> sección dtors &#xNAN;-s -j .got --> sección got -D -s -j .plt --> sección plt descompilada &#xNAN;-TR --> Reubicaciones ojdump -t --dynamic-relo ./exec | grep puts --> Dirección de "puts" para modificar en GOT objdump -D ./exec | grep "VAR_NAME" --> Dirección de una variable estática (esas se almacenan en la sección DATA).
Ejecutar ulimit -c unlimited
antes de iniciar mi programa
Ejecutar sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t
sudo gdb --core=<path/core> --quiet
ldd executable | grep libc.so.6 --> Dirección (si ASLR, entonces esto cambia cada vez) for i in `seq 0 20`; do ldd <Ejecutable> | grep libc; done --> Bucle para ver si la dirección cambia mucho readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system --> Offset de "system" strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh --> Offset de "/bin/sh"
strace executable --> Funciones llamadas por el ejecutable rabin2 -i ejecutable --> Dirección de todas las funciones
Dentro de la carpeta IDA puedes encontrar binarios que se pueden usar para depurar un binario dentro de un linux. Para hacerlo, mueve el binario linux_server
o linux_server64
dentro del servidor linux y ejecútalo dentro de la carpeta que contiene el binario:
Luego, configura el depurador: Debugger (linux remote) --> Proccess options...:
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)