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. 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: Az eredmények értékelése