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)
Opcionalmente podrías usar este fork de GEF que contiene instrucciones más interesantes.
Mientras se depura, GDB tendrá direcciones ligeramente diferentes a las utilizadas por el binario al ejecutarse. Puedes hacer que GDB tenga las mismas direcciones haciendo lo siguiente:
unset env LINES
unset env COLUMNS
set env _=<ruta>
Coloca la ruta absoluta al binario
Explota el binario utilizando la misma ruta absoluta
PWD
y OLDPWD
deben ser iguales al utilizar GDB y al explotar el binario
Cuando tienes un binario enlazado 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, solicitar entrada de usuario.
Puedes identificar fácilmente este flujo ejecutando el binario con gdb hasta que se te solicite la entrada. Luego, detenlo con CTRL+C y utiliza el comando bt
(backtrace) para ver las funciones llamadas:
gdbserver --multi 0.0.0.0:23947
(en IDA tienes que completar 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 una sobrecarga 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 cookie canary, indica que para sobrescribirla desde local_bc
hay un desplazamiento de 0xac
.
Recuerda que los primeros 0x08 donde se guarda el RIP pertenecen al RBP.
Obtener cada opcode ejecutado en el programa.
gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2 --> Compilar sin protecciones -o --> Salida -g --> Guardar código (GDB podrá verlo) echo 0 > /proc/sys/kernel/randomize_va_space --> Desactivar 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...) -Mintel --> Sintaxis Intel -t --> Tabla de símbolos -D --> Desensamblar todo (dirección de variable estática) -s -j .dtors --> sección dtors -s -j .got --> sección got -D -s -j .plt --> sección plt descompilada -TR --> Relocalizaciones ojdump -t --dynamic-relo ./exec | grep puts --> Dirección de "puts" a modificar en GOT objdump -D ./exec | grep "VAR_NAME" --> Dirección de una variable estática (almacenadas 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 ejecutable | grep libc.so.6 --> Dirección (si hay ASLR, 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 --> Desplazamiento de "system" strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh --> Desplazamiento de "/bin/sh"
strace ejecutable --> Funciones llamadas por el ejecutable rabin2 -i ejecutable --> Dirección de todas las funciones
Dentro de la carpeta de IDA puedes encontrar binarios que se pueden utilizar para depurar un binario en un sistema 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: Depurador (remoto de Linux) --> Opciones del proceso...:
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)