MySQL File priv to SSRF/RCE
Last updated
Last updated
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
To jest podsumowanie technik MySQL/MariaDB/Percona z https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/.
W badaniach nad SQL Out of Band data exfiltration, funkcja LOAD_FILE()
jest powszechnie używana 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 zakładając, że przyznano odpowiednie uprawnienia do plików i file_priv
, 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.
Bazy danych MySQL oferują możliwość używania 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.
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)