Buffer Overflow Prep OSCP

Para empezar siempre hay que ejecutar Immunity Debugger como Administrador

Luego de eso vamos a >> File >> Open > Abrimos el binario oscp.exe, luego corremos el programa con Run. Despues nos conectamos usando netcat:

nc $ip_victima 1337

Ejecutamos el comando HELP y despues OVERFLOW1 test, como resultado nos tiene que aparecer OVERFLO1 COMPLETE

Mona Configuration

Una vez con el programa corriendo, en el campo de abajo de la ventana de Immunity Debugger ejecutamos lo siguiente:

Fuzzing

En tu maquina Linux creamos un script llamado fuzzer.py con el codigo:

Corremos el script y esperamos a que crashee el servidor , haciendo nota en la cantidad mas alta de bytes que enviamos.

Crash Replication & Controlling EIP

Creamos el archivo exploit.py con el siguiente contenido:

Ejecutamos el siguiennte comando cambiando el valor de "-l 2000", al valor en el cual crasheo el servidor en el Fuzzing

Copiamos el texto de salida y lo pegamos en la variable "payload" de exploit.py

En windows, ejecutamos de vuelta el binario oscp.exe (tenemos que hacer esto cada vez que vayamos a ejecutar el exploit.py).

El script deberia crashear el servidor de vuelta, pero esta vez en la casilla de comandos escribimos lo siguiente (cambiando el valor de distancia por el mismo valor con el cual generaste el patron anterior)

Mona deberia mostrarnos una ventana con logs, nosotros buscariamos especificamente el siguiente:

Copiamos el ultimo numero y lo pegamos en la variable offset de exploit.py. La variable payload la dejamos vacia y a la de retn le agreamos BBBB

Reiniciamos el oscp.exe y ejectumos el archivo. Ahora el registro EIP deberia ser 42424242

Finding Bad Characters

Generamos un bytearray, sacando el byte nulo (\x00) por default.

!mona bytearray -b "\x00"

Ahora generamos un string de bad characters identico al del bytearray con el siguiente codigo:

El mismo string lo pegamos como payload en exploit.py

Ejecutamos el script exploit.py. Cuando crashea, copiamos del registro ESP el adress y usamos el siguiente comando en mona

!mona compare -f C:\mona\oscp\bytearray.bin -a <address>

Se nos va a abrir una ventana emergente la cual indica cuales son los bad charts pero ojo, solamente tenemos que tomar el que sigue del anterior al que sacamos (\x00)

En este caso tenemos los siguientes posibles bad chars: 00 07 2e 2f a0 a1

Como nosotros anteriormente habiamos sacado 00, ahora deberiamos sacar 07, entonces en la caja de comandos escribiriamos

Y tambien lo tenemos que eliminar de la variable payload en el exploit.py.

Lo que sigue seria lo mismo, ejecutar el exploit.py con el nuevo payload, capturar el adress de ESP, comparar los nuevos bad chars y sacar el que le sigue al x07. Este paso lo deberiamos repetir hasta que en la columna bad chars no aparezcan mas caracteres

Encontrando un punto de salto (Jump Point)

Tendriamos que ejecutar el siguiente comando que busca todos las instrucciones "jmp esp" sin los caracteres que les marcamos (nuestros bad chars)

!mona jmp -r esp -cpb "\x00\x07\x2e\xa0"

Como el programa es un poco endian (Reverse) deberiamos escribir el address al revez, osea que en vez de quedarnos \x62\x50\x11\xaf nos deberia quedar \xaf\x11\x50\x62, actualizamos nuestra variable retn =\xaf\x11\x50\x62 y tambien la variable padding = "\x90" * 16

Generate Payload

Ahora generamos nuestra reverse shell usando msfvenom especificando los bad chars asi no los incluye

Luego lo pegamos en el payload de exploit.py tal que quede asi:

Exploit!

Configuramos netcat en puerto de escucha

nc -lvnp 6666

Ejecutamos el exploit.py y ya deberiamos tener nuestra Reverse Shell

Última actualización