MySQL LOAD_FILE() et INTO OUTFILE() SQL Injection

Jan 19 2023
Dans cet article, nous aborderons la fonction MySQL LOAD_FILE() et la fonction INTO OUTFILE() et l'injection Sql. MySQL fournit les fonctions LOAD_FILE() et INTO OUTFILE() qui peuvent être utilisées pour lire ou écrire des fichiers sur le système de fichiers du serveur sur lequel la base de données MySQL est en cours d'exécution.
Photo de Sara Bakhshi sur Unsplash

Dans cet article, nous aborderons la fonction MySQL LOAD_FILE() et la fonction INTO OUTFILE() et l'injection Sql. MySQL fournit les fonctions LOAD_FILE() et INTO OUTFILE() qui peuvent être utilisées pour lire ou écrire des fichiers sur le système de fichiers du serveur sur lequel la base de données MySQL est en cours d'exécution. Ces fonctions peuvent être vulnérables aux attaques par injection SQL si l'entrée de l'utilisateur n'est pas correctement filtrée.

Un attaquant pourrait utiliser l'injection SQL pour modifier le chemin du fichier transmis à la fonction LOAD_FILE() ou INTO OUTFILE() pour accéder ou écrire dans des fichiers non autorisés sur le serveur. Par exemple, un attaquant pourrait utiliser l'injection SQL pour lire des fichiers sensibles sur le serveur ou pour écrire du code malveillant sur le serveur, ce qui pourrait compromettre davantage le système.

Pour éviter les attaques par injection SQL lors de l'utilisation de ces fonctions, il est important de valider et de nettoyer correctement toute entrée utilisateur utilisée comme paramètre dans la fonction. De plus, il est également recommandé d'utiliser le compte d'utilisateur MySQL le moins privilégié lors de la connexion à la base de données, car cela limitera les dommages potentiels qu'un attaquant peut causer s'il réussit à injecter du code SQL malveillant.

<?php
$file_path = $_GET['file'];
$sql = "SELECT * FROM users WHERE profile_picture = LOAD_FILE('" . $file_path . "')";
$result = mysqli_query($connection, $sql);
?>

Un exemple de code PHP vulnérable qui utilise la fonction MySQL INTO OUTFILE() :

<?php
$file_path = $_POST['file'];
$content = $_POST['content'];
$sql = "SELECT '".$content."' INTO OUTFILE '" . $file_path . "'";
$result = mysqli_query($connection, $sql);
?>

Kermit

Dans cet article, nous avons discuté de la fonction MySQL LOAD_FILE() et de la fonction INTO OUTFILE() et de l'injection Sql, rendez-vous dans le prochain article, prenez soin de vous.