MySQL File priv to SSRF/RCE
Questo è un riepilogo delle tecniche MySQL/MariaDB/Percona da https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/.
Server-Side Request Forgery (SSRF) tramite Funzioni SQL
Nell'esplorazione dell'exfiltrazione di dati SQL Out of Band, la funzione LOAD_FILE()
è comunemente utilizzata per avviare richieste di rete. Questa funzione, tuttavia, è limitata dal sistema operativo su cui opera e dalle configurazioni di avvio del database.
La variabile globale secure_file_priv
, se non impostata, predefinisce a /var/lib/mysql-files/
, limitando l'accesso ai file a questa directory a meno che non sia impostata su una stringa vuota (""
). Questa modifica richiede modifiche nel file di configurazione del database o nei parametri di avvio.
Dato che secure_file_priv
è disabilitato (""
), e assumendo che i permessi necessari per i file e file_priv
siano concessi, i file al di fuori della directory designata possono essere letti. Tuttavia, la capacità di queste funzioni di effettuare chiamate di rete dipende fortemente dal sistema operativo. Nei sistemi Windows, le chiamate di rete a percorsi UNC sono fattibili grazie alla comprensione delle convenzioni di denominazione UNC da parte del sistema operativo, portando potenzialmente all'exfiltrazione di hash NTLMv2.
Questo metodo SSRF è limitato alla porta TCP 445 e non consente la modifica del numero di porta, sebbene possa essere utilizzato per accedere a condivisioni con pieni privilegi di lettura e, come dimostrato in ricerche precedenti, per rubare hash per ulteriori sfruttamenti.
Esecuzione Remota di Codice (RCE) tramite Funzioni Definite dall'Utente (UDF)
I database MySQL offrono l'uso di Funzioni Definite dall'Utente (UDF) da file di libreria esterni. Se queste librerie sono accessibili all'interno di directory specifiche o nel $PATH
del sistema, possono essere invocate da MySQL.
Questa tecnica consente l'esecuzione di richieste di rete/HTTP tramite un UDF, a condizione che siano soddisfatte diverse condizioni, tra cui l'accesso in scrittura a @@plugin_dir
, file_priv
impostato su Y
e secure_file_priv
disabilitato.
Ad esempio, la libreria lib_mysqludf_sys
o altre librerie UDF che abilitano richieste HTTP possono essere caricate per eseguire SSRF. Le librerie devono essere trasferite al server, il che può essere ottenuto tramite codifica esadecimale o base64 del contenuto della libreria e poi scrivendolo nella directory appropriata.
Il processo varia se @@plugin_dir
non è scrivibile, specialmente per le versioni di MySQL superiori a v5.0.67
. In tali casi, devono essere utilizzati percorsi alternativi che siano scrivibili.
L'automazione di questi processi può essere facilitata da strumenti come SQLMap, che supporta l'iniezione UDF, e per iniezioni SQL cieche, possono essere utilizzate tecniche di reindirizzamento dell'output o di smuggling delle richieste DNS.
Last updated