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.

SQL Injection

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

Az SQL Injection működik

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

Az SQL Injection működik

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

Az SQL Injection működik

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

SQL Inject egy webalkalmazás

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

SQL Inject egy webalkalmazás

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

SQL Inject egy webalkalmazás

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

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

Használja a Havij-t SQL-injekcióhoz

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.