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

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 általam leírt tesztek csak az SQL alapú 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 a 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 a számlálót (*) a hamis)> 0 VAGY '1' = '1'

Észre fogod venni, hogy a fenti szintaxis kicsit más, mint az eredeti URL-ben. Fogadtam a szabadságot arra, hogy az URL-kódolt változót az ASCII ekvivalensekké konvertálják, hogy megkönnyítsék a példa követését. Például a% 3d a "=" karakter URL-kódolása. Hozzátettem néhány sort is hasonló célokra.

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 fog eredményezni valakinek, akinek első nevén van egy csomó SQL! 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 + count (*) + a + fake-t) +% 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 (nem szabad!), 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ő kiszolgálói hiba A kiszolgáló belső hibát vagy helytelen beállítást észlelt, és nem tudta teljesíteni a kérelmet. 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 injection 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: