SQL Injection – rodzaj ataku komputerowego, w którym atakujący wykorzystując lukę w zabezpieczeniach aplikacji, przesyła dane, które są wykorzystywane przy wykonaniu zapytań (SQL) do bazy danych. Korzystając z tej techniki, atakujący jest w stanie modyfikować zapytania SQL przesyłane do bazy danych, co w praktyce często umożliwia mu na nieuprawnione uzyskanie dostępu do danych lub ich modyfikację. W tego typu atakach najczęściej wykorzystywane są błędy w oprogramowaniu polegające na nieodpowiednim filtrowaniu lub typowaniu wprowadzanych danych. Podatność jest charakterystyczna dla systemów, które na podstawie danych przesyłanych przez użytkownika generują dynamiczne zapytanie do bazy danych.

Rodzaje ataków SQL Injection

Podstawowa klasyfikacja ataków SQL Injection wynikająca z rodzaju odpowiedzi jaką otrzymuje atakujący:

  • In-band SQL Injection
  • Error-based SQL Injection
  • Union-based SQL Injection
  • Inferential (Blind) SQL Injection
  • Time-based Blind SQL Injection
  • Boolean-based (content-based) Blind SQL Injection
  • Out-of-band SQL Injection
  • Compounded SQL Injection

Przykłady implementacji ataku [1]

Poniżej przykład fragmentu aplikacji zawierającej podatność SQL Injection oraz sposób jej wykorzystania przez atakujących.

String query = "SELECT * FROM documents WHERE documentName = '" + request.getParameter("docName")+”’”;

executeQuery(query);

Zapytanie SQL zwracające informację odnośnie wskazanego przez użytkownika dokumentu.

https://www.example.com/documents/?docName=ABC123

Po przesłaniu parametru docName=ABC123 w powyższym żądaniu od użytkownika w bazie danych wywoływane zostanie zapytanie:

SELECT * FROM documents WHERE documentName='ABC123';

Atakujący może zmodyfikować przesyłane żądanie wprowadzając tam dodatkową frazę ‘OR’1’=’1

https://www.example.com/documents/?docName=ABC123’OR’1’=’1

Ciąg znaków wprowadzony przez atakującego spowoduje modyfikację zapytania przesyłanego przez system do bazy danych.

SELECT * FROM documents WHERE documentName= 'ABC123' OR '1'='1';

Przesyłając odpowiednio spreparowane frazy atakujący jest w stanie zmodyfikować zapytania trafiające do bazy danych tak aby uzyskać dostęp od informacji lub też zmodyfikować je.

Sposoby mitygacji ataków SQL Injection

Wszystkie dane wprowadzane przez użytkownika wykorzystywane do tworzenia zapytań do bazy danych należy traktować jako niezaufane i wprowadzić mechanizm sprawdzający ich poprawność. Należy walidować wartości przekazywanych parametrów na okoliczność istnienia potencjalnie niebezpiecznych znaków.

Linki zewnętrzne

Bibliografia