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.

  • ???? Meghatározás: Az SQL-befecskendezés rosszindulatú SQL-kódot illeszt be egy lekérdezésbe egy érvénytelen beviteli mezőn keresztül.
  • 🔓 Hatás: Egy sikeres támadás megkerülheti a bejelentkezéseket, és olvashatja, módosíthatja vagy törölheti a rekordokat.
  • 🧪 Példa: Egy mindig igaz feltétel plusz egy megjegyzés a bejelentkezési ellenőrzést megkerülővé alakítja.
  • 🇧🇷 Eszközök: Az SQLMap és a jSQL automatizálja az injektálható paraméterek észlelését és kihasználását.
  • 🛡️ Megelőzés: A paraméteres lekérdezések, a bemeneti validáció és a legkevésbé jogosultsági szintű fiókok áthidalják a hiányt.
  • 🤖 Modern élvonal: A mesterséges intelligencia által vezérelt szkennerek és tűzfalak olyan injektálási mintákat jelölnek meg, amelyeket a fix aláírások nem észlelnek.

SQL injekciós oktatóanyag

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.

Ábra arról, hogyan manipulál egy SQL-befecskendezés egy dinamikus adatbázis-lekérdezést

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.

Üres SQL Fiddle ablak készen áll a sémára és a lekérdezésre

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.

SQL Fiddle az eredmény egyetlen felhasználói rekordot mutat vissza

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 = 1 A 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.

SQL Fiddle a rekord visszaadása a befecskendezett feltétel lefutása után

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.

A bejelentkezési űrlap jelszómezőjének beillesztésének lépései folyamatábrája

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 — ]

Bejelentkezési űrlap a jelszó mezőbe beírt injekciós karakterlánccal

  • 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.

A befecskendezett SQL utasítás generálásának lebontása

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:

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 Havij SQL injektáló eszköz főablaka

A fenti eszköz segítségével felmérhető egy weboldal vagy alkalmazás sebezhetősége.

GYIK

Csak a webhely tulajdonosának írásos engedélyével. Egy olyan alkalmazás tesztelése, amelynek nem a tulajdonosa, illegális olyan törvények értelmében, mint az Egyesült Államok Számítógépes Csalás és Visszaélés Elleni Törvénye. A hibajavítási hatókör határozza meg, hogy mi engedélyezett.

Igen. Az OWASP Top 10:2025-ben az injektálás az A05-ös besorolást kapja, és a tesztelés továbbra is szinte minden alkalmazásban injekciót talál. Az évi több ezer új SQL injektálási CVE-vel továbbra is vezető webes kockázatnak számít.

Az MD5 egy gyors hash, nem titkosítás, és a támadók gyorsan feltörhetik szivárványtáblákkal és GPU-kkal. Jelszavakhoz használjon lassú, sózott algoritmust, például a bcrypt-et vagy az Argon2-t.

Bármely dinamikusan felépített SQL-en keresztül lekérdezett adatbázis — MySQL, PostgreSQL, Microsoft SQL Server, Oracleés SQLiteA hiba abban rejlik, ahogyan az alkalmazás a felhasználói bemenetet lekérdezésekké fűzi össze, nem pedig az adatbázismotorban.

A mesterséges intelligenciával működő tűzfalak és szkennerek megtanulják a normál forgalmi mintákat, majd valós időben jelzik az olyan rendellenes bemeneteket, mint az injektált feltételek vagy megjegyzések. A gépi tanulási modellek kiszűrik a zavaros adatforgalmat, amelyet a fix aláírások nem észlelnek.

A mesterséges intelligencia asszisztensei, mint például GitHub másodpilóta Javasolhatnak paraméteres lekérdezéseket és bemeneti validációt, de nem biztonságos mintákat is reprodukálnak. Minden javaslatot vázlatként kell kezelni, és párosítani kell egy biztonsági elemzéssel és felülvizsgálattal.

Az SQL-befecskendezés az adatbázist célozza meg SQL-kódok szerveroldali lekérdezésekbe történő befecskendezésével. A cross-site scripting (cross-site szkriptelés) más felhasználókat céloz meg a böngészőjükben futó szkriptek befecskendezésével. Az egyik adatot tesz elérhetővé, a másik pedig munkameneteket lop el.

Az ORM (objektum-relációs leképező) kódobjektumokból épít lekérdezéseket, alapértelmezés szerint paraméterezéssel, megakadályozva a legtöbb SQL injektálást. Nem bolondbiztos – a nyers lekérdezések és a nem biztonságos metódusok továbbra is szivároghatnak, így az érvényesítés továbbra is fontos.

Foglald össze ezt a bejegyzést a következőképpen: