SQL injection

A bevezetése SQL-kód (angol SQL injection.) - az egyik leggyakoribb módja, hogy csapkod weboldalak és programok, dolgozó adatbázisok alapján bevezetése tetszőleges SQL-kód kérése.







SQL injection, attól függően, hogy milyen típusú adatbázis és bevezetése feltételek révén egy támadó tetszőleges lekérdezést az adatbázisban (például, hogy olvassa el a tartalmát minden asztalra, távolítsa el, változás, vagy add adatok), hogy képes legyen olvasni és / vagy írni a helyi fájlokat és végrehajtani tetszőleges parancsokat a cél kiszolgálón.

SQL végrehajtási típusú támadás lehetséges oka a helytelen feldolgozását használt beviteli adatok SQL-lekérdezés.

Fejlesztő alkalmazásokat és dolgozik adatbázisokkal, tisztában kell lenniük a biztonsági réseket, és hogy ellenintézkedéseket SQL végrehajtás.

SQL injekciós támadás elv

Tegyük szerver szoftver, bemenő paraméter id, arra használja, hogy hozzon létre SQL-lekérdezés. Tekintsük ezt a PHP-script:

Így változik a bemeneti paraméterek hozzáadásával, hogy az SQL nyelvi konstrukciók változást okoz a logika SQL-lekérdezés (ebben a példában, ahelyett, hogy a hírek minden megadott azonosító az adatbázisban tárolt választják ki a hír, hiszen a kifejezés 1 = 1 mindig igaz).

A bevezetés a húr paraméterek

Tegyük szerver szoftver iránti kérelmet kap az adatok visszanyerését a hírekben SEARCH_TEXT opciót, akkor a következő SQL-lekérdezés (paraméterek megszökött idézetek itt):

De bevezetésével paraméter keresett_szöveg idézőjelet (amelyet a lekérdezés), akkor gyökeresen megváltoztatja a viselkedését az SQL-lekérdezést. Például, átadva a paraméter értéke keresett_szöveg) + és + (news_id_author = '1 hívjuk kérést végrehajtani:

Az Unió

SQL nyelv lehetővé teszi, hogy összekapcsolják az eredmények több lekérdezés segítségével UNION operátor. Ez ad a támadók jogosulatlan hozzáférést az adatokhoz.

Fontolja meg hírek script (ID hírek a megjeleníteni kívánt továbbítjuk az id paraméter):

Ha egy támadó át paraméterként id tervezés -1 UNION SELECT 1, felhasználónév, jelszó, 1. admin, hogy hatására a végrehajtását SQL-lekérdezés

Mivel hírek azonosító -1 nyilván nem létezik, az asztal, a hírek kiválasztott hangfelvételt, de csökkenni fog az eredmény bejegyzések jogosulatlan választott admin asztal kapott SQL injection.

Használata UNION + group_concat ()

Egyes esetekben a támadó indítson támadást, de nem tudta, hogy több mint egy oszlop. Ha egy támadó használhatja a MySQL funkció: amely egyesíti több oszlop egy. Például egy példa a fenti függvény hívás:

Védő farok lekérdezés

Hasító SQL lekérdezés

Elválasztásához parancsokat az SQL nyelv által használt karakter; (Pontosvessző), bemutatva a karakter a kérést, a támadó képes végrehajtani egy parancs egyetlen lekérdezés, de nem az összes SQL nyelvjárások támogatja ezt a funkciót.







Például, ha a paraméterek a script keresztül továbbított szerkezet, amely pontosvesszővel, például 12; INSERT INTO admin (felhasználónév, jelszó) ÉRTÉKEK ( „Hacker”, „asztal”); majd ugyanabban a lekérdezés kerül bemutatásra és 2 csapat a táblázatban admin bekerül a jogosulatlan belépés Hacker.

A végrehajtás módszerei típusú támadás SQL-kódot

Keresés a szkriptek téve a támadásoknak

Ebben a szakaszban a behatoló vizsgálták szerver script viselkedés manipuláció bemeneti paraméterek kimutatására rendellenes viselkedést. Manipuláció történik minden lehetséges paraméterek:
  • Keresztül továbbított adatokat a POST és GET módszerek
  • Értékek [HTTP-Cookie]
  • Http_referer (a szkriptek)
  • AUTH_USER és AUTH_PASSWORD (használatával hitelesítés)
Általános szabály, hogy a manipuláció összege helyett a paramétereket egyetlen karakter (néha dupla vagy hátra) idézetek.

Rendellenes viselkedés olyan viselkedést, amely beérkezett oldalak előtt és után helyettesítési idézetek, különböző (és nem jelenik meg az oldalon rossz paraméter formátum).

A leggyakoribb példák abnormális viselkedés:
  • Egy üzenet jelenik meg a különböző hibák;
  • amikor kérés adatok (pl híreket vagy a termék lista) a kért adatok nem jelennek meg minden, bár az oldal jelenik meg
és így tovább. d. Vegyük észre, hogy vannak olyan esetek, amikor a hiba üzenetet, mert az adott oldal nem jelenik meg a böngészőben, bár jelen a HTML-kódot.

Védelmet e típusú támadás kell, hogy alaposan szűrni a bemeneti paraméterek, amelyeket használni fognak a konstrukció az SQL-lekérdezést.

Szűréssel-paramétereket

Tegyük fel, hogy a kódot generál kérés (Pascal programozás), az alábbiak szerint:

Ahhoz, hogy a bevezetése a kód nem volt lehetséges, valamilyen DBMS beleértve a MySQL, meg kell idézett összes paramétereket tartalmaz. A paraméter helyére a jegyzéseket „aposztróf a \„backslash a \\ (ez az úgynevezett”szűrés speciális karakterek") Lehetséges, hogy egy ilyen kódot .:

szűrés lehet olyan, hogy a PHP:

Szűrés egész szám paramétereket

Vegyünk egy másik kérdés:

Ebben az esetben az id mező numerikus típus, és ez nem lehet hivatkozni. Ezért „idézve” és cseréje speciális karakterek escape-szekvenciák nem megy át. Ebben az esetben ellenőrizze a típusú segítséget; id, ha a változó értéke nem szám, a kérelmet nem kell elvégezni egyáltalán.

Például Delphi ellensúlyozásához injekció segít kód:

Hiba esetén StrToInt EConvertError funkció okoz kivételt, és megjelenít egy hibaüzenetet, hogy a kezelő. Kettős konverzió biztosítja a helyes válasz a számként $ 132AB (hexadecimális számrendszer). Egy szabványos Pascal, aki nem tudja kezelni a kivétel, a kód egy kicsit bonyolultabb.

PHP, ez a módszer a következőképpen néz ki:

Csonkolása a bemeneti paraméterek

Ahhoz, hogy a változások logikája SQL-lekérdezés felhívások bevezetése megfelelően hosszú szálakat. Így a minimális hossza a string hajtják végre a fenti példákban 8 karakter ( „1 vagy 1 = 1”). Ha a maximális hossza a helyes paraméter értéke alacsony, az egyik a védelmi módszereket lehet maximum csonkolása bemeneti paraméterek értékeit.

Például, ha tudjuk, hogy az id mező a fenti példában lehet állítani, hogy nem több, mint 9999, akkor „vágni az extra” karakterek, így legfeljebb négy:

Használata paraméteres lekérdezések

Sok adatbázis szerver támogatja a képesség, hogy küldjön paraméteres lekérdezések. A paraméterek a külső eredetű küldeni a szerver külön kérés vagy automatikusan leárnyékolja a kliens könyvtár. Erre a célra,
  • Delphi - TQuery.Params tulajdon;
  • Perl - vegye át a DBI :: idézet vagy DBI :: előkészítése;
  • Java - révén PreparedStatement osztály;
  • A C # - SqlCommand.Parameters tulajdon;
  • a PHP (használata esetén MySQL) - mysql_escape_string funkció, mysql_real_escape_string, addslashes.
  • A Elemző - maga a nyelv megakadályozza az ilyen támadások.