SQL Injection haavatavuste testimine

SQL-injektsioonirünnakud kujutavad tohutut ohtu veebirakendustele, mis sõltuvad dünaamilisest sisust genereerivast andmebaasi taustadest. Seda tüüpi rünnakuga manipuleerivad häkkerid veebirakendusega, et nad suudaksid oma SQL-i käske sisestada andmebaasi väljastatavateks. Näiteks vt artiklit SQL Injection Attacks andmebaasides. Käesolevas artiklis uurime mitmesuguseid viise, kuidas saate oma veebirakendusi testida, et teha kindlaks, kas need on SQL Injection rünnakute suhtes haavatavad.

Automatiseeritud SQL-i injektsiooni skaneerimine

Üks võimalus on automatiseeritud veebirakenduste haavatavuse skanner, näiteks HP WebInspect, IBM AppScan või Cenzic's Hailstorm. Kõik need tööriistad pakuvad lihtsaid ja automaatselt võimalusi teie veebirakenduste analüüsimiseks potentsiaalsete SQL-i sisselogimiste haavatavuste jaoks. Kuid nad on üsna kallid, töötab kuni 25 000 dollarit ühe kohta.

Käsitsi SQL süstimiskatsed

Mis on halb rakenduste arendaja? Saate tõepoolest läbi viia mõned põhilised testid, et hinnata oma veebirakendusi SQL Injection haavatavuste jaoks, kasutades ainult veebibrauserit. Esiteks, sõna ettevaatlik: testid, mida ma kirjeldan, otsivad vaid põhilisi SQL-i sisestusvigu. Nad ei avasta täiustatud tehnikaid ega kasuta mõnevõrra vaeva. Kui saate seda endale lubada, minge automaatse skänneriga. Kui aga te ei saa seda hinnasilti käsitseda, on käsitsi katsetamine suurepärane esimene samm.

Lihtsaim viis, kuidas hinnata, kas rakendus on haavatav, on katsetada kahjutuid süste rünnakuid, mis ei kahjusta teie andmebaasi, kui need õnnestuvad, kuid annavad teile tõendeid selle kohta, et peate probleemi lahendama. Näiteks oleta, et teil on lihtne veebirakendus, mis otsib andmebaasi üksikisikut ja annab selle tulemusena kontaktteabe. See leht võib kasutada järgmist URL-vormingut:

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

Võime eeldada, et see leht täidab andmebaasi otsingut, kasutades päringuid, mis on sarnased järgmisega:

SELECT phone FROM FROM kataloogist, kus lastname = 'chapple' ja eesnimi = 'mike'

Proovime selle natuke katsetada. Eespool esitatud eelduse põhjal saame teha lihtsa muudatuse SQL-i sisestamise rünnakute testimiseks URL-is.

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

Kui veebirakendust ei ole SQL-i süstimisega korralikult kaitstud, siis lihtsalt ühendab selle võltsitud eesnime andmebaasi vastu võetud SQL-i avaldusega, mille tulemuseks on:

SELECT phone FROM FROM kataloogist, kus lastname = 'chapple' ja eesnimi = 'mike' JA (vali loend (*) võltsitud)> 0 või '1' = '1'

Märkate, et ülaltoodud süntaks on natuke teistsugune kui algse URL-i puhul. Võtsin endale õiguse URL-i kodeeritud muutuja konverteerimiseks nende ASCII-ekvivalentide jaoks, et näidet paremini järgida. Näiteks% 3d on tähemärgi '=' URL-kodeering. Lisasin ka mõningaid rea katkendeid sarnastel eesmärkidel.

Tulemuste hindamine

Katse tuleb siis, kui proovite laadida veebilehte ülaltoodud URL-iga. Kui veebirakendus on hästi käitunud, eraldab see enne sisestamist päringu sisestamist sisenditest ühtse hinnapakkumise. See toob lihtsalt tulemuseks imelise otsingu kellegi nimel, kellel on palju SQL-i! Näete allolevast sarnasest rakendusest veateadet:

Viga: kasutajat ei leitud nimega mike + AND + (valige + loend (*) + + võlts) +% 3e0 + OR + 1% 3d1 Chapple!

Teisest küljest, kui rakendus on SQLi süsti jaoks haavatav, edastab see avalduse otse andmebaasi, mille tulemuseks on üks kahest võimalusest. Esiteks, kui teie serveril on üksikasjalikud veateated lubatud (mida te ei peaks!), Näete midagi sellist:

Microsoft OLE DB ODBC draiveri viga '80040e37' [Microsoft] [ODBC SQL Serveri draiver] [SQL Server] Vigane objekti nimi "võlts". /directory.asp, rida 13

Teisest küljest, kui teie veebiserver ei näita üksikasjalikke veateateid, saate üldisema vea, näiteks:

Sise serveri viga Serveris esines sisemine viga või väärkonfiguratsioon ning see ei õnnestunud teie taotlust täita. Palun võtke ühendust serveri administraatoriga, et teavitada sellest, millal tekkis viga, ja midagi, mis võis olla, mis võib olla viga põhjustanud. Selle vea kohta võib lisateavet serveri vealipäevikusse saada.

Kui saate ülalnimetatud kahest veast, on teie rakendus SQLi süste rünnaku suhtes haavatav! Mõned sammud, mida saate oma rakenduste kaitsmiseks SQL Injection rünnakute vastu võtta, on järgmised: