Az SQL injection egy veszélyes biztonsági sebezhetőség, amely lehetővé teszi a támadók számára, hogy rosszindulatú SQL utasításokat futtassanak egy adatbázis-vezérelt alkalmazásban. Íme a legfontosabb tudnivalók erről a támadási módszerről:
- A támadó speciálisan kialakított adatokat ad meg egy alkalmazás beviteli mezőjében (pl. bejelentkezési űrlap, keresőmező).
- Ezek az adatok úgy vannak megformálva, hogy módosítsák vagy kiegészítsék az eredeti SQL lekérdezést.
- Ha az alkalmazás nem megfelelően kezeli a felhasználói bevitelt, a rosszindulatú kód végrehajtódik az adatbázison.
Az SQL injection támadások lehetővé tehetik a támadók számára, hogy:
- Hozzáférjenek érzékeny adatokhoz
- Módosítsák vagy töröljék az adatbázis tartalmát
- Adminisztrátori jogosultságokat szerezzenek
- Teljes hozzáférést nyerjenek az adatbázisszerverhez
- Prepared statement használata paraméterezett lekérdezésekkel
- Megfelelően kialakított tárolt eljárások alkalmazása
- Bemeneti adatok szigorú ellenőrzése és szűrése
- Az alkalmazás és az adatbázis-felhasználó jogosultságainak minimalizálása
Bővebben a prepared statement-ről: [[../PHP haladó/Mi a prepared statement és miért fontos használni]]
Az SQL injection elleni védekezés kulcsfontosságú a webalkalmazások biztonságának megőrzésében. A fejlesztőknek mindig ügyelniük kell arra, hogy megfelelően kezeljék a felhasználói bevitelt, és alkalmazzák a bevált biztonsági gyakorlatokat az adatbázis-lekérdezések során.
Egy sikeres SQL-injekció a következőképpen működik:
-
Sebezhető pont azonosítása: A támadó olyan beviteli mezőket keres az alkalmazásban, amelyek nem megfelelően kezelik a felhasználói inputot. Ezek lehetnek bejelentkezési űrlapok, keresőmezők vagy URL-paraméterek.
-
Rosszindulatú SQL-kód készítése: A támadó olyan SQL-utasítást készít, amely módosítja az eredeti lekérdezést. Például egy bejelentkezési űrlapnál:
Eredeti lekérdezés:
SELECT * FROM users WHERE username='$username' AND password='$password'
Támadó által módosított lekérdezés:
SELECT * FROM users WHERE username='admin'--' AND password='bármi'
Itt a
--
kommentárként működik, így a jelszó ellenőrzése kimarad. -
Biztonsági intézkedések megkerülése: A támadó olyan technikákat alkalmaz, mint a string összefűzés vagy SQL-szintaxis használata kommentárok létrehozására, hogy megkerülje az alkalmazás biztonsági ellenőrzéseit.
-
Rosszindulatú lekérdezés végrehajtása: Az alkalmazás végrehajtja a módosított SQL-lekérdezést, amely tartalmazza a támadó által beszúrt kódot.
-
Adatok kinyerése vagy manipulálása: A sikeres támadás eredményeként a támadó:
- Hozzáférhet érzékeny adatokhoz
- Módosíthatja vagy törölheti az adatbázis tartalmát
- Adminisztrátori jogosultságokat szerezhet
- Teljes hozzáférést nyerhet az adatbázisszerverhez
Az SQL-injekció felfedezése egy webalkalmazásban több módszerrel is lehetséges. Íme néhány hatékony technika:
Szisztematikus beviteli tesztek:
- Egyszerű karakterek, mint az aposztróf (') beillesztése és a hibaüzenetek figyelése.
- SQL-specifikus szintaxis használata, amely az eredeti értéket és egy módosított értéket ad vissza.
- Logikai feltételek (pl. OR 1=1, OR 1=2) tesztelése és a válaszok eltéréseinek vizsgálata.
- Időkésleltetést okozó lekérdezések (pl. SLEEP() függvény) használata.
Különböző részek tesztelése:
- WHERE záradékok vizsgálata SELECT utasításokban.
- UPDATE utasítások frissített értékeinek és WHERE záradékainak ellenőrzése.
- INSERT utasítások beszúrt értékeinek vizsgálata.
- SELECT utasítások tábla- és oszlopneveinek tesztelése.
- ORDER BY záradékok ellenőrzése SELECT utasításokban.
Ilyen eszközök például:
- SQLMap
- Burp Scanner
- OWASP ZAP
- Valós idejű adatbázis-tevékenység figyelése.
- Szokatlan viselkedések és anomáliák azonosítása.
- HTTP-forgalom elemzése SQL-töredékek után kutatva.
- Adatbázis-hibák monitorozása.
A WAF-ok képesek szűrni és blokkolni a gyanús SQL-lekérdezéseket tartalmazó HTTP-kéréseket.