Life Or Dead
Máquina Life Or Dead de la plataforma DockerLabs
Autor: d1se0
Dificultad: Difícil

Reconocimiento
Comenzamos con un escaneo de nmap para descubrir los puertos abiertos de la máquina:
vemos 2 puertos abiertos:
•Puerto 22: OpenSSH 9.6p1
•Puerto 80: Apache httpd 2.4.58
y vemos que es una máquina ubuntu.
Puerto 80
Vemos la página default de apache pero si revisamos el código fuente podemos ver 2 cosas interesantes:


como vemos tenemos un texto en base64 y un dominio. El texto en base64 dice "PASSWORDADMINSUPERSECRET", por lo que tenemos unas posibles credenciales para un futuro. También, debemos agregar el dominio que encontramos al archivo /etc/hosts y entramos al dominio desde el navegador.
Dominio
En el dominio podemos observar un panel de login:

Como anteriormente encontramos unas credenciales, probamos a tirar un ataque de hydra para buscar el usuario:

como vemos en el resultado, tenemos las credenciales admin:PASSWORDADMINSUPERSECRET.
Brute force 2fa
Al iniciar sesión, podemos ver un 2fa:

el cual nos pide un código de 4 dígitos. Al enviar un código podemos ver en las devtools que hace la siguiente solicitud POST:
además de que lo hace al archivo pageadmincodeloginvalidation.php. Viendo esto, podemos hacer 2 cosas para obtener el código correcto:
• Usar burpsuite: Es un poco lento si tienes la versión community.
• Crear un script en python o en bash: Es mucho mas rápido en casos como este.
Bash scripting
En mi caso yo decidí crear un script en bash el cual genera una lista de números y luego prueba de 1 en uno para obtener el correcto:
lo ejecutamos y vemos lo siguiente:

ya tenemos el código, pero antes de continuar revisamos el código fuente de la página y vemos un comentario que puede ser un usuario:
Luego de poner el código, obtenemos un hash:
Intrusión
Pasamos el hash por CrackStation y nos dice que la contraseña es "supersecretpassword" pero si intentamos conectarnos por ssh con el usuario "dimer" no nos funciona, ya que parece que tenemos que poner el hash directamente y podemos entrar xD.
Escalada de privilegios
Dimer
Si ejecutamos un sudo -l veremos que podemos ejecutar un script en bash como el usuario "bilter", pero este parece estar "ofuscado", de todas maneras al ser bash, simplemente creamos el mismo script pero lo modificamos un poco para que nos diga que comando se ejecuta al final:
al ejecutarlo vemos que el comando final es el siguiente:
Sabiendo esto, tendremos que cambiar la ip de la red docker0 en nuestro host para recibir la reverse shell. Para esto debemos hacer lo siguiente:
• Primero ejecutamos este oneliner para que cada 15 segundos se ejecute como el usuario bilter el script:
• Segundo cambiamos la ip de nuestro host:
• Finalmente escuchamos en el puerto 6068 y nos llega la shell:
Bilter
Nuevamente si ejecutamos sudo -l, veremos que podemos ejecutar otra vez un script de bash, el problema es que este al ejecutarlo no nos dice nada mas que un numero:
Nmap UDP
Luego de probar demasiadas cosas, se me ocurre realizar un escaneo de nmap por udp y veo lo siguiente:
viendo que tenemos el puerto abierto y que es el servicio snmp, pruebo a usar snmpwalk para inspeccionar el puerto:
en el resultado podemos ver una linea bastante interesante:
la cual está en base64 y al pasarla a texto vemos lo siguiente: "imposiblepassworduserfinal"
ejecutamos su purter y ponemos su contraseña.
Purter
Si ejecutamos sudo -l veremos que podemos ejecutar un script de bash que se encuentra en nuestra home, por lo que lo borramos y ponemos lo que queramos para escalar a root, en mi caso hice este oneliner:
Root

Para restablecer la red docker en nuestro host debemos ejecutar lo siguiente:
Gracias por leer ;)
Última actualización