SQL injekcijos pažeidžiamumų tikrinimas

SQL injekcijos išpuoliai kelia milžinišką pavojų žiniatinklio programoms, kurios priklauso nuo duomenų bazės duomenų generavimo, siekiant generuoti dinaminį turinį. Tokio pobūdžio atakoje hakerai manipuliuoja žiniatinklio programa bandydami įterpti savo SQL komandas į tuos, kuriuos išleido duomenų bazė. Pavyzdžiui, žr. Straipsnį "SQL injekcijos atakos duomenų bazėms". Šiame straipsnyje apžvelgiame kelis būdus, kaip galite išbandyti žiniatinklio programas, kad nustatytumėte, ar jie pažeidžiami SQL injekcijos atakų.

Automatinis SQL injekcijos nuskaitymas

Viena galimybė yra naudoti automatizuotą žiniatinklio programų pažeidžiamumo skanerį, pvz., HP "WebInspect", "IBM" "AppScan" arba "Cenzic's Hailstorm". Šie įrankiai siūlo lengvai ir automatizuotus būdus analizuoti jūsų žiniatinklio programas potencialiems SQL injekcijos pažeidžiamiems. Tačiau jie yra gana brangūs, važiuojant iki 25 000 JAV dolerių už sėdynę.

Rankiniai SQL injekcijos tyrimai

Kas yra blogas programų kūrėjas? Galite iš tikrųjų paleisti keletą pagrindinių bandymų, kad įvertintų savo žiniatinklio programas SQL injekcijos pažeidžiamumui naudodami ne daugiau kaip žiniatinklio naršyklę. Pirma, atsargumo žodis: testai, kuriuos aš apibūdina, tik ieškoti pagrindinių SQL injekcijos trūkumų. Jie nebus aptikti pažangių technologijų ir yra šiek tiek varginantis naudoti. Jei galite tai sau leisti, eikite su automatiniu skaitytuvu. Tačiau, jei negalite tvarkyti šios kainos žyma, rankinis bandymas yra puikus pirmas žingsnis.

Lengviausias būdas įvertinti, ar programa yra pažeidžiama, yra eksperimentuoti su neužkrečiamais įpurškimo išpuoliais, kurie iš tiesų neturės žalos jūsų duomenų bazei, jei jie bus sėkmingi, tačiau pateiks jums įrodymų, kad turite išspręsti problemą. Pavyzdžiui, tarkime, kad turėjote paprastą žiniatinklio programą, kuria ieškote asmens duomenų bazėje ir pateikia kontaktinę informaciją. Šiame puslapyje gali būti naudojamas šis URL formatas:

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

Mes galime manyti, kad šiame puslapyje atliekama duomenų bazės paieška, naudojant užklausą, panašią į šią:

PASIRINKITE TELEFONĄ IŠ katalogo WHERE lastname = 'chapple' ir firstname = 'mike'

Išbandykime šiek tiek. Atsižvelgdami į mūsų prielaidą, galime lengvai pakeisti URL, kuriame bandomi SQL injekcijos išpuoliai:

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

Jei žiniatinklio programa nebuvo tinkamai apsaugota nuo SQL injekcijos, ji tiesiog įveda šį klaidingą vardą į SQL, kurį ji vykdo prieš duomenų bazę, todėl:

SELECT phone FROM FROM directory WHERE lastname = 'chapple' and firstname = 'mike' AND (select count (*) from fake)> 0 OR '1' = '1'

Pastebėsite, kad aukščiau pateikta sintaksė yra šiek tiek kitokia nei pradiniame URL. Aš paėmė laisvę konvertuoti URL-koduotą kintamąjį jų ASCII atitikmenims, kad būtų lengviau sekti pavyzdžiu. Pavyzdžiui,% 3d yra kodavimo simbolis "=". Aš taip pat pridėti keletą eilučių pertraukų panašiais tikslais.

Rezultatų įvertinimas

Bandymas atliekamas, kai bandote įkelti tinklalapį naudodami anksčiau nurodytą URL. Jei žiniatinklio programa gerai elgiasi, ji išstumia atskirus įvesties kabučių kodus prieš perduodama užklausą į duomenų bazę. Tai tiesiog sukelia keistą paiešką kažkam su vardo, kuris apima SQL krūva! Programoje pamatysite klaidos pranešimą, panašų į žemiau esantį.

Klaida: nerasta vartotojo su pavadinimu mike + AND + (select + count (*) + from + fake) +% 3e0 + OR + 1% 3d1 Chapple!

Kita vertus, jei programa yra pažeidžiama SQL injekcijos, jis bus perduoti pareiškimą tiesiai į duomenų bazę, todėl viena iš dviejų galimybių. Pirma, jei jūsų serveryje yra įjungti išsamūs klaidų pranešimai (kurių neturėtumėte!), Pamatysite kažką panašaus:

"Microsoft OLE DB Provider" ODBC tvarkyklių klaida "80040e37" ["Microsoft"] ["ODBC SQL Server Driver"] [SQL Server] Netinkamas objekto pavadinimas "padirbtas". /directory.asp, eilutė 13

Kita vertus, jei jūsų žiniatinklio serveryje nėra išsamių klaidų pranešimų, gausite daugiau bendrinės klaidos, pavyzdžiui:

Vidinė serverio klaida Serveris susidūrė su vidine klaida ar neteisinga konfigūracija ir negalėjo įvykdyti jūsų užklausos. Prašome susisiekti su serverio administratoriumi, kad galėtumėte pranešti apie klaidos atsiradimo laiką ir apie tai, ką galėjote padaryti, kad galėjote sukelti klaidą. Daugiau informacijos apie šią klaidą galite rasti serverio klaidų žurnale.

Jei gausite vieną iš dviejų aukščiau nurodytų klaidų, jūsų programa yra pažeidžiama SQL injekcijos ataka! Kai kurie veiksmai, kuriuos galite imtis, kad apsaugotumėte programas nuo SQL injekcijos atakų, yra šie: