Pwning 100: Stack Overflow

By {l4_p4nd1ll4_m4nt3q1ll4} Team

Se recibio binario babyStack. Lo primero que hicimos fue ejecutar el comando file.


Es un binario ELF de 64 bits, ademas de ser not stripped, asi que el proceso de reversing ser a mas sencillo.
Lo siguiente fue ejecutarlo para observar su comportamiento.


Nos da un mensaje y nos pide datos de entrada. Damos cualquier cosa para ver que sucede.


 Nada, no suecede nadamas. Por lo que nuestro siguiente paso ser a ejecutar checksec de pwntools para obtener las medidas de seguridad implementadas en el binario.


Ahora sabemos que no cuenta con un stack canary, adem as de tener secciones en memoria con permisos de lectura, escritura y ejecucion. Ya podemos intentar adivinar como ser a el exploit final, pero antes pasemos al desensamblado en IDA. 


Al inicio vemos que crea un buffer a una distancia de 0x18 de la direccion de retorno del main.


Los parametros se pasan en los registros por usar una arquitectura de 64 bits (via RDI, RSI, RDX, RCX...), para el caso de printf podemos descubrir que el numero en hexadecimal que nos muestra el programa es de hecho la direccion en memoria del buffer. 


La lectura de datos la hace con read, PERO ESPERA 0x40 BYTES.



Por lo tanto, tenemos un buffer overflow y podemos sobreescribir la direccion de retorno. Ahora ya podemos describir el exploit:

a) Escribir un shellcode de a lo mas 0x18 bytes
b) Rellenar el espacio para ocupar los 0x18 bytes necesarios
c) Llamar execve via syscall para obtener shell: Pasando en el registro "al" el ID de execve = 0x3b
d) Finalmente sobreescribir la direccion de retorno del main con la direccion del buffer otorgada por el binario.
e) Pero para facilitarnos el shellcode, escribimos la cadena /bin/sh despues de la direccion de retorno.

Aqui el fragmento del exploit arriba descrito:



Finalmente ejecutamos el exploit contra el servidor remoto para obtener la Flag... 


Comments

Post a Comment