SQL Injection – jak działa, jak się przed nim chronić, i jak wygląda atak
Cyberbezpieczeństwo Hacking

SQL Injection – jak działa, jak się przed nim chronić, i jak wygląda atak

🧨 SQL Injection – jak działa, jak się przed nim chronić, i jak wygląda atak

SQL Injection (wstrzykiwanie kodu SQL) to technika ataku na aplikacje internetowe, która pozwala napastnikowi manipulować zapytaniami do bazy danych. Źle zabezpieczone formularze, pola wyszukiwania czy adresy URL mogą dać dostęp do całych baz danych – bez potrzeby uwierzytelniania.

🔍 Na czym polega SQL Injection?

SQL Injection występuje, gdy dane wprowadzone przez użytkownika są bezpośrednio „wstrzykiwane” do zapytania SQL bez odpowiedniego oczyszczenia lub przygotowania. Jeśli aplikacja nie filtruje poprawnie danych wejściowych, atakujący może dodać własne instrukcje SQL.


🧪 Przykład klasycznego ataku

Przykład kodu PHP:

$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";

Dane wpisane przez atakującego:

Username: ' OR '1'='1
Password: ' OR '1'='1

Efektywne zapytanie SQL:

SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '' OR '1'='1'

Efekt? Logowanie bez hasła.

 

SQL Injection – jak działa, jak się przed nim chronić, i jak wygląda atak
SQL Injection – jak działa, jak się przed nim chronić, i jak wygląda atak

🧠 Rodzaje SQL Injection

Typ Opis
Classic (In-Band) Wyniki zapytania są zwracane bezpośrednio do przeglądarki (np. wyświetlenie tabeli z danymi).
Blind (Ślepe) Aplikacja nie wyświetla błędów ani danych, ale zachowanie aplikacji się zmienia (np. opóźnienia, inne odpowiedzi HTTP).
Out-of-Band Dane są przesyłane do atakującego innym kanałem (np. żądaniem HTTP, DNS).
Second-Order Kod SQL nie jest wykonywany natychmiast – złośliwe dane są zapisywane i wykorzystane później, np. przez inny moduł.
Czytaj  Ataki na systemy pakietów (APT, RPM): Czy aktualizacje mogą być wektorem infekcji?

🎯 Co może osiągnąć atakujący?

  • 🔓 Pobranie danych użytkowników (w tym haseł)
  • ✏️ Modyfikacja, usunięcie lub dodanie rekordów
  • 🛠️ Przejęcie kontroli nad bazą danych
  • 🔥 Eskalacja do systemu operacyjnego (np. za pomocą xp_cmdshell w MSSQL)
  • 🎣 Zbieranie danych osobowych – zgodnie z RODO może grozić firmie grzywną

🛡️ Jak się chronić przed SQL Injection?

🔒 Zabezpieczenia dla programistów:

  • ✅ Używaj prepared statements (przygotowanych zapytań)
    • W PHP: PDO lub mysqli z bind_param()
    • W Pythonie: sqlite3, psycopg2 z placeholderami
  • Waliduj i filtruj dane wejściowe
  • ✅ Stosuj ORM-y (np. SQLAlchemy, Hibernate) – utrudniają bezpośrednie manipulacje SQL-em
  • ✅ Ogranicz uprawnienia kont bazy danych – nie dawaj aplikacji dostępu ROOT/DBA
  • ✅ Rejestruj nieudane próby i analizuj logi
  • ✅ Maskuj szczegóły błędów SQL w środowisku produkcyjnym

🔍 Zabezpieczenia na poziomie infrastruktury:

  • 🔐 Firewall aplikacji webowej (WAF) – np. ModSecurity, Cloudflare
  • 🕵️‍♂️ Monitorowanie zapytań do bazy i wykrywanie anomalii
  • 🔒 Segmentacja sieci – baza danych w oddzielnej podsieci
  • 📉 Ograniczenia liczby zapytań (rate limiting)

🔧 Narzędzia do testów i ataków (pentesting)

  • sqlmap – automatyczne narzędzie do wykrywania i eksploatacji SQLi
  • Havij – GUI do SQL Injection (często wykorzystywany przez początkujących)
  • Burp Suite – przechwytywanie żądań i testowanie podatności
  • Nmap + NSE – skanowanie i testowanie serwerów SQL

💡 Przykład SQL Injection typu Blind

Jeśli aplikacja nie pokazuje błędów SQL, można użyć techniki warunkowej:

SELECT * FROM users WHERE id = 1 AND SUBSTRING((SELECT password FROM users LIMIT 1),1,1) = 'a'

Jeśli aplikacja zachowa się inaczej (np. wyświetli dane lub nie), można iteracyjnie odczytać hasło znak po znaku.


🏁 Podsumowanie

SQL Injection pozostaje jednym z największych zagrożeń dla aplikacji webowych, mimo że jego podstawowe mechanizmy są znane od lat. Dlaczego? Bo błędy wynikają z niedbalstwa i niewystarczającej edukacji. Każdy zespół tworzący oprogramowanie powinien traktować bezpieczeństwo danych jako priorytet.

Czytaj  Podstawy bezpieczeństwa komputerowego dla uczniów – informatyka szkoła średnia

 

Polecane wpisy
Fałszywe poczucie bezpieczeństwa w systemach operacyjnych – funkcje, które użytkownicy przeceniają
Fałszywe poczucie bezpieczeństwa w systemach operacyjnych – funkcje, które użytkownicy przeceniają

Fałszywe poczucie bezpieczeństwa w systemach operacyjnych – funkcje, które użytkownicy przeceniają         Często użytkownicy wierzą, że systemy Czytaj dalej

Jaki jest najczęstszy rodzaj wirusa
Jaki jest najczęstszy rodzaj wirusa

Jaki jest najczęstszy rodzaj wirusa? Wirusy komputerowe to złośliwe oprogramowanie, które może zainfekować komputer i spowodować różne problemy, takie jak: Czytaj dalej

Marek "Netbe" Lampart Inżynier informatyki Marek Lampart to doświadczony inżynier informatyki z ponad 25-letnim stażem w zawodzie. Specjalizuje się w systemach Windows i Linux, bezpieczeństwie IT, cyberbezpieczeństwie, administracji serwerami oraz diagnostyce i optymalizacji systemów. Na netbe.pl publikuje praktyczne poradniki, analizy i instrukcje krok po kroku, pomagając administratorom, specjalistom IT oraz zaawansowanym użytkownikom rozwiązywać realne problemy techniczne.