1433 - Pentesting MSSQL - Microsoft SQL Server
Grundinformationen
Von wikipedia:
Microsoft SQL Server ist ein relationales Datenbank-Managementsystem, das von Microsoft entwickelt wurde. Als Datenbankserver ist es ein Softwareprodukt mit der Hauptfunktion, Daten zu speichern und abzurufen, wie von anderen Softwareanwendungen angefordert—die entweder auf demselben Computer oder auf einem anderen Computer über ein Netzwerk (einschließlich des Internets) ausgeführt werden können.\
Standardport: 1433
Standard-MS-SQL-Systemtabellen
master-Datenbank: Diese Datenbank ist entscheidend, da sie alle systembezogenen Details für eine SQL Server-Instanz erfasst.
msdb-Datenbank: Der SQL Server-Agent nutzt diese Datenbank zur Verwaltung der Planung von Warnungen und Jobs.
model-Datenbank: Dient als Vorlage für jede neue Datenbank auf der SQL Server-Instanz, wobei Änderungen wie Größe, Sortierung, Wiederherstellungsmodell und mehr in neu erstellten Datenbanken widergespiegelt werden.
Resource-Datenbank: Eine schreibgeschützte Datenbank, die Systemobjekte enthält, die mit SQL Server geliefert werden. Diese Objekte, obwohl physisch in der Resource-Datenbank gespeichert, werden logisch im sys-Schema jeder Datenbank präsentiert.
tempdb-Datenbank: Dient als temporärer Speicherbereich für flüchtige Objekte oder Zwischenresultate.
Aufzählung
Automatische Aufzählung
Wenn Sie nichts über den Dienst wissen:
Wenn Sie keine Anmeldeinformationen haben, können Sie versuchen, diese zu erraten. Sie können nmap oder metasploit verwenden. Seien Sie vorsichtig, Sie können Konten sperren, wenn Sie sich mehrmals mit einem vorhandenen Benutzernamen anmelden und fehlschlagen.
Metasploit (Benutzeranmeldeinformationen erforderlich)
Manuelle Aufzählung
Anmeldung
Häufige Aufzählung
Benutzer abrufen
Types of MSSQL UsersBerechtigungen abrufen
Securable: Definiert als die Ressourcen, die von SQL Server für die Zugriffskontrolle verwaltet werden. Diese werden in folgende Kategorien unterteilt:
Server – Beispiele sind Datenbanken, Logins, Endpunkte, Verfügbarkeitsgruppen und Serverrollen.
Datenbank – Beispiele umfassen Datenbankrollen, Anwendungsrollen, Schemata, Zertifikate, Volltextkataloge und Benutzer.
Schema – Beinhaltet Tabellen, Ansichten, Prozeduren, Funktionen, Synonyme usw.
Berechtigung: Im Zusammenhang mit SQL Server Securables können Berechtigungen wie ALTER, CONTROL und CREATE einem Principal gewährt werden. Die Verwaltung von Berechtigungen erfolgt auf zwei Ebenen:
Serverebene unter Verwendung von Logins
Datenbankebene unter Verwendung von Benutzern
Principal: Dieser Begriff bezieht sich auf die Entität, die die Berechtigung für ein Securable erhält. Principals umfassen hauptsächlich Logins und Datenbankbenutzer. Die Kontrolle über den Zugriff auf Securables erfolgt durch das Gewähren oder Verweigern von Berechtigungen oder durch das Einbeziehen von Logins und Benutzern in Rollen, die mit Zugriffsrechten ausgestattet sind.
Tricks
OS-Befehle ausführen
Beachten Sie, dass es nicht nur notwendig ist, xp_cmdshell
aktiviert zu haben, sondern auch die EXECUTE-Berechtigung für das xp_cmdshell
-Stored Procedure zu besitzen. Sie können herausfinden, wer (außer Sysadmins) xp_cmdshell
verwenden kann mit:
NetNTLM-Hash stehlen / Relay-Angriff
Sie sollten einen SMB-Server starten, um den Hash zu erfassen, der bei der Authentifizierung verwendet wird (impacket-smbserver
oder responder
zum Beispiel).
Sie können überprüfen, wer (außer Sysadmins) Berechtigungen hat, um diese MSSQL-Funktionen auszuführen mit:
Mit Tools wie responder oder Inveigh ist es möglich, den NetNTLM-Hash zu stehlen. Sie können sehen, wie man diese Tools verwendet in:
Spoofing LLMNR, NBT-NS, mDNS/DNS and WPAD and Relay AttacksMissbrauch von MSSQL vertrauenswürdigen Links
Lesen Sie diesen Beitrag um mehr Informationen darüber zu finden, wie man diese Funktion missbrauchen kann:
MSSQL AD AbuseDateien schreiben
Um Dateien mit MSSQL
zu schreiben, müssen wir Ole Automation Procedures aktivieren, was Administratorrechte erfordert, und dann einige gespeicherte Prozeduren ausführen, um die Datei zu erstellen:
Datei mit OPENROWSET lesen
Standardmäßig erlaubt MSSQL
das Lesen von Dateien in jedem Dateisystem, auf das das Konto Lesezugriff hat. Wir können die folgende SQL-Abfrage verwenden:
Allerdings erfordert die BULK
-Option die Berechtigung ADMINISTER BULK OPERATIONS
oder ADMINISTER DATABASE BULK OPERATIONS
.
Fehlerbasierter Vektor für SQLi:
RCE/Dateien lesen, Skripte ausführen (Python und R)
MSSQL könnte es Ihnen ermöglichen, Skripte in Python und/oder R auszuführen. Dieser Code wird von einem anderen Benutzer ausgeführt als dem, der xp_cmdshell verwendet, um Befehle auszuführen.
Beispiel, das versucht, ein 'R' "Hellow World!" auszuführen, funktioniert nicht:
Beispiel, das konfiguriertes Python verwendet, um mehrere Aktionen durchzuführen:
Registry lesen
Microsoft SQL Server bietet mehrere erweiterte gespeicherte Prozeduren, die es Ihnen ermöglichen, nicht nur mit dem Netzwerk, sondern auch mit dem Dateisystem und sogar der Windows-Registrierung:
Regulär | Instanzbewusst |
sys.xp_regread | sys.xp_instance_regread |
sys.xp_regenumvalues | sys.xp_instance_regenumvalues |
sys.xp_regenumkeys | sys.xp_instance_regenumkeys |
sys.xp_regwrite | sys.xp_instance_regwrite |
sys.xp_regdeletevalue | sys.xp_instance_regdeletevalue |
sys.xp_regdeletekey | sys.xp_instance_regdeletekey |
sys.xp_regaddmultistring | sys.xp_instance_regaddmultistring |
sys.xp_regremovemultistring | sys.xp_instance_regremovemultistring |
```sql | |
# Example read registry | |
EXECUTE master.sys.xp_regread 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\Microsoft SQL Server\MSSQL12.SQL2014\SQLServerAgent', 'WorkingDirectory'; | |
# Example write and then read registry | |
EXECUTE master.sys.xp_instance_regwrite 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\MSSQLSERVER\SQLServerAgent\MyNewKey', 'MyNewValue', 'REG_SZ', 'Now you see me!'; | |
EXECUTE master.sys.xp_instance_regread 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\MSSQLSERVER\SQLServerAgent\MyNewKey', 'MyNewValue'; | |
# Example to check who can use these functions | |
Use master; | |
EXEC sp_helprotect 'xp_regread'; | |
EXEC sp_helprotect 'xp_regwrite'; | |
``` | |
For mehr Beispiele schauen Sie sich die originale Quelle an. |
RCE mit MSSQL Benutzerdefinierter Funktion - SQLHttp
Es ist möglich, eine .NET dll innerhalb von MSSQL mit benutzerdefinierten Funktionen zu laden. Dies erfordert jedoch dbo
-Zugriff, sodass Sie eine Verbindung zur Datenbank als sa
oder mit einer Administratorrolle benötigen.
Folgen Sie diesem Link, um ein Beispiel zu sehen.
Andere Möglichkeiten für RCE
Es gibt andere Methoden, um die Ausführung von Befehlen zu erhalten, wie das Hinzufügen von erweiterten gespeicherten Prozeduren, CLR-Assemblies, SQL Server Agent Jobs und externe Skripte.
MSSQL Privilegieneskalation
Von db_owner zu sysadmin
Wenn ein normaler Benutzer die Rolle db_owner
über die Datenbank eines Admin-Benutzers (wie sa
) erhält und diese Datenbank als trustworthy
konfiguriert ist, kann dieser Benutzer diese Privilegien missbrauchen, um privesc zu erreichen, da gespeicherte Prozeduren, die dort erstellt wurden, als der Eigentümer (Admin) ausgeführt werden können.
Sie können ein metasploit Modul verwenden:
Oder ein PS-Skript:
Identitätsübernahme anderer Benutzer
SQL Server hat eine spezielle Berechtigung, die IMPERSONATE
genannt wird, die es dem ausführenden Benutzer ermöglicht, die Berechtigungen eines anderen Benutzers oder Logins zu übernehmen, bis der Kontext zurückgesetzt wird oder die Sitzung endet.
Wenn Sie einen Benutzer impersonieren können, auch wenn er kein Sysadmin ist, sollten Sie überprüfen, ob der Benutzer Zugriff auf andere Datenbanken oder verlinkte Server hat.
Beachten Sie, dass Sie, sobald Sie Sysadmin sind, jeden anderen impersonieren können:
Sie können diesen Angriff mit einem metasploit-Modul durchführen:
oder mit einem PS Skript:
Verwendung von MSSQL für Persistenz
https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/
Extrahieren von Passwörtern aus SQL Server Linked Servers
Ein Angreifer kann Passwörter von SQL Server Linked Servers aus den SQL-Instanzen extrahieren und im Klartext erhalten, was dem Angreifer Passwörter gewährt, die verwendet werden können, um einen größeren Fuß in das Ziel zu bekommen. Das Skript zum Extrahieren und Entschlüsseln der für die Linked Servers gespeicherten Passwörter finden Sie hier.
Einige Anforderungen und Konfigurationen müssen vorgenommen werden, damit dieser Exploit funktioniert. Zunächst müssen Sie Administratorrechte auf dem Computer haben oder die Fähigkeit, die SQL Server-Konfigurationen zu verwalten.
Nachdem Sie Ihre Berechtigungen validiert haben, müssen Sie drei Dinge konfigurieren, die Folgendes sind:
Aktivieren Sie TCP/IP auf den SQL Server-Instanzen;
Fügen Sie einen Startparameter hinzu, in diesem Fall wird ein Trace-Flag hinzugefügt, das -T7806 ist.
Aktivieren Sie die Remote-Admin-Verbindung.
Um diese Konfigurationen zu automatisieren, hat dieses Repository die benötigten Skripte. Neben einem PowerShell-Skript für jeden Schritt der Konfiguration enthält das Repository auch ein vollständiges Skript, das die Konfigurationsskripte sowie die Extraktion und Entschlüsselung der Passwörter kombiniert.
Für weitere Informationen siehe die folgenden Links zu diesem Angriff: Entschlüsseln von MSSQL-Datenbank-Link-Server-Passwörtern
Fehlerbehebung bei der SQL Server Dedicated Administrator Connection
Lokale Privilegieneskalation
Der Benutzer, der den MSSQL-Server ausführt, wird das Berechtigungstoken SeImpersonatePrivilege aktiviert haben. Sie werden wahrscheinlich in der Lage sein, auf Administrator zu eskalieren, indem Sie einer dieser 2 Seiten folgen:
RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotatoJuicyPotatoShodan
port:1433 !HTTP