Biztonság

Blind SQL Injection Techniques Tutorial

Blind SQL Injection Techniques Tutorial

Mi az SQL Injection?

Az SQL Injection egy olyan típusú adatbázis-támadás, amelyben a támadó megpróbál információkat eltulajdonítani egy webalkalmazás adatbázisából. Ez akár távoli kódfuttatást is eredményezhet a webalkalmazás környezetétől és az adatbázis verziójától függően.

Az SQL injekció a felhasználói bemenetek gyenge fertőtlenítése miatt történik. Ha valamilyen kódolási nyelven (PHP, ASP.NET) és közvetlenül a kiszolgáló adatbázisába továbbítja, anélkül, hogy a bemeneten bármilyen szűrőt alkalmazna, ez SQL Injection sebezhetőséget eredményezhet.

Például a következő PHP-kód sérülékeny az SQL Injection támadással szemben, mert közvetlenül továbbítja a felhasználói bemenetet az adatbázisba. Az Attacker saját rosszindulatú adatbázis-lekérdezéseket készíthet, hogy adatokat nyerjen az adatbázisból.

// A userinput az id változóban van tárolva
$ id = $ _GET ['id'];
// A felhasználói bevitelt közvetlenül az adatbázisban hajtják végre
$ getid = "SELECT first_name, last_name FROM users WHERE user_id = '$ id'";
// Hiba vagy siker esetén az eredményeket visszaküldik a felhasználónak
$ result = mysql_query ($ getid) vagy meghal ('
" . mysql_error () . "
');
$ num = mysql_numrows ($ eredmény);

Másrészt egy biztonságos kód példát adnak az ilyen kódra, amely kölcsönhatásba lép az adatbázissal. Felhasználói bevitelt igényel és kiszűri belőle az esetleges rosszindulatú karaktereket, majd továbbítja az adatbázisba.

$ id = $ _GET ['id'];
$ id = csíkok ($ id);
$ id = mysql_real_escape_string ($ id);

Normál vs vak SQL injekció

Normál SQL injekció

Normál SQL injekció esetén, ha a támadó egyetlen idézetet (') próbál beírni bemenetként, amikor ezt az egyetlen idézetet végrehajtják az adatbázisban, az adatbázis hibával válaszol. A hibát a támadó böngészője nyomtatja ki.

A hibáért felelős kód:

// ha az adatbázis hibával válaszol, akkor a „or die ()” függvény végrehajtásra kerül
hogy kinyomtassa a hibát
$ result = mysql_query ($ getid) vagy meghal ('
" . mysql_error () . "
');

A Normal SQL Injection alkalmazásban a támadó láthatja a hiba eredményeit, és könnyen azonosítható és kihasználható.

Vak SQL injekció

Blind SQL Injection esetén, ha rosszindulatú lekérdezést, például egyetlen idézetet hajtanak végre, az adatbázis hibája nem jelenik meg a támadó böngészőjében, vagy nagyon általános módon jelenik meg, amelyet a támadó nem tud könnyen azonosítani és kihasználni.

Az ezért felelős háttérkód az alábbiakban található

$ eredmény = mysql_query ($ getid); // Eltávolította a 'or die' parancsot a mysql hibák elnyomásához

A vak SQL injekcióban a támadó nem látja a teljes eredményt, ezért ezt a típusú SQLit nehéz azonosítani és kihasználni, de ugyanolyan kockázati szinttel rendelkezik, mint a normál SQLi esetében.

A vak SQL injekció észlelésének technikái

Míg a normál SQL injekció detektálható egyetlen idézet (') elküldésével bemenetként és a kimeneti hiba megvizsgálásával, a vak SQL injekció nem észlelhető ezzel a technikával, mert nem mutat semmilyen SQL hibát. A Blind SQL injekció észlelésére számos módszer létezik, amelyek közül néhányat a következők szerint adunk meg

IGAZ és HAMIS alapú észlelés

A MySQL-t tartalmazó adatbázisok egyik jellemzője a True és False utasítások eltérő viselkedése. Még akkor is, ha az adatbázis nem mutat hibát, dönthetünk a True és False utasítások használatáról. Vegye figyelembe a következő forgatókönyvet,

A következő oldal sérülékeny a Blind SQL injekcióval szemben, így igaz állítással megjeleníti az adatbázis összes bejegyzését

1 'vagy 1 = 1 #

Ha hamis lekérdezést ad meg bemenetként, nem jelenik meg adat.

1 'vagy 1 = 2 #

Még a weboldal sem mutat hibát, a két oldal közötti különbség azt jelzi, hogy lekérdezéseinket sikeresen végrehajtják az adatbázisban.

IDŐ alapú észlelés

Van egy funkció az adatbázisokban, beleértve a MySQL-t, az MS-SQL-et és másokat a késések miatt. Használhatjuk a SLEEP () függvényt lekérdezésünkben, ha az adatbázis válasza lassú, ez azt jelenti, hogy a lekérdezésünk sikeresen végrehajtásra kerül, és a weboldal sérülékeny a Blind SQL Injection számára.

1 'ÉS alvás (15) #

Van még egy időigényes „BENCHMARK” funkció, amely az adatbázis válaszának késleltetésére használható

1 'ÉS BENCHMARK (10000000, SHA1 (1337)) #

A fenti sor 10000000-szer hajtja végre az SHA1 () függvényt az adatbázisban, ami jelentős késleltetést eredményez a válaszban.

Időalapú vak SQL injekció más adatbázisokban

MS SQL: ID = 1; várakozási késés '0: 0: 10'-

ORACLE SQL: ÉS [RANDNUM] = DBMS_PIPE.RECEIVE_MESSAGE ('[RANDSTR]', [SLEEPTIME])

PostgreSQL: ÉS [RANDNUM] = (KIVÁLASZT [RANDNUM] A PG_SLEEP-BŐL ([SLEEPTIME]))

SQLite: ÉS [RANDNUM] = LIKE ('ABCDEFG', FELSŐ (HEX (RANDOMBLOB ([SLEEPTIME] 00000000/2))))

Adatbázis-információk kinyerése

Az adatbázis kibontásának első lépése az oszlopok számának meghatározása az adatbázisban. Ezután próbáljon meg sebezhető oszlopokat találni a további adatok kinyerése érdekében.

A vak SQL Injection másként viselkedik a különböző oszlopszámokkal a „rendezés” lekérdezésben.

1 'megrendelés 1 # által

A fenti állítás igaz, mert az adatbázisban mindig legalább 1 oszlop létezik. Most próbáljon meg nagyon nagy számmal.

1 'megrendelés 10000-ig #

Az adatbázis válasza eltér az előzőtől. Most próbálkozzon 2 oszloppal.

Az utasítás működött, ez azt jelenti, hogy az adatbázisnak 2 vagy több oszlopa van. Most próbáljon meg 3 oszloppal.

1 'megrendelés 3 # által

Az adatbázis nem küldött választ, ami azt jelenti, hogy az adatbázisnak csak 2 oszlopa van. Most megpróbáljuk kidobni a táblázatok listáját az adatbázisban, ehhez a következő lekérdezést fogjuk használni

Az 1 'szakszervezet mindegyike válassza ki az 1-et, a csoporthoz tartozó macskát (táblanév) az információséma közül.
táblák, ahol table_schema = adatbázis () #

A „vendégkönyv és felhasználók” háttér-adatbázisban két táblázat található. A „felhasználók” táblázat felhasználónéveket és jelszavakat tartalmazhat. Az oszlopnevek kibontásához a táblázatból szúrja be a következő lekérdezést.

Az 1 'szakszervezet mindegyike válassza ki az 1-et, group_concat (oszlop_név) az information_séma közül.
oszlopok ahol table_schema = adatbázis () #

Most kivontuk az oszlopneveket, ide tartoznak a felhasználói és a jelszó oszlopok is. Ezek az oszlopok az ügyfelek felhasználónevét és jelszavát tárolják.

Most megpróbáljuk kinyerni az adatokat a következő lekérdezés segítségével

1 'unió mind kiválaszthatja az 1-et, group_concat (felhasználó, jelszó) a felhasználóktól #

És így tudja kihasználni a Blind SQL Injection programot hibák nélkül. A kimeneti jelszavak legtöbbször kivonatolásra kerülnek, amelyeket dekódolni lehet olyan eszközök segítségével, mint a John The Ripper vagy a Hashcat.

Következtetés:

A vak SQL Injection az SQLi típusa, amely nem mutat adatbázis hibákat, vagy nagyon általános üzenettel válaszol. Ezért nagyon nehéz azonosítani a Blind SQL Injection sebezhetőségét egy weboldalon. Miután észlelte, manuálisan vagy automatizált folyamatokkal egyszerűen kihasználhatja az SQLmap használatával.

Az X-Mouse Button Control segítségével az egér gombjait másképp alakíthatja át a különböző szoftvereknél
Lehet, hogy szüksége van egy eszközre, amely megváltoztathatja az egér vezérlését minden használt alkalmazással. Ebben az esetben kipróbálhatja az úgy...
Microsoft Sculpt Touch vezeték nélküli egér áttekintés
Nemrég olvastam a Microsoft Sculpt Touch vezeték nélküli egér és úgy döntött, hogy megveszi. Egy ideig használat után úgy döntöttem, hogy megosztom ve...
AppyMouse képernyős Trackpad és egérmutató a Windows táblagépekhez
A táblagép-felhasználók gyakran hiányolják az egérmutatót, különösen akkor, ha szokták használni a laptopokat. Az érintőképernyős okostelefonok és táb...