Spain
Máquina Spain de DockerLabs
Autor: Darksblack
Dificultad: Dificil

Reconocimiento
Comenzamos con un escaneo de nmap:
Tenemos 3 puertos abiertos:
•Puerto 22: OpenSSH 9.2p1
•Puerto 80: Apache httpd 2.4.62
•Puerto 9000: Servicio Desconocido
ademas, como se ve en el escaneo, hay un dominio "spainmerides.dl", por lo que lo añadiremos al /etc/hosts de la siguiente manera:
Fuzzing web
Luego de revisar la página y no encontrar nada útil, se me ocurre realizar fuzzing con gobuster:
si vamos a manager.php, veremos que hay un archivo para descargar llamado "bitlock", por lo que nos lo descargaremos.
Intrusión
Binary test
Al ejecutar file y pasarle el binario vemos lo siguiente:
esto significa que el binario es un ejecutable de 32 bits, y según checksec, no tiene protecciones:
Ahora vamos a ejecutarlo para un uso normal y ver un poco su funcionalidad:
como vemos está esperando conexiones por el puerto 9000, por lo que probablemente también sea el binario que se encuentra ejecutado en la máquina. También, si nos conectamos mediante telnet, y enviamos una cantidad grande de datos:
veremos lo siguiente en el binario:
Esto significa que presenta una vulnerabilidad de buffer overflow, y como el binario no tiene protecciones, podremos armar un exploit que nos permita recibir una conexión al ejecutar una reverseshell en el.
Buffer Overflow
Comenzaremos a crear nuestro exploit, para esto empezaremos con la base del mismo:
Listo, ya tenemos la base del exploit, ahora necesitaremos de gdb para poder depurar el binario:
(Para que sea mas sencillo, se puede instalar Pwndbg)
en gdb ejecutamos run y el binario estará iniciado, ahora solo nos queda ejecutar el exploit y ver que ocurre:
Como vemos, el EIP se ha rellenado con nuestro pattern, por lo que ahora podemos obtener el valor del offset usando la herramienta pattern_offset de metasploit:
Perfecto, ya tenemos el offset, vamos a actualizar el exploit para poder tomar el control del EIP:
Resultado:
Perfecto, ya logramos tomar el control del EIP, ahora necesitamos ver en donde se guardan los nops que enviemos para saber como ejecutar nuestro shellcode:
Resultado:

Como vemos, nuestros nops se estan almacenando al principio de la pila, esto significa que podemos intentar utilizar la dirección del gadget jmp esp el cual hace un salto a "esp" y así poder ejecutar nuestro shellcode. Para saber la direccion de jmp esp utilizaremos la herramienta nasm_shell de metasploit y objdump:
Perfecto, ya tenemos la dirección:
Ahora solo nos queda crear un shellcode con metasploit y actualizar el exploit:
Ahora si, teniendo el shellcode actualizamos el exploit:
Probamos a escuchar por el puerto 9090 con nc y a ejecutar el exploit:
perfecto, como vemos la shell nos llega correctamente, por lo que ahora si, finalmente vamos a volver a actualizar el exploit pero para que apunte a la maquina victima:
lo ejecutamos y recibimos una conexion desde la maquina victima:
Escalada De Privilegios
www-data
Si ejecuto sudo -l veo lo siguiente:
Viendo esto, intento leer el archivo .py y veo lo siguiente:
primero activo la serialización en el archivo .conf:
luego de buscar encontré el siguiente exploit el cual nos puede ayudar a crear el archivo .pk1:
nosotros lo debemos modificar de la siguiente manera para poder ejecutar otro comando y hacer que el archivo quede en /opt/data.pk1 como pide el script de python que podemos ejecutar como maci:
lo ejecutamos, y finalmente ejecutamos el script como maci para escalar a maci:
Maci
Nuevamente ejecutamos sudo -l y vemos lo siguiente:
Con dpkg tenemos una manera muy facil de escalar:
cuando nos aparezca mucha info, introducimos lo siguiente:
Darksblack
Ahora tendremos una shell como darksblack, el problema es que nuestra variable "PATH" esta mal, por lo que tendremos que repararla. Para esto haremos lo siguiente:
luego reiniciamos la shell y ya estaríamos de manera relativamente cómoda. Si nos fijamos en la home, existe un binario llamado "Olympus". Si a este lo revisamos con strings veremos que al parecer ejecuta otro binario en /home/darksblack/.zprofile/OlympusValidator, este lo pasamos a nuestra máquina local con python3 -m http.server 9090 y lo descargamos.
Ingenieria inversa
Para esto necesitaremos ghidra en el cual importaremos el archivo, luego de revisarlo un poco, veo que el serial que espera es el siguiente:
y si ejecuto el binario y le paso ese serial me dice lo siguiente:
por lo que para escalar a root vamos a nuestra maquina local y nos conectamos por ssh de la siguiente manera:
e introducimos la contraseña "@#*)277280)6x4n0"
Root

Gracias por leer ;)
Última actualización