Skip to main content

SQL injekciós sérülékenységek tesztelése

SQL Tutorial - Full course for beginners (Április 2025)

SQL Tutorial - Full course for beginners (Április 2025)
Anonim

Az SQL injekciós támadások óriási kockázatot jelentenek az olyan webes alkalmazások számára, amelyek az adatbázis hátterétől függenek, és dinamikus tartalmat generálnak. Az ilyen típusú támadások során a hackerek egy webes alkalmazást manipulálnak, hogy megpróbálják beadni saját SQL parancsokat az adatbázis által kiadott adatokba. Példaként tekintse meg az SQL Injection Attacks on Databases című cikket. Ebben a cikkben megvizsgáljuk a webes alkalmazások tesztelésének számos módját annak meghatározására, hogy sebezhetőek-e az SQL injekciós támadásokkal szemben.

Automatikus SQL befecskendezéses szkennelés

Az egyik lehetőség az automatizált webes alkalmazás sebezhetőségének szkennere, például a HP WebInspect, az IBM AppScan vagy a Cenzic Hailstorm. Ezek az eszközök mindegyike könnyű és automatizált módon elemzi webes alkalmazásait a potenciális SQL Injection sebezhetőségek miatt. Azonban meglehetősen költségesek, akár 25 000 dollárra futnak ülésenként.

Kézi SQL injekciós tesztek

Mi a rossz alkalmazások fejlesztője? Bizonyos alapszintű teszteket futtathatsz arra, hogy kiértékeljük webes alkalmazásainkat az SQL Injection sebezhetőségeihez, csak web böngészőt használva. Először is, egy óvatos szó: az általunk leírt tesztek csak az alapvető SQL injektálási hibákat keressék. Nem fogják felismerni a fejlett technikákat, és kissé fárasztóak a használatuk. Ha megengedheti magának, menjen egy automatikus lapolvasóval. Ha azonban nem tudja kezelni ezt az árcédulát, a manuális tesztelés nagyszerű első lépés.A legegyszerűbb módja annak, hogy felmérje, vajon egy alkalmazás sebezhető-e, olyan ártalmatlan befecskendezési támadásokkal próbálkozik, amelyek nem károsítják az adatbázisát, ha sikeresek, de bizonyítékokkal szolgálnak arra vonatkozóan, hogy ki kell javítania a problémát. Tegyük fel például, hogy van egy egyszerű webes alkalmazás, amely felkeres egy egyént egy adatbázisban, és ennek eredményeképpen kapcsolatfelvételi adatokat szolgáltat. Az oldal a következő URL-formátumot használhatja:

http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike

Feltételezhetjük, hogy ez az oldal adatbázis-keresést végez, az alábbiakhoz hasonló lekérdezést használva:

SELECT telefon

FROM könyvtárból

WHERE utolsónév = 'chapple' és firstname = 'mike'

Kísérletezzünk ezzel egy kicsit. A fenti feltételezéssel egyszerűen megváltoztathatjuk az SQL befecskendezési támadások tesztelésére szolgáló URL-t:

http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike'+AND+(select+count(*)+from+fake)+%3e0+OR+'1'%3d'1

Ha a webes alkalmazás nem védett megfelelően az SQL befecskendezéssel szemben, akkor egyszerűen beilleszteni ezt a hamis utónevet az adatbázis ellen végrehajtott SQL utasításhoz, ami:

SELECT telefon

FROM könyvtárból

WHERE utolsónév = 'chapple' és firstname = 'mike'

AND (válassza ki a számlálót (*) a hamis)> 0-tól

OR '1' = '1'

Észre fogod venni, hogy a fenti szintaxis kicsit más, mint az eredeti URL-ben. Szabadon engedtük az URL-kódolású változó ASCII ekvivalensekké történő átalakítását, hogy megkönnyítsük a példa követését. Például a% 3d a "=" karakter URL-kódolása. Ehhez hasonló sort is hozottunk.

Az eredmények értékelése

A teszt akkor jön, amikor megpróbálja betölteni a weboldalt a fenti URL-címmel. Ha a webes alkalmazás jól viselkedik, akkor a lekérdezésnek az adatbázisba való átvitelét megelőzően kiiktatja az egyes idézőjeleket a beviteltől. Ez egyszerűen csak egy furcsa keresést eredményez valakinek, akinek első neve tartalmaz egy csomó SQL-et. Az alkalmazáshoz hasonló hibaüzenet jelenik meg az alábbiak szerint:

Hiba: A mike + AND + névvel nem található felhasználó (válassza a + számot (*) + a + hamis) +% 3e0 + VAGY + 1% 3d1

Chapple!

Másrészt, ha az alkalmazás sebezhető az SQL injektálással, akkor az utasítás közvetlenül az adatbázisba kerül, ami két lehetőség egyikét eredményezi. Először is, ha a szerverén részletes hibaüzenetek vannak engedélyezve (amiket nem kellene), akkor valami ilyesmit fog látni:

Microsoft OLE DB kiszolgáló az ODBC illesztőprogramok hibájához "80040e37"

Microsoft ODBC SQL Server illesztőprogram SQL Server Érvénytelen tárgynév "hamis".

/directory.asp, 13. sor

Másrészt, ha webkiszolgálója nem jeleníti meg a részletes hibaüzeneteket, általánosabb hibát kap, például:

Belső SzerverhibaA kiszolgáló belső hibát vagy helytelen konfigurációt észlelt, és nem tudta befejezni a kérést.

Kérjük, lépjen kapcsolatba a szerver rendszergazdájával, hogy tájékoztassa a hiba keletkezésének időpontjáról és az esetleges hibáról.

A hibáról további információk találhatók a szerver hiba naplójában.

Ha a fenti két hiba egyikét kapja, az alkalmazás sebezhető az SQL injekciós támadással szemben. Néhány lépés, amit megtehetsz, hogy megvédje alkalmazásait az SQL injekciós támadásokkal szemben:

  • Végezze el a paraméterek ellenőrzését minden alkalmazásban. Például, ha valaki arra kéri, hogy adjon meg egy ügyfélszámot, győződjön meg róla, hogy a lekérdezés végrehajtása előtt számjegyes.
  • Korlátozza az SQL lekérdezéseket végrehajtó fiók engedélyeit. A legkevesebb kiváltság szabálya érvényes. Ha a lekérdezés végrehajtásához használt fiók nem rendelkezik engedélyével, akkor nem fog sikerülni.
  • Használjon tárolt eljárásokat (vagy hasonló technikákat), amelyek megakadályozzák a felhasználókat az SQL kóddal való közvetlen kölcsönhatásban.