SQL injekcijas ievainojamības testēšana

SQL injekcijas uzbrukumi rada milzīgus riskus tīmekļa lietojumprogrammām, kas ir atkarīgas no datubāzes backend, lai radītu dinamisku saturu. Šajā veida uzbrukumā hakeri manipulē ar tīmekļa lietojumprogrammu, mēģinot ievadīt savas SQL komandas datubāzes izdotajās versijās. Piemēram, skatiet rakstu SQL injekcijas uzbrukumi datu bāzēm. Šajā rakstā mēs apskatām vairākos veidos, kā pārbaudīt savas tīmekļa lietojumprogrammas, lai noteiktu, vai tās ir neaizsargātas pret SQL injekcijas uzbrukumiem.

Automātiska SQL injekcijas skenēšana

Viena iespēja ir automatizēta tīmekļa lietojumprogrammas neaizsargātības skenera izmantošana, piemēram, HP WebInspect, IBM AppScan vai Cenzic's Hailstorm. Visi šie rīki piedāvā vienkāršus, automatizētus veidus, kā analizēt jūsu tīmekļa lietojumprogrammas iespējamām SQL injekcijas ievainojamībām. Tomēr tie ir diezgan dārgi, un tie darbojas līdz 25 000 ASV dolāriem uz vienu vietu.

Manuāli SQL injekcijas testi

Kāds ir slikts lietojumprogrammu izstrādātājs? Varat faktiski izpildīt dažus pamata testus, lai novērtētu jūsu tīmekļa lietojumprogrammas SQL Injection ievainojamībai, izmantojot neko vairāk kā tīmekļa pārlūku. Pirmkārt, piesardzības vārds: testi, kurus es raksturoju, meklē tikai pamata SQL injekcijas kļūdas. Viņi nekontrolē progresīvus tehniskos paņēmienus un ir nedaudz nogurdinoši lietojami. Ja jūs to varat atļauties, dodieties ar automatizētu skeneri. Tomēr, ja jūs nevarat rīkoties ar cenu marķējumu, manuāla pārbaude ir lielisks pirmais solis.

Vieglākais veids, kā novērtēt, vai lietojumprogramma ir neaizsargāta, ir eksperimentēt ar nekaitīgiem injekcijas uzbrukumiem, kas patiešām nekaitēs jūsu datubāzei, ja tie būs veiksmīgi, bet sniegs jums pierādījumus, ka jums ir nepieciešams, lai novērstu problēmu. Piemēram, pieņemsim, ka jums ir vienkārša tīmekļa lietojumprogramma, kas datu bāzē meklē personu un sniedz kontaktinformāciju. Šajā lapā var izmantot šādu URL formātu:

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

Mēs varam pieņemt, ka šī lapa veic datu bāzes meklēšanu, izmantojot vaicājumu, kas ir līdzīga šādai:

IZVĒLIETIES TELEFONU NO IERĪCES, KUR PROFESIONĀLĀ = 'chapple' un firstname = 'mike'

Let's eksperimentēt ar šo mazliet. Ņemot vērā mūsu pieņēmumu, mēs varam veikt vienkāršas izmaiņas URL, kas pārbauda SQL injekcijas uzbrukumus:

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

Ja tīmekļa lietojumprogramma nav pareizi aizsargāta pret SQL injekciju, tā vienkārši pievieno šo viltus vārdu SQL deklarācijā, kuru tā izpilda pret datubāzi, kā rezultātā:

Izvēlieties tālruņa numuru no mapes WHERE Lastname = 'chapple' un firstname = 'mike' UN (izvēlieties count (*) no fake)> 0 vai '1' = '1'

Jūs ievērosiet, ka iepriekš minētā sintakse ir nedaudz atšķirīga no sākotnējā URL. Es paņēmu brīvību konvertēt URL kodēto mainīgo to ASCII ekvivalentos, lai būtu vieglāk sekot šim piemēram. Piemēram,% 3d ir koda zīme "=". Līdzīgiem mērķiem es arī pievienoju dažas līniju pārtraukumus.

Rezultātu novērtēšana

Tests rodas, mēģinot ielādēt tīmekļa vietni ar iepriekš minēto URL. Ja tīmekļa lietojumprogramma ir laba rīcība, pirms ievades vaicājuma datu bāzei tiek izlaistas no ievades ievadītās vienotās cenas. Tas vienkārši radīs dīvainu uzmeklēšanu kādam ar vārdu, kurā ietverta virkne SQL! Programmā parādīsies kļūdas ziņojums, kas ir līdzīgs tālāk norādītajam.

Kļūda: lietotājs nav atrasts ar nosaukumu mike + AND + (select + count (*) + from + fake) +% 3e0 + OR + 1% 3d1 Chapple!

No otras puses, ja lietojumprogramma ir neaizsargāta pret SQL injekciju, tā šo paziņojumu nodos tieši datu bāzē, tādējādi iegūstot vienu no divām iespējām. Pirmkārt, ja jūsu serverī ir iespējoti detalizēti kļūdas ziņojumi (kas jums nevajadzētu!), Jūs redzēsit kaut ko līdzīgu:

Microsoft OLE DB ODBC draiveru kļūda '80040e37' [Microsoft] [ODBC SQL Server Driver] [SQL Server] Nederīgs objekta nosaukums 'fake'. /directory.asp, 13. rindiņa

No otras puses, ja jūsu tīmekļa serverī netiek parādīti detalizēti kļūdu ziņojumi, jūs saņemsit vispārīgāku kļūdu, piemēram:

Iekšējā servera kļūda Serverī radās iekšēja kļūda vai nepareiza konfigurācija, un nevarēja izpildīt jūsu pieprasījumu. Lūdzu, sazinieties ar servera administratoru, lai informētu par to, kad radās kļūda, un par iespējamo informāciju, kas, iespējams, ir izraisījusi kļūdu. Vairāk informācijas par šo kļūdu var būt pieejama servera kļūdu žurnālā.

Ja saņemat vienu no divām iepriekš minētajām kļūdām, jūsu pieteikums ir neaizsargāts pret SQL injekcijas uzbrukumu! Daži soļi, kurus varat veikt, lai aizsargātu savas lietojumprogrammas pret SQL injekcijas uzbrukumiem, ir: