SQL Injection Tutorial: Hogyan tanuljunk példával
Mi az SQL-injekció?
Az SQL-injekció olyan támadás, amely megmérgezi a dinamikus SQL-utasításokat, hogy megjegyzéseket fűzzön az utasítás bizonyos részeihez, vagy olyan feltételt fűz hozzá, amely mindig igaz. A rosszul megtervezett webalkalmazások tervezési hibáit használja ki, hogy az SQL utasításokat kihasználva rosszindulatú SQL kódokat hajtson végre.
Az adatok az információs rendszerek egyik legfontosabb összetevője. A szervezet adatbázis-alapú webalkalmazásokat használ az ügyfelek adatainak lekérésére. SQL a Structured Query Language rövidítése. Az adatbázisban lévő adatok lekérésére és manipulálására szolgál.
Hogyan működik az SQL Injection Attack?
Az SQL-befecskendezéssel végrehajtható támadások típusai az adatbázis-motor 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 olyan utasítás, amely futás közben jön létre a webes űrlapból vagy URI lekérdezési karakterláncból származó jelszó paraméterek használatával.
SQL-befecskendezési példa
Tekintsünk egy egyszerű webalkalmazást 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 jelszót, majd elküldi őket a PHP index.php nevű fájl.
- Lehetősége van arra, hogy a bejelentkezési munkamenetet cookie-ban tárolja. Ezt a Remember_me jelölőnégyzetből vezettük le. Postázási módszert használ az adatok beküldésére. Ez azt jelenti, hogy az értékek nem jelennek meg az URL-ben.
Tegyük fel, hogy a felhasználói azonosító ellenőrzésére szolgáló háttérprogram utasítása a következő
SELECT * FROM users WHERE email = $_POST['email'] AND password = md5($_POST['password']);
ITT,
- A fenti állítás a. értékeit használja
$_POST[]
közvetlenül, fertőtlenítés nélkül. - A jelszót MD5 algoritmus titkosítja.
Az SQL injekciós támadást az sqlfiddle használatával mutatjuk be. Nyissa meg az URL-t http://sqlfiddle.com/ a böngészőjében. A következő ablakot kapja.
Megjegyzés: meg kell írnia az SQL utasításokat
Step 1) Írja 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 felépítése elemre
Step 3) Írja be ezt a kódot a jobb oldali ablaktáblába
select * from users;
Step 4) Kattintson az SQL futtatása elemre. A következő eredményt fogja látni
Tegyük fel, hogy a felhasználói kellékek admin@admin.sys és a 1234 mint a jelszó. Az adatbázissal szemben 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 megjegyzésével és egy olyan feltétel hozzáfűzésével, amely mindig igaz. Tegyük fel, hogy egy támadó a következő bevitelt 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 befejezi a karakterlánc idézőjelét
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 SQL FiddleFuttassa 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 csak demonstrációs célból sebezhető az SQL Injection támadásokkal szemben. 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 elkerülése érdekében ehelyett kihasználhatjuk a jelszómezőt. Az alábbi diagram bemutatja azokat a lépéseket, amelyeket követnie kell
Tegyük fel, hogy egy támadó megadja a következő bemenetet
- 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 a műszerfalra irányítja
A generált 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 diagram szemlélteti, hogy az utasítás létrejött.
ITT,
- Az állítás intelligensen feltételezi, hogy md5 titkosítást használnak
- Befejezi az idézőjel és a záró zárójelet
- Feltételt fűz az állításhoz, amely mindig igaz
Általánosságban elmondható, hogy egy sikeres SQL-injekciós támadás számos különböző technikát kísérel meg, például a fent bemutatottakat, hogy sikeres támadást hajtson végre.
Egyéb SQL-injekciós támadástípusok
Az SQL-injekciók több kárt okozhatnak, mint a bejelentkezési algoritmusok átadásával. Egyes támadások közé tartozik
- 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 képet ad arról, hogy mi az SQL Injection
Automatizálási eszközök SQL-befecskendezéshez
A fenti példában kézi támadási technikákat alkalmaztunk az SQL területén szerzett hatalmas ismereteink alapján. Vannak olyan automatizált eszközök, amelyek segítségével hatékonyabban és a lehető legrövidebb időn belül hajthatja végre a támadásokat. Ezek az eszközök magukban foglalják
- SQLMap – http://sqlmap.org/
- JSQL injekció – https://tools.kali.org/vulnerability-analysis/jsql
Hogyan lehet megelőzni az SQL-injekciós támadásokat
Egy szervezet a következő házirendet alkalmazhatja, hogy megvédje magát az SQL Injection támadásokkal szemben.
- A felhasználói bevitelben soha nem szabad megbízni – A dinamikus SQL utasításokban való felhasználás előtt mindig meg kell tisztítani.
- Tárolt eljárások – ezek beágyazhatják az SQL utasításokat, és minden bemenetet paraméterként kezelhetnek.
- Elkészített nyilatkozatok – előkészített utasításokat úgy, hogy először létrehozza az SQL utasítást, majd az összes elküldött felhasználói adatot paraméterként kezeli. Ennek nincs hatása az SQL utasítás szintaxisára.
- Reguláris kifejezések – ezek felhasználhatók a potenciális káros kódok é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 jogok – használt fiókokhoz csak a szükséges hozzáférési jogokat kell biztosítani csatlakozni az adatbázishoz. Ez csökkentheti az SQL-utasítások teljesítményét a kiszolgálón.
- Hibaüzenetek – ezek nem fedhetnek fel érzékeny információkat és azt, hogy pontosan hol történt a hiba. Egyszerű egyéni hibaüzenetek, például „Sajnáljuk, technikai hibákat tapasztalunk. Felvették a kapcsolatot a műszaki csapattal. Kérjük, próbálja újra később” használható 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 fogjuk használni a webhelyek sebezhetőségeinek keresésére.
Megjegyzés: a te vírusirtó program természeténél fogva megjelölheti. Hozzá kell adnia a kizárások listájához, vagy szüneteltetnie kell a víruskereső szoftvert.
Az alábbi kép Havij főablakát mutatja
A fenti eszköz használható egy webhely/alkalmazás sebezhetőségének felmérésére.
Összegzésként
- Az SQL Injection egy támadástípus, amely kihasználja a rossz SQL utasításokat
- Az SQL-befecskendezés használható bejelentkezési algoritmusok megkerülésére, adatok lekérésére, beszúrására, frissítésére és törlésére.
- Az SQL injekciós eszközök közé tartozik az SQLMap, SQLPing és SQLSmack stb.
- Az SQL-utasítások írásakor alkalmazott jó biztonsági politika segíthet csökkenteni az SQL-befecskendezési támadásokat.