SQL Injection – rodzaj ataku na bazy danych
SQL Injection to rodzaj ataku na bazy danych, który wykorzystuje lukę w zabezpieczeniach aplikacji internetowej. Aplikacja ta komunikuje się z bazą danych przy pomocy języka SQL. Niewłaściwie zabezpieczona aplikacja umożliwia atakującemu dostęp do bazy danych poprzez wprowadzenie danych wejściowych np. w formularzu lub komentarzu. Dane umieszczone w takim polu tekstowym zapisywane są w bazie danych, dzięki czemu umieszczenie złośliwego fragmentu kodu jest niezwykle proste. W gruncie rzeczy atakujący próbuje wstrzyknąć złośliwe zapytanie SQL do bazy danych, w celu uzyskania dostępu do poufnych informacji, modyfikacji danych lub uszkodzenia bazy danych. Chociaż nie jest to żaden malware, taki atak webowy może być równie groźny dla organizacji. Aby zrozumieć jak działa SQL Injection i jak wygląda złośliwe zapytanie, ważne jest zrozumienie podstaw języka SQL.
Poniżej wypunktowane są cztery główne zapytania, przy pomocy których operujemy informacjami zapisanych w tabelach:
- SELECT – podstawowa komenda do odczytywania danych
- INSERT – komenda służąca do wprowadzania wszelkich danych
- UPDATE – komenda do aktualizacji danych np. zmieniania rekordów w tabelach
- DELETE – komenda służąca do usuwania wszelkich danych
Język SQL jest mocno rozbudowany i tworząc zapytania korzystamy oczywiście z większej ilości komend niż powyższe cztery. Warto zatem wspomnieć o podstawowych elementach zapytań SQL:
- FROM – komenda, która określa z jakiej tabeli bądź tabel baza danych ma pobierać dane,
SELECT * FROM pracownicy;
Powyższe zapytanie wybierze wszystkie kolumny z tabeli pracownicy
- WHERE – komenda do filtrowania wyników zapytania na podstawie określonych warunków. Przy jej pomocy użytkownik odczytuje rekordy spełniające dane kryteria,
SELECT * FROM pracownicy WHERE wiek > 40;
Zapytanie to wybierze wszystkie kolumny z tabeli pracownicy, w których wiek jest wyższy niż 40
- AND – komenda ta jest operatorem logicznym, który umożliwia łączenie warunków w jednym zapytaniu.
SELECT * FROM pracownicy WHERE wiek > 40 AND płeć = mężczyzna;
Powyższe zapytanie wybierze wszystkie kolumny z tabeli pracownicy, w których parametr wiek jest wyższy niż 40 a płeć skategoryzowana jako mężczyzna.
Jak działa SQL Injection?
Skoro poznaliśmy odrobinę podstawy języka SQL możemy przejść do przykładów związanych z samym atakiem. Struktura komendy w większości przypadków będzie o wiele bardziej złożona i skomplikowana, ale najważniejsze, że znamy już zamysł i zasadę działania SQL. W tym artykule nie będziemy zagłębiać się w skomplikowany kod i skorzystamy z prostszego przykładu.
Załóżmy, że jesteśmy właścicielami prostej aplikacji internetowej, zawierającej formularz logowania. Dane logowania są weryfikowane w bazie danych za pomocą zapytania SQL. Poniżej znajduje się przykład zapytania SQL w języku PHP:
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
Atakujący może wykorzystać lukę w aplikacji przeprowadzając atak SQL Injection poprzez wprowadzenie złośliwych danych w polu username. Wystarczy wprowadzić następujące dane:
' OR '1'='1
Po tak zwanym wstrzyknięciu tych danych do pola username, zapytanie SQL wygląda jak poniżej:
SELECT * FROM users WHERE username='' OR '1'='1' AND password='$password'
1 Komentarz. Zostaw nowy
[…] zabezpieczona aplikacja zawiera luki, które atakujący z łatwością może wykorzystać atakiem SQL Injection, Cross Site Scripting (XSS) i wieloma innymi. Warto zatem skorzystać z dodatkowej warstwy ochrony […]