MySQL File priv to SSRF/RCE
Il s'agit d'un résumé des techniques MySQL/MariaDB/Percona provenant de https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/.
Demande de falsification côté serveur (SSRF) via les fonctions SQL
Dans l'exploration de l'exfiltration de données hors bande SQL, la fonction LOAD_FILE()
est couramment utilisée pour initier des requêtes réseau. Cependant, cette fonction est limitée par le système d'exploitation sur lequel elle opère et les configurations de démarrage de la base de données.
La variable globale secure_file_priv
, si elle n'est pas définie, est par défaut /var/lib/mysql-files/
, limitant l'accès aux fichiers à ce répertoire à moins qu'elle ne soit définie comme une chaîne vide (""
). Ce réglage nécessite des modifications dans le fichier de configuration de la base de données ou les paramètres de démarrage.
Étant donné que secure_file_priv
est désactivé (""
), et en supposant que les autorisations de fichier et file_priv
nécessaires sont accordées, les fichiers en dehors du répertoire désigné peuvent être lus. Cependant, la capacité de ces fonctions à effectuer des appels réseau dépend fortement du système d'exploitation. Sur les systèmes Windows, les appels réseau aux chemins UNC sont possibles en raison de la compréhension par le système d'exploitation des conventions de dénomination UNC, ce qui peut potentiellement conduire à l'exfiltration des hachages NTLMv2.
Cette méthode SSRF est limitée au port TCP 445 et ne permet pas la modification du numéro de port, bien qu'elle puisse être utilisée pour accéder à des partages avec des privilèges de lecture complets et, comme démontré dans des recherches antérieures, pour voler des hachages en vue d'une exploitation ultérieure.
Exécution de code à distance (RCE) via les fonctions définies par l'utilisateur (UDF)
Les bases de données MySQL offrent l'utilisation de fonctions définies par l'utilisateur (UDF) à partir de fichiers de bibliothèque externes. Si ces bibliothèques sont accessibles dans des répertoires spécifiques ou dans le $PATH
du système, elles peuvent être invoquées depuis MySQL.
Cette technique permet l'exécution de requêtes réseau/HTTP via une UDF, à condition que plusieurs conditions soient remplies, notamment l'accès en écriture au @@plugin_dir
, que file_priv
soit défini sur Y
, et que secure_file_priv
soit désactivé.
Par exemple, la bibliothèque lib_mysqludf_sys
ou d'autres bibliothèques UDF permettant des requêtes HTTP peuvent être chargées pour effectuer une SSRF. Les bibliothèques doivent être transférées sur le serveur, ce qui peut être réalisé en encodant en hexadécimal ou en base64 le contenu de la bibliothèque, puis en l'écrivant dans le répertoire approprié.
Le processus varie si le @@plugin_dir
n'est pas inscriptible, en particulier pour les versions de MySQL supérieures à v5.0.67
. Dans de tels cas, des chemins alternatifs inscriptibles doivent être utilisés.
L'automatisation de ces processus peut être facilitée par des outils tels que SQLMap, qui prend en charge l'injection UDF, et pour les injections SQL aveugles, la redirection de sortie ou les techniques de trafic de requêtes DNS peuvent être utilisées.
Last updated