SQL-injektio-haavoittuvuuksien testaaminen

SQL-injektio-iskut aiheuttavat valtavia riskejä web-sovelluksiin, jotka riippuvat tietokantahausta dynaamisen sisällön tuottamiseksi. Tällaisessa hyökkäyksessä hakkerit manipuloivat verkkosovellusta yrittäessään pistää omia SQL-komentoja tietokannan antamiin tietoihin. Esimerkkinä on artikkeli SQL Injection Attacks on Databases. Tässä artikkelissa tarkastelemme useita tapoja, joilla voit testata verkkosovelluksia selvittääkseen, ovatko he alttiita SQL-ruiskutushyökkäyksille.

Automaattinen SQL-ruiskutustarkistus

Yksi mahdollisuus on käyttää automaattista WWW-sovellusten heikkouslukijaa, kuten HP: n WebInspect, IBM: n AppScan tai Cenzicin Hailstorm. Nämä työkalut tarjoavat helppoja ja automatisoituja tapoja analysoida verkkosovelluksia mahdollisten SQL Injection -haavoittuvuuksien varalta. Kuitenkin he ovat melko kalliita, jopa 25 000 dollaria per istuin.

Manuaaliset SQL-ruiskutustestit

Mikä on huono sovelluskehittäjä tehdä? Voit itse suorittaa joitain peruskokeita, joiden avulla voit arvioida verkkosovelluksiasi SQL Injection -haavoittuvuuksille käyttämällä vain selainta. Ensinnäkin varoituksen sana: testit, joita kuvataan, etsivät vain perus SQL-injektio-virheitä. He eivät tunnista edistyksellisiä tekniikoita ja ovat jonkin verran tylsiä käyttää. Jos sinulla on varaa, mene automaattisella skannerilla. Kuitenkin, jos et pysty käsittelemään tätä hintalappua, manuaalinen testaus on hieno ensimmäinen askel.

Helpoin tapa arvioida, onko sovellus haavoittuva on kokeilla ärsyttäviä ruiskutushyökkäyksiä, jotka eivät haittaa tietokantaa, jos ne onnistuvat, mutta antavat sinulle todisteita siitä, että sinun on korjattava ongelma. Oletetaan esimerkiksi, että sinulla on yksinkertainen verkkosovellus, joka etsii tietokannasta yksilön ja antaa yhteystiedot. Sivulla voi olla seuraava URL-muoto:

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

Voimme olettaa, että tämä sivu suorittaa tietokannan haun käyttämällä seuraavanlaista kyselyä :

SELECT puhelin FROM hakemistosta, missä etunimi = 'chapple' ja firstname = 'mike'

Kokeile tätä vähän. Edellä esitetyn oletuksen perusteella voimme tehdä yksinkertaisen muutoksen URL-osoitteeseen, jossa testataan SQL-injektio-iskuja:

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

Jos verkkosovellusta ei ole suojattu oikein SQL-injektioon, se yksinkertaisesti yhdistää tämän väärennetty nimen sukunimiin suoritettavaan SQL-käskyyn, mikä johtaa seuraaviin:

SELECT puhelin FROM hakemisto WHERE lastname = 'chapple' ja firstname = 'mike' AND (valitse numero (*) väärennökseltä)> 0 TAI '1' = '1'

Huomaat, että yllä oleva syntaksi on hieman erilainen kuin alkuperäisessä URL-osoitteessa. Olin vapaus muuntaa URL-koodattu muuttuja niiden ASCII-vastaavuuksille, jotta esimerkin seuraaminen olisi helpompaa. Esimerkiksi% 3d on "=" -merkin URL-koodaus. Lisäsin myös joitain viivatahtoja samankaltaisiin tarkoituksiin.

Tulosten arviointi

Testi tulee, kun yrität ladata verkkosivun yllä mainitulla URL-osoitteella. Jos web-sovellus on hyvin käyttäytyvä, se poistaa yksittäiset lainaukset syötteestä ennen kyselyn siirtämistä tietokantaan. Tämä yksinkertaisesti johtaa outoon hakuun jollekin etunimelle, joka sisältää joukon SQL! Seuraavassa on seuraavanlainen virhesanoma sovelluksesta:

Virhe: Käyttäjää ei löydy nimestä mike + AND + (valitse + count (*) + + väärä) +% 3e0 + TAI + 1% 3d1 Chapple!

Toisaalta, jos sovellus on alttiina SQL-injektioille, se välittää lausunnon suoraan tietokantaan, mikä johtaa johonkin kahteen mahdollisuuteen. Ensinnäkin, jos palvelimellasi on yksityiskohtaiset virheilmoitukset käytössä (mitä et pitäisi!), Näet jotain tällaista:

Microsoft OLE DB Provider for ODBC Drivers virhe "80040e37" [Microsoft] [ODBC SQL Server Driver] [SQL Server] Virheellinen objektin nimi "väärennetty". /directory.asp, rivi 13

Toisaalta, jos verkkopalvelimesi ei näytä yksityiskohtaisia ​​virheilmoituksia, saat yleisempiä virheitä, kuten:

Sisäinen palvelinvirhe Palvelimella oli sisäinen virhe tai virheellinen määritys, eikä hän pystynyt suorittamaan pyyntöäsi. Ota yhteyttä palvelimen pääkäyttäjään ilmoittamaan virheen tapahtumisajankohdasta ja kaikista mahdollisesti tekemistään virheistä. Lisätietoa tästä virheestä saattaa olla saatavana palvelimessa.

Jos saat jommankumman edellä mainituista kahdesta virheestä, sovelluksesi on altis SQL-injektio-hyökkäyksille! Jotkut vaiheet, joita voit tehdä suojaamaan sovelluksia SQL-injektio-iskuilta, ovat: