SQL Injection Tutorial: Tanuljon példával
⚡ Okos összefoglaló
Az SQL-befecskendezés egy olyan támadás, amely megmérgezi a dinamikus SQL-utasításokat a hitelesítés megkerülése vagy az adatok felfedése érdekében, kihasználva azokat a webes alkalmazásokat, amelyek nem ellenőrzött felhasználói bevitelből építenek lekérdezéseket. Ez az oldal bemutatja, hogyan működik a támadás, és hogyan lehet megelőzni.

Mi az SQL-injekció?
Az SQL-befecskendezés egy olyan támadás, amely megmérgezi a dinamikus SQL-utasításokat, hogy kikommentelje az utasítás bizonyos részeit, vagy hozzáfűzzön egy mindig igaz feltételt. A rosszul megtervezett webalkalmazások tervezési hibáit kihasználva SQL-utasításokat használ ki rosszindulatú SQL-kód végrehajtására.
Az adat az információs rendszerek egyik legfontosabb összetevője. Az adatbázis-alapú webes alkalmazásokat a szervezetek arra használják, hogy adatokat szerezzenek be az ügyfelektől. Az SQL a ... rövidítése. Strukturált lekérdezési nyelvAdatbázisban lévő adatok lekérésére és kezelésére szolgál.
Hogyan működik egy SQL injekciós támadás?
Az SQL-befecskendezés segítségével végrehajtható támadások típusai az adatbázismotor típusától függően változnak. A támadás dinamikus SQL-utasításokon működik. A dinamikus utasítás egy olyan utasítás, amelyet futási időben generálnak egy webes űrlapból vagy URI lekérdezési karakterláncból átadott paraméterek segítségével.
SQL-befecskendezési példa
Tekintsünk egy egyszerű webes alkalmazást egy bejelentkezési űrlappal. A HTML űrlap kódja alább látható.
<form action=‘index.php’ method="post"> <input type="email" name="email" required="required"/> <input type="password" name="password"/> <input type="checkbox" name="remember_me" value="Remember me"/> <input type="submit" value="Submit"/> </form>
ITT,
- A fenti űrlap elfogadja az e-mail címet és a jelszót, majd elküldi azokat egy PHP index.php nevű fájl.
- Lehetősége van a bejelentkezési munkamenet sütiben történő tárolására. Ezt a remember_me jelölőnégyzetből következtettük ki. A post metódust használja az adatok beküldéséhez. Ez azt jelenti, hogy az értékek nem jelennek meg a... URL.
Tegyük fel, hogy a felhasználói azonosító ellenőrzésére szolgáló háttérbeli utasítás a következő.
SELECT * FROM users WHERE email = $_POST['email'] AND password = md5($_POST['password']);
ITT,
- A fenti utasítás közvetlenül a $_POST[] tömb értékeit használja, anélkül, hogy megtisztítaná azokat.
- A jelszót az MD5 algoritmussal hashelik.
Egy SQL injekciós támadást fogunk szemléltetni a következőképpen: SQL Fiddle. Nyissa meg a URL http://sqlfiddle.com/ a böngészőjében. A következő ablakot kapja.
Megjegyzés: az SQL utasításokat neked kell megírnod.
Step 1) Írd be ezt a kódot a bal oldali ablaktáblába.
CREATE TABLE `users` ( `id` INT NOT NULL AUTO_INCREMENT, `email` VARCHAR(45) NULL, `password` VARCHAR(45) NULL, PRIMARY KEY (`id`)); insert into users (email,password) values ('m@m.com',md5('abc'));
Step 2) Kattintson a Séma létrehozása gombra.
Step 3) Írja be ezt a kódot a jobb oldali ablaktáblába.
select * from users;
Step 4) Kattintson az SQL futtatása gombra. A következő eredményt fogja látni.
Tegyük fel, hogy egy felhasználó megadja az admin@admin.sys címet és az 1234 jelszót. Az adatbázison végrehajtandó utasítás a következő lenne:
SELECT * FROM users WHERE email = 'admin@admin.sys' AND password = md5('1234');
A fenti kód kihasználható a jelszó rész kikommentelésével és egy mindig igaz feltétel hozzáfűzésével. Tegyük fel, hogy egy támadó a következő bemenetet adja meg az e-mail cím mezőben.
xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ]
xxx a jelszóhoz.
A generált dinamikus utasítás a következő lesz.
SELECT * FROM users WHERE email = 'xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ] AND password = md5('1234');
ITT,
- xxx@xxx.xxx egyetlen idézőjellel végződik, amely kiegészíti az idézőjel karakterláncot.
OR 1 = 1A LIMIT 1 egy olyan feltétel, amely mindig igaz, és a visszaadott eredményeket csak egy rekordra korlátozza.- — Az AND … egy SQL megjegyzés, amely kiküszöböli a jelszó részt.
Másolja ki a fenti SQL utasítást, és illessze be a SQL Fiddle Futtassa az SQL szövegmezőt az alábbiak szerint.
Hackelési tevékenység: SQL beszúrása webalkalmazásba
Van egy egyszerű webes alkalmazásunk a címen http://www.techpanda.org/ amely sebezhető az SQL injektálási támadásokkal szemben, kizárólag demonstrációs célokra. A fenti HTML űrlapkód a bejelentkezési oldalról származik. Az alkalmazás alapvető biztonságot nyújt, például az e-mail mező fertőtlenítését. Ez azt jelenti, hogy a fenti kódunk nem használható a bejelentkezés megkerülésére.
Ennek megkerülésére a jelszó mezőt használjuk ki. Az alábbi ábra a követendő lépéseket mutatja.
Tegyük fel, hogy egy támadó a következő bemenetet adja meg.
- 1. lépés: Írja be az xxx@xxx.xxx e-mail címet
- 2. lépés: Írja be a következőt: xxx') VAGY 1 = 1 — ]
- Kattintson a Küldés gombra.
- A rendszer átirányítja Önt az irányítópultra.
A létrehozott SQL utasítás a következő lesz.
SELECT * FROM users WHERE email = 'xxx@xxx.xxx' AND password = md5('xxx') OR 1 = 1 -- ]');
Az alábbi ábra szemlélteti, hogyan generálódik a nyilatkozat.
ITT,
- Az utasítás intelligensen feltételezi az md5 titkosítás használatát.
- Kiegészíti az aposztrófot és a záró szögletes zárójelet.
- Hozzáfűz egy feltételt az állításhoz, amely mindig igaz lesz.
Általánosságban elmondható, hogy egy sikeres támadás több technikát kombinál, mint amilyeneket fentebb bemutattunk.
Egyéb SQL-injekciós támadástípusok
Az SQL injekciók több kárt okozhatnak, mint pusztán a bejelentkezési algoritmusok megkerülése. Néhány a támadások közül:
- Adatok törlése
- Adatok frissítése
- Adatok beszúrása
- Olyan parancsok végrehajtása a kiszolgálón, amelyek képesek letölteni és telepíteni rosszindulatú programokat, például trójaiakat
- Értékes adatok, például hitelkártyaadatok, e-mail-címek és jelszavak exportálása a támadó távoli szerverére
- Felhasználói bejelentkezési adatok lekérése stb.
- SQL-injektálás cookie-k alapján
- Hiba alapú SQL-befecskendezés
- Vak SQL-injekció
A fenti lista nem teljes; csak egy áttekintést ad arról, hogy mire képes az SQL injektálás.
Automatizálási eszközök SQL-befecskendezéshez
A fenti példában manuális támadási technikákat alkalmaztunk, amelyek az SQL-lel kapcsolatos széleskörű ismereteinken alapulnak. Léteznek automatizált eszközök, amelyek segíthetnek a támadások hatékonyabb és a lehető legrövidebb időn belüli végrehajtásában. Ezek az eszközök a következők:
- SQLMap – http://sqlmap.org/
- jSQL injekció – https://www.kali.org/tools/jsql/
Hogyan előzhető meg az SQL injekciós támadás
Egy szervezet a következő házirendet alkalmazhatja, hogy megvédje magát az SQL Injection támadásokkal szemben.
- A felhasználói bevitelnek soha nem szabad megbízni – Dinamikus SQL utasításokban való használat előtt mindig fertőtleníteni kell.
- Tárolt eljárások – ezek magukban foglalhatják az SQL utasításokat, és minden bemenetet paraméterként kezelhetnek.
- Előkészített kimutatások – Az előkészített utasítások úgy működnek, hogy először létrehozzák az SQL utasítást, majd az összes beküldött felhasználói adatot paraméterként kezelik. Ennek nincs hatása az SQL utasítás szintaxisára.
- Rendszeres kifejezések – ezek felhasználhatók potenciálisan káros kód észlelésére és eltávolítására az SQL utasítások végrehajtása előtt.
- Adatbázis-kapcsolat felhasználói hozzáférési jogai – csak a szükséges hozzáférési jogokat szabad megadni a használt fiókoknak csatlakozni az adatbázishoz. Ez csökkentheti az SQL-utasítások teljesítményét a kiszolgálón.
- hibaüzenetek – ezek nem tartalmazhatnak bizalmas információkat, vagy azt, hogy pontosan hol történt a hiba. Egyszerű, egyéni hibaüzenetek, például a „Sajnáljuk, technikai hibákat tapasztalunk. A technikai csapattal felvettük a kapcsolatot. Kérjük, próbálja meg később” használhatók a hibát okozó SQL utasítások megjelenítése helyett.
Hackelési tevékenység: Havij használata SQL-injekcióhoz
Ebben a gyakorlati forgatókönyvben a Havij Advanced SQL Injection programot használjuk egy weboldal sebezhetőségeinek vizsgálatára.
Megjegyzés: Havij egy elavult, karbantartatlan Windows eszköz — A fenti SQLMap a jelenlegi nyílt forráskódú szabvány.
Megjegyzés: a víruskereső programod természetéből adódóan megjelölheti. Add hozzá a kizárási listához, vagy szüneteltetned kell a... vírusirtó program.
Az alábbi kép Havij fő ablakát mutatja.
A fenti eszköz segítségével felmérhető egy weboldal vagy alkalmazás sebezhetősége.








