MySQL File priv to SSRF/RCE

Support HackTricks

Dies ist eine Zusammenfassung der MySQL/MariaDB/Percona-Techniken von https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/.

Server-Side Request Forgery (SSRF) über SQL-Funktionen

Bei der Erkundung der SQL Out of Band-Datenexfiltration wird die LOAD_FILE()-Funktion häufig verwendet, um Netzwerkaufrufe zu initiieren. Diese Funktion ist jedoch durch das Betriebssystem, auf dem sie ausgeführt wird, und die Startkonfigurationen der Datenbank eingeschränkt.

Die globale Variable secure_file_priv, wenn sie nicht gesetzt ist, hat standardmäßig den Wert /var/lib/mysql-files/, was den Dateizugriff auf dieses Verzeichnis beschränkt, es sei denn, sie wird auf einen leeren String ("") gesetzt. Diese Anpassung erfordert Änderungen in der Konfigurationsdatei der Datenbank oder in den Startparametern.

Wenn secure_file_priv deaktiviert ist (""), und vorausgesetzt, die erforderlichen Datei- und file_priv-Berechtigungen sind erteilt, können Dateien außerhalb des vorgesehenen Verzeichnisses gelesen werden. Dennoch hängt die Fähigkeit dieser Funktionen, Netzwerkaufrufe zu tätigen, stark vom Betriebssystem ab. Auf Windows-Systemen sind Netzwerkaufrufe zu UNC-Pfaden möglich, da das Betriebssystem die UNC-Namenskonventionen versteht, was potenziell zur Exfiltration von NTLMv2-Hashes führen kann.

Diese SSRF-Methode ist auf den TCP-Port 445 beschränkt und erlaubt keine Änderung der Portnummer, kann jedoch verwendet werden, um Freigaben mit vollständigen Leserechten zuzugreifen und, wie in früheren Forschungen gezeigt, um Hashes für weitere Ausbeutung zu stehlen.

Remote Code Execution (RCE) über Benutzerdefinierte Funktionen (UDF)

MySQL-Datenbanken bieten die Verwendung von Benutzerdefinierten Funktionen (UDF) aus externen Bibliotheksdateien. Wenn diese Bibliotheken in bestimmten Verzeichnissen oder im $PATH des Systems zugänglich sind, können sie von innerhalb von MySQL aufgerufen werden.

Diese Technik ermöglicht die Ausführung von Netzwerk-/HTTP-Anfragen über eine UDF, vorausgesetzt, mehrere Bedingungen sind erfüllt, einschließlich Schreibzugriff auf das @@plugin_dir, file_priv auf Y gesetzt und secure_file_priv deaktiviert.

Zum Beispiel kann die lib_mysqludf_sys-Bibliothek oder andere UDF-Bibliotheken, die HTTP-Anfragen ermöglichen, geladen werden, um SSRF durchzuführen. Die Bibliotheken müssen auf den Server übertragen werden, was durch Hex- oder Base64-Codierung des Inhalts der Bibliothek und anschließendes Schreiben in das entsprechende Verzeichnis erreicht werden kann.

Der Prozess variiert, wenn das @@plugin_dir nicht beschreibbar ist, insbesondere für MySQL-Versionen über v5.0.67. In solchen Fällen müssen alternative beschreibbare Pfade verwendet werden.

Die Automatisierung dieser Prozesse kann durch Tools wie SQLMap erleichtert werden, die UDF-Injektion unterstützen, und für blinde SQL-Injektionen können Techniken zur Ausgabeumleitung oder DNS-Anforderungs-Schmuggel verwendet werden.

Support HackTricks

Last updated