This page looks best with JavaScript enabled

TryHackMe - Overpass

 •  ✍️ sckull

Overpass es una maquina de TryHackMe, es una serie de maquinas las cuales envuelven diferentes retos, en esta se presentan retos web y analisis de codigo para obtener acceso. Escalamos privilegios con informacion presentada en Crontab.

Room

Titulo Overpass box_img_maker
Descripción What happens when some broke CompSci students make a password manager?
Puntos 110
Dificultad Facil
Maker

NinjaJc01

NMAP

Escaneo de puertos tcp, nmap nos muestra el puerto http (80) y el puerto ssh (22) abiertos.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Nmap 7.80 scan initiated Fri Jul 17 16:58:39 2020 as: nmap -sV -o nmap_scan_mini overpass.thm
Nmap scan report for overpass.thm (10.10.144.83)
Host is up (0.20s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Golang net/http server (Go-IPFS json-rpc or InfluxDB API)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Fri Jul 17 16:59:17 2020 -- 1 IP address (1 host up) scanned in 37.41 seconds

HTTP

Encontramos una pagina web en el puerto 80.
image

GOBUSTER

Utilizamos gobuster para busqueda de directorios y archivos.

1
2
3
4
5
6
7
8
9
root@upset:~/thm/overpass# gobuster dir -u http://overpass.thm/ -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-small.txt -q -t 25 -x php,html,txt
/index.html (Status: 301)
/img (Status: 301)
/downloads (Status: 301)
/aboutus (Status: 301)
/admin (Status: 301)
/admin.html (Status: 200)
/css (Status: 301)
/404.html (Status: 200)

En admin encontramos un panel, en el codigo fuente de este encontramos un archivo de javascript el cual al enviar el usuario y contraseña este verifica si la respuesta es "Incorrect Credentials", si ese fuera el caso limpia el input de la contraseña, si la respuesta es diferente entonces establece una cookie con la respuesta.

image

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19

[ ... REDACTED ...]

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"
    }
}

JAMES - USER

En este caso no hay un control encuanto a las cookies por lo que podemos establecer una cookie cualquiera o vacia y logramos ver lo que esta restringido, utilizamos burpsuite para establecer la cookie en vacio y logramos ver el contenido, en donde nos muestra una clave privada encriptada y el nombre de un usuario (james).
image

Utilizamos ssh2john para obtener el hash y john para obtener la frase del archivo.
image

Utilizamos la frase y la clave, logramos obtener una shell y nuestra flag user.txt.
image

PRIVILEGE ESCALATION

Hacemos una pequeña enumeracion con cat /etc/crontab y encontramos un cronjob del usuario root, en el que descarga un archivo bash y lo ejecuta en la direccion overpass.thm.
image

Editamos el archivo /etc/hosts y agregamos nuestra ip en lugar de la de overpass.thm.
image

Creamos un archivo con una shell inversa, creamos un mini servidor con python3 -m http.server 80, ademas creamos dos carpetas /downloads/src/ en donde estará nuestro archivo de la shell. Esperamos a que haga la solicitud y ejecute nuestro archivo, logramos obtener una shell root y la flag root.txt.
image

Share on

Dany Sucuc
WRITTEN BY
sckull
RedTeamer & Pentester wannabe