Discussione SQL Injection DVWA - from database dump to full working meterpreter session (Attacco & Difesa)

Netcat

Utente Jade
17 Gennaio 2022
493
135
355
691
C'è una credenza erronea secondo cui l'iniezione SQL si fermi al dump del database del server, la spiegazione della vulnerabilità si ferma qui in molti thread che vediamo online perché già il fatto di avere le mani sul database è molto grave. Tuttavia, in realtà l'iniezione SQL permette di eseguire ogni sorta di comando sul sistema infetto, includendo quindi l'abilità di interfacciarsi con il terminal.

Passi per replicare, in modo pratico, i passi da effettuare per ottenere una reverse shell meterpreter su DVWA tramite iniezione SQL.

1. Installa il server vulnerabile. Sono presenti vari livelli di difficoltà, ma dal momento che questo thread è solo a scopo educativo, per l'exploitation ho scelto l'iniezione SQL di grado facile;

2. Esponi il server in WAN, per semplicità di cose usa HTTP 80, perché HTTPS richiede l'implementazione di un certificato, complicando solamente lo studio;

3. Apri SQLmap, ed apri Metasploit. Dal terminal crea il solito payload windows/meterpreter/reverse_tcp;

4. Sul sito di DVWA, dirigiti all'area dell'iniezione SQL, e nella casella inserisci "1". Fatto questo copia il contenuto dell'URL risultante escludendo il simbolo #

5. Crea la query per SQLmap: -u "http://vulnerablewebsite/php?id=1" --cookie="PHPSESSID=incolla_il_valore_del_cookie_qui; security=low" --os-shell;

6. Ovviamente, trattandosi di un ambiente appositamente vulnerabile per facilitare lo studio e gli effetti dell'iniezione SQL, SQLmap dopo poco vi dirà che il parametro "id" è iniettabile, e vi fornirà un prompt in cui scegliere il linguaggio della webshell: il linguaggio della webshell deve concidere con l'implementazione del server. Se il server sta usando PHP, caricheremo una webshell in PHP, che verrà caricata ed eseguita nella directory del server. All'apertura, la webshell ci interfaccerà direttamente con il terminal del server;

7. Su Microsoft Windows esiste un comando chiamato "bitsadmin", che permette di scaricare un file da una sorgente remota. Craftando un'apposita richiesta con bitsadmin, scaricheremo il payload generato da metasploit nella directory del server, e dalla webshell lo eseguiremo, ottenendo una sessione di Meterpreter funzionante al 100%, che ha gli stessi privilegi del server (solitamente NT/AUTHORITY).

Da questa sessione di Meterpreter, non solo è possibile scaricare il database del sito, ma anche compromettere tutti gli altri servizi attivi sul server. Ad esempio è possibile disabilitare l'AV, disabilitare il firewall, installare una versione minimale di SSH per fare persistence, fare lsass dump per ottenere in plain text la password di Windows o di altri servizi con Mimikatz, forgiare un kerberos ticket o creare un altro account che ha i privilegi dell'amministratore.

PS. Nel thread non ho coperto i passi per cancellare le tracce dell'attacco o per evadere AV e WAF, e l'ho fatto di proposito, quindi ti raccomando strettamente di testarlo su un'implementazione DVWA di tua proprietà, o comunque un server su cui hai un esplicito consenso scritto per procedere all'exploitation.


Come difendersi e mitigare quest'attacco?
1. Validare e filtrare i dati di input, per prevenire l'inserimento di caratteri speciali e codice malevolo. Questa è la regola fondamentale, mentre SQLmap sarà il vostro migliore amico nella fase in cui testerete il codice del server. Internet fa un sacco di panegirici sui metodi di risoluzione, perché l'iniezione SQL si può presentare in varie modalità, e quella analizzata in questo thread è la più facile e la più nota.

2. Servizi di monitoraggio del database: AWS Security Hub, Azure Security Center sono due perfetti esempi su come gestire in tempo reale lo stato del database. Per sicurezza, dato che da un'iniezione SQL può nascere qualsiasi cosa (e Meterpreter è solo un esempio), si consiglia di abbinare anche un buon EDR e impostare il firewall per rifiutare le connessioni da porte inutilizzate.

3. Utilizzare tecniche di crittografia per proteggere i dati sensibili, come le password degli utenti;

4. Utilizzare parametri di query per passare le informazioni al database, invece di concatenare le query SQL.

Queste operazioni possono essere automatizzate utilizzando un ORM (Object-Relational Mapping) per gestire le query al database in modo automatico, senza dover scrivere del codice SQL esplicito. Gli ORM come SQLAlchemy per Python o Hibernate per Java consentono di definire modelli di dati e di effettuare operazioni di lettura e scrittura senza dover scrivere query SQL manualmente.
 
  • Mi piace
Reazioni: 0xbro