💉 SQL Injection – klasyczny atak, który wciąż działa
SQL Injection (SQLi) to technika ataku, która polega na wstrzyknięciu złośliwych zapytań SQL do aplikacji internetowej w celu manipulowania bazą danych. Mimo że atak jest znany od dekad, w 2025 roku nadal pojawia się w wielu aplikacjach, zwłaszcza źle zabezpieczonych systemach CMS, e-commerce czy starszych systemach wewnętrznych.
📌 Na czym polega SQL Injection?
Podatność występuje, gdy dane wejściowe użytkownika są bezpośrednio wstawiane do zapytań SQL bez odpowiedniej walidacji czy sanitizacji.
Przykład kodu w PHP:
$user = $_GET['user'];
$query = "SELECT * FROM users WHERE username = '$user'";
Jeśli użytkownik poda:
admin' --
zapytanie SQL będzie wyglądało tak:
SELECT * FROM users WHERE username = 'admin' -- '
-- oznacza komentarz w SQL, więc cała reszta zapytania jest ignorowana.
🧨 Co można osiągnąć przez SQL Injection?
- 🔍 Odczyt danych (hasła, e-maile, dane klientów)
- ✏️ Modyfikacja danych (np. zmiana hasła admina)
- 🧼 Usuwanie danych
- 🛠 Dodawanie własnych kont
- 🕵️ Eksfiltracja struktury bazy
- 📡 Remote Command Execution (w niektórych przypadkach)

🔥 Typy SQL Injection
| Typ | Opis |
|---|---|
| Classic (In-band) | Widoczna odpowiedź z bazy, możliwa szybka eksploitacja |
| Blind | Brak bezpośredniego efektu – wymaga testów logicznych (np. warunków IF) |
| Time-based Blind | Weryfikacja na podstawie opóźnień (SLEEP(5)) |
| Out-of-band | Dane przesyłane do serwera atakującego (np. via DNS) |
| Second-order | Payload przechowywany w bazie i aktywowany w innym kontekście |
🧪 Przykłady payloadów
' OR 1=1 --
' UNION SELECT null, version(), user() --
admin' AND SLEEP(5) --
🔧 Narzędzia do automatycznych ataków
- sqlmap – najpopularniejsze narzędzie do wykrywania i eksploitacji SQLi
- Havij – graficzne narzędzie do ataku na bazy SQL
- Burp Suite – manualne testowanie aplikacji, repeater, intruder
- SQLNinja, jSQL, BBQSQL – alternatywne frameworki
🔐 Jak się bronić?
✅ Dobre praktyki programistyczne:
- Używaj zapytań parametryzowanych / prepared statements
- np.
PDO,mysqlizbind_param()
- np.
- Waliduj dane wejściowe (np. czy to na pewno ID?)
- Unikaj dynamicznych zapytań SQL
- Escapuj znaki specjalne (jako dodatkowy środek, nie podstawowy)
🔐 Zabezpieczenia systemowe:
- Ogranicz prawa użytkownika bazy (np. brak
DROP,UPDATE) - Loguj nietypowe zapytania
- Korzystaj z WAF (Web Application Firewall)
- Regularnie testuj aplikacje (pentesty, SAST/DAST)
🧠 Przykład ataku krok po kroku
- Użytkownik odkrywa parametr
idw URL. - Próbuje:
?id=1' - Otrzymuje błąd SQL → znak podatności
- Używa
sqlmap:sqlmap -u "http://example.com/page.php?id=1" --dump - Narzędzie automatycznie pobiera dane użytkowników i hasła
📚 Ciekawostki i przypadki z życia
- 2008 – Heartland Payment Systems – wyciek 130 milionów rekordów przez SQLi
- 2012 – LinkedIn – SQLi wykorzystane w częściowym ataku na dane użytkowników
- 2022 – Indie leaki – SQL Injection w aplikacji rządowej ujawnia dane obywateli
🧩 Detekcja i forensics
- Analiza logów aplikacji i serwera SQL
- Wykrycie niestandardowych zapytań typu
UNION,SLEEP - Wzrost zapytań z nietypowymi parametrami
- Dziwne błędy w interfejsie aplikacji (SQL syntax errors)
🚧 SQL Injection w 2025 – nadal aktualne zagrożenie
Pomimo dziesiątek lat istnienia tej podatności, wciąż jest jedną z najczęściej wykorzystywanych przez atakujących. Szczególnie niebezpieczna w starszych aplikacjach, panelach admina, słabo chronionych API i systemach wewnętrznych.
Zrozumienie mechanizmu ataku oraz wdrożenie dobrych praktyk w kodzie to podstawa odporności na SQL Injection.





