Wstrzykiwanie SQL i poleceń
Nauczą się Państwo, jak atakujący tworzą ładunki wstrzykiwane do zapytań, które modyfikują zapytania do baz danych lub polecenia systemu operacyjnego, oraz jak zapobiegają temu zapytania parametryzowane i walidacja danych wejściowych.
Wstrzykiwanie SQL i poleceń to bezpłatna lekcja Cloud & IT Cert Prep na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cloud & IT Cert Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.
Czym jest SQL Injection?
SQL injection (SQLi) występuje, gdy atakujący wprowadza lub „wstrzykuje” złośliwy kod SQL do pola wejściowego, który jest następnie przekazywany do zapytania do bazy danych. Ponieważ aplikacja bezpośrednio łączy dane wprowadzone przez użytkownika z instrukcją SQL, baza danych nie potrafi odróżnić prawidłowych danych od poleceń dostarczonych przez atakującego. SQLi niezmiennie zajmuje jedno z czołowych miejsc wśród najgroźniejszych podatności aplikacji internetowych w zestawieniu OWASP Top 10.
Przykład klasycznego payloadu SQLi
Podatne zapytanie logowania może wyglądać tak: SELECT * FROM users WHERE username='INPUT' AND password='INPUT'. Atakujący, podając ' OR '1'='1 jako nazwę użytkownika, przekształca zapytanie tak, że klauzula WHERE zawsze ma wartość true, całkowicie omijając uwierzytelnianie. Jest to klasyczny przykład wstrzyknięcia opartego na tautologii.
-- Vulnerable query (DO NOT use in production)
SELECT * FROM users
WHERE username = '' OR '1'='1'
AND password = 'anything';
-- Returns ALL rows — auth bypassedRodzaje SQL Injection
Ataki SQL injection występują w kilku formach: In-band SQLi zwraca wyniki bezpośrednio w odpowiedzi HTTP (w wariancie opartym na błędach lub na UNION). Blind SQLi pozwala wnioskować o danych na podstawie odpowiedzi logicznych true/false lub celowych opóźnień czasowych (SLEEP(5)). Out-of-band SQLi wykorzystuje kanały pomocnicze, takie jak zapytania DNS, do eksfiltracji danych, gdy odpowiedzi nie są widoczne.
-- Time-based blind SQLi example
SELECT * FROM users
WHERE id = '1' AND SLEEP(5)--';
-- If response is delayed 5s, injection succeededZapobieganie SQLi: zapytania parametryzowane
Podstawową ochroną przed SQL injection są zapytania parametryzowane (nazywane również prepared statements). W przypadku zapytania parametryzowanego struktura SQL jest najpierw kompilowana, a dane wejściowe użytkownika są przekazywane jako osobny parametr — nie mogą więc zmienić struktury zapytania. To podejście jest niezależne od języka i znacznie bardziej niezawodne niż samo oczyszczanie danych wejściowych.
# Python example — parameterized query (safe)
import sqlite3
conn = sqlite3.connect('app.db')
cursor = conn.cursor()
username = 'admin'
password = 'secret'
cursor.execute(
'SELECT * FROM users WHERE username=? AND password=?',
(username, password) # parameters, never concatenated
)Walidacja danych wejściowych jako defense in depth
Chociaż zapytania parametryzowane stanowią podstawową ochronę, walidacja danych wejściowych zapewnia ważną warstwę dodatkową. Walidacja allowlist dopuszcza wyłącznie oczekiwane znaki (np. tylko alfanumeryczne w polu nazwy użytkownika) i odrzuca wszystkie pozostałe. Walidacja denylist blokuje znane szkodliwe znaki, jednak atakujący często kodują lub zaciemniają payloady, aby ominąć listy blokad — dlatego allowlisty są znacznie skuteczniejsze.
Czym jest Command Injection?
Command injection (OS command injection) występuje, gdy aplikacja przekazuje nieoczyszczone dane wejściowe użytkownika do powłoki systemowej. W przeciwieństwie do SQL injection, które atakuje bazy danych, command injection atakuje sam system operacyjny — umożliwiając atakującym uruchamianie dowolnych poleceń z uprawnieniami procesu serwera WWW. Podatność ta ma poziom krytyczny i często prowadzi do pełnego przejęcia systemu.
Przykład Command Injection
Aplikacja internetowa wykonująca ping adresu IP podanego przez użytkownika może używać polecenia: ping -c 1 INPUT. Jeśli atakujący poda 8.8.8.8; cat /etc/passwd, powłoka zinterpretuje ; jako separator poleceń i uruchomi oba polecenia. Do typowych operatorów używanych podczas wstrzykiwania należą ;, &&, ||, | oraz podstawianie poleceń za pomocą backticków.
# Vulnerable Python (subprocess with shell=True)
import subprocess
user_ip = '8.8.8.8; cat /etc/passwd' # attacker input
subprocess.run('ping -c 1 ' + user_ip, shell=True)
# Safe alternative — avoid shell=True, pass args as list
subprocess.run(['ping', '-c', '1', '8.8.8.8'])Zapobieganie Command Injection
Najbezpieczniejszą ochroną przed command injection jest całkowite unikanie wywoływania poleceń systemu operacyjnego na podstawie danych wejściowych użytkownika — należy używać funkcji bibliotecznych, które realizują ten sam cel. Gdy wywołania powłoki są nieuniknione, należy przekazywać argumenty jako listę (nigdy jako połączony ciąg znaków), wyłączyć interpretację powłoki, walidować dane wejściowe za pomocą ścisłej allowlisty oraz uruchamiać procesy przy użyciu konta użytkownika z możliwie najmniejszymi uprawnieniami.
Kontekst OWASP: Injection w zestawieniu Top 10
Zestawienie OWASP Top 10 wymienia Injection (obejmujące wstrzyknięcia SQL, NoSQL, do systemu operacyjnego oraz LDAP) jako jedno z najpoważniejszych zagrożeń dla bezpieczeństwa aplikacji. OWASP zaleca podejście oparte na wielowarstwowej ochronie: stosowanie bezpiecznych interfejsów API, które nie korzystają z interpretera, przeprowadzanie pozytywnej walidacji danych wejściowych po stronie serwera (z użyciem listy dozwolonych wartości), zabezpieczanie znaków specjalnych zgodnie ze składnią danego interpretera oraz używanie mechanizmów SQL, takich jak LIMIT, aby zapobiegać masowemu ujawnianiu danych.
Wykrywanie: WAF i rejestrowanie zdarzeń
Web Application Firewall (WAF) może wykrywać i blokować typowe ładunki wstrzyknięć, analizując żądania HTTP pod kątem wzorców sygnatur. WAF można jednak ominąć za pomocą sztuczek związanych z kodowaniem, a ponadto nie zastępuje on bezpiecznego programowania. Prawidłowe rejestrowanie zdarzeń w aplikacji — obejmujące parametry zapytań, kody odpowiedzi i komunikaty o błędach — umożliwia zespołom ds. bezpieczeństwa identyfikowanie prób wstrzyknięć podczas analizy incydentu.
Rzeczywiste skutki ataków typu Injection
Ataki typu Injection doprowadziły do jednych z największych wycieków danych w historii. W wyniku wycieku danych firmy Equifax z 2017 roku, spowodowanego luką w aplikacji internetowej, ujawniono dane 147 milionów osób. W 2011 roku wstrzyknięcie SQL w sieci Sony PlayStation Network doprowadziło do naruszenia bezpieczeństwa 77 milionów kont. Incydenty te pokazują, że luki typu Injection mogą mieć skrajnie poważne skutki biznesowe: udane wstrzyknięcie prowadzi do kradzieży danych, kar regulacyjnych, utraty reputacji i odpowiedzialności prawnej.
Szybki test
Sprawdź swoją znajomość zagadnień z CompTIA Security+ (SY0-701) omówionych w tej lekcji.
Podsumowanie lekcji
W tej lekcji dowiedział się Pan / dowiedziała się Pani, że: wstrzyknięcie SQL wykorzystuje niesprawdzone dane wejściowe dołączane do zapytań do bazy danych, wstrzyknięcie poleceń przekazuje złośliwe dane do powłoki systemu operacyjnego za pomocą operatorów takich jak ; i |, a zapytania parametryzowane oraz unikanie shell=True stanowią podstawowe zabezpieczenia. Następnie omówimy ataki Cross-Site Scripting (XSS) i CSRF.
Często zadawane pytania
Czy lekcja „Wstrzykiwanie SQL i poleceń” jest bezpłatna?
Tak — pełny tekst „Wstrzykiwanie SQL i poleceń” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cloud & IT Cert Prep, przejdź na CoddyKit PRO. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.
Co nauczysz się w „Wstrzykiwanie SQL i poleceń”?
Nauczą się Państwo, jak atakujący tworzą ładunki wstrzykiwane do zapytań, które modyfikują zapytania do baz danych lub polecenia systemu operacyjnego, oraz jak zapobiegają temu zapytania parametryzow… Ćwiczysz Cloud & IT Cert Prep z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Cloud & IT Cert Prep?
Nie wymagamy żadnego doświadczenia. Cloud & IT Cert Prep w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Wstrzykiwanie SQL i poleceń”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Cloud & IT Cert Prep?
Tak. Każda lekcja Cloud & IT Cert Prep zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Wstrzykiwanie SQL i poleceń
- Cross-Site Scripting (XSS) i CSRF
- Niesprawne uwierzytelnianie i niebezpieczna deserializacja
- Bezpieczny cykl wytwarzania oprogramowania, SAST i DAST