MySQL File priv to SSRF/RCE

Wsparcie dla HackTricks

To jest podsumowanie technik MySQL/MariaDB/Percona z https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/.

Server-Side Request Forgery (SSRF) za pomocą funkcji SQL

W badaniach nad SQL Out of Band data exfiltration, funkcja LOAD_FILE() jest powszechnie stosowana do inicjowania żądań sieciowych. Funkcja ta jest jednak ograniczona przez system operacyjny, na którym działa, oraz konfiguracje uruchamiania bazy danych.

Globalna zmienna secure_file_priv, jeśli nie jest ustawiona, domyślnie wskazuje na /var/lib/mysql-files/, ograniczając dostęp do plików tylko do tego katalogu, chyba że zostanie ustawiona na pusty ciąg (""). Ta zmiana wymaga modyfikacji w pliku konfiguracyjnym bazy danych lub parametrach uruchamiania.

Jeśli secure_file_priv jest wyłączona (""), a odpowiednie uprawnienia do plików i file_priv są przyznane, pliki spoza wyznaczonego katalogu mogą być odczytywane. Niemniej jednak, zdolność tych funkcji do wykonywania wywołań sieciowych jest w dużej mierze uzależniona od systemu operacyjnego. W systemach Windows wywołania sieciowe do ścieżek UNC są możliwe dzięki zrozumieniu konwencji nazewnictwa UNC przez system operacyjny, co może prowadzić do wycieku hashy NTLMv2.

Metoda SSRF jest ograniczona do portu TCP 445 i nie pozwala na modyfikację numeru portu, chociaż może być używana do uzyskiwania dostępu do udziałów z pełnymi uprawnieniami do odczytu i, jak pokazano w wcześniejszych badaniach, do kradzieży hashy w celu dalszej eksploatacji.

Zdalne Wykonanie Kodu (RCE) za pomocą Funkcji Użytkownika (UDF)

Bazy danych MySQL oferują możliwość użycia Funkcji Użytkownika (UDF) z zewnętrznych plików bibliotecznych. Jeśli te biblioteki są dostępne w określonych katalogach lub w $PATH systemu, mogą być wywoływane z poziomu MySQL.

Technika ta pozwala na wykonywanie żądań sieciowych/HTTP za pomocą UDF, pod warunkiem spełnienia kilku warunków, w tym dostępu do zapisu do @@plugin_dir, file_priv ustawionego na Y oraz wyłączenia secure_file_priv.

Na przykład, biblioteka lib_mysqludf_sys lub inne biblioteki UDF umożliwiające żądania HTTP mogą być załadowane w celu wykonania SSRF. Biblioteki muszą być przeniesione na serwer, co można osiągnąć poprzez kodowanie hex lub base64 zawartości biblioteki, a następnie zapisanie jej w odpowiednim katalogu.

Proces ten różni się, jeśli @@plugin_dir nie jest zapisywalny, szczególnie dla wersji MySQL powyżej v5.0.67. W takich przypadkach należy użyć alternatywnych ścieżek, które są zapisywalne.

Automatyzacja tych procesów może być ułatwiona przez narzędzia takie jak SQLMap, które wspierają wstrzykiwanie UDF, a w przypadku ślepych wstrzyknięć SQL mogą być wykorzystywane techniki przekierowywania wyjścia lub smugglingu żądań DNS.

Wsparcie dla HackTricks

Last updated