MySQL LOAD_FILE() i INTO OUTFILE() Sql Injection

Jan 19 2023
W tym artykule omówimy funkcję MySQL LOAD_FILE() i INTO OUTFILE() oraz Sql Injection. MySQL udostępnia funkcje LOAD_FILE() i INTO OUTFILE(), których można używać do odczytu lub zapisu plików w systemie plików serwera, na którym działa baza danych MySQL.
Zdjęcie: Sara Bakhshi na Unsplash

W tym artykule omówimy funkcję MySQL LOAD_FILE() i INTO OUTFILE() oraz Sql Injection. MySQL udostępnia funkcje LOAD_FILE() i INTO OUTFILE(), których można używać do odczytu lub zapisu plików w systemie plików serwera, na którym działa baza danych MySQL. Te funkcje mogą być podatne na ataki SQL injection, jeśli dane wejściowe użytkownika nie zostaną odpowiednio oczyszczone.

Osoba atakująca może użyć iniekcji SQL do zmodyfikowania ścieżki pliku przekazanej do funkcji LOAD_FILE() lub INTO OUTFILE() w celu uzyskania dostępu do nieautoryzowanych plików na serwerze lub zapisu w nich. Na przykład osoba atakująca może użyć iniekcji SQL do odczytania poufnych plików na serwerze lub napisania złośliwego kodu na serwerze, co może prowadzić do dalszego naruszenia bezpieczeństwa systemu.

Aby zapobiec atakom polegającym na iniekcji SQL podczas korzystania z tych funkcji, ważne jest prawidłowe sprawdzanie poprawności i oczyszczanie wszelkich danych wejściowych użytkownika używanych jako parametr w funkcji. Ponadto dobrą praktyką jest również używanie najmniej uprzywilejowanego konta użytkownika MySQL podczas łączenia się z bazą danych, ponieważ ograniczy to potencjalne szkody, jakie może wyrządzić atakujący, jeśli uda mu się wstrzyknąć złośliwy kod SQL.

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

Przykład podatnego na ataki kodu PHP, który używa funkcji MySQL INTO OUTFILE():

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

Kermit

W tym poście omówiliśmy funkcję MySQL LOAD_FILE() i INTO OUTFILE() oraz Sql Injection, do zobaczenia w następnym poście, uważaj.