BoF - Fawkes
Writeup de un BoF de la plataforma Vulnhub
Antes de comenzar quiero dejar claro que este NO es el writeup de la máquina Fawkes de Vulnhub, solamente es el writeup de cómo se puede llegar a explotar el buffer overflow que se contempla en este CTF, pero no vamos a ver nada de cómo escalar privilegios dentro de la máquina ni nada
Lo primero que debemos de saber es que este binario opera en el puerto 9898 del equipo que lo ejecuta, esto lo podemos ver si ejecutamos el binario con la herramienta strace

Ahora que sabemos dónde opera, si lo ejecutamos y con netcat nos conectamos a nuestro puerto 9898, vamos a poder ver lo siguiente

Como podemos ver tenemos un campo para poder introducir un input, por lo que si probamos a sobreescribir el buffer vemos que el programa peta y se para

Vamos a ejecutar el binario con gdb para poder ir viendo qué es lo que pasa por detrás

Ahora que lo tenemos funcionando vamos a volver a conectarnos al puerto 9898 de nuestro localhost y vamos a volver a corromper el binario para ver dónde se corrompe, pero esta vez de una manera diferente, vamos a hacer uso de las herramientas pattern create y pattern offset para poder llegar a conocer el offset del programa



Como podemos ver el $eip está apuntando a la cadena “daab” por lo que ahora con pattern offset vamos a poder sacar cuántos bytes hacen falta para llenar el buffer

Ahora sabemos que el offset es 112 por lo que vamos a hacer la prueba para ver si es verdad, para ello vamos a poner 112 “A” y 4 “B” para ver si el $eip apunta a las “A” o a las “B”


Podemos ver que efectivamente el eip apunta a las “B”, por lo que el offset es correcto
Para que sea todo más fácil de manejar me voy a hacer un script en python en el que voy a manejar todo el BoF
Ahora que lo tenemos todo montado en un script en python(el cual muestro ahora) vamos a crear nuestro shell code para que nos envíe una reverse shell a nuestro equipo

Ahora que tenemos creado el shell code lo que tenemos que hacer es encontrar un módulo que contemple un JMP ESP, para que el eip apunte al stack y se ejecute el shell code
Para poder encontrar este módulo vamos a hacer uso de la herramienta objdump, filtrando por el esp

En este caso vamos a escoger el primero y lo vamos a poner en el script de la siguiente manera ya que al ser un binario de 32 bits, hace falta ponerlo al revés

Genial pues en este punto ya estamos casi acabando, ahora lo que queda es construir el payload con NOPs y ejecutarlo, así es como quedaría el script final

Y al ejecutarlo podemos ver que nos devuelve la reverse shell correctamente
