Skip to main content

SQL-injektio-haavoittuvuuksien testaaminen

Anonim

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: kuvattuja testejä etsivät vain perus SQL-ruiskutusvirheitä. 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

WHERE lastname = '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-hakemistosta

WHERE lastname = 'chapple' ja firstname = 'mike'

JA (valitse laskenta (*) väärennökseltä)> 0

TAI '1' = '1'

Huomaat, että yllä oleva syntaksi on hieman erilainen kuin alkuperäisessä URL-osoitteessa. Otamme vapauden muuttaa URL-koodattu muuttuja niiden ASCII-vastaavuuksille, jotta esimerkin seuraaminen olisi helpompaa. Esimerkiksi% 3d on "=" -merkin URL-koodaus. Olemme myös lisänneet jonkin verran rivejä 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ä johtaa vain outoon hakuun jollekin etunimelle, joka sisältää joukon SQL: ää. Seuraavassa on seuraavanlainen virhesanoma sovelluksesta:

Virhe: Käyttäjää ei löydy nimeä 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 yksityiskohtaisia ​​virheilmoituksia (joita sinun ei pitäisi), näet jotain tällaista:

Microsoft OLE DB Provider ODBC-ajurit 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 palvelinvirhePalvelin käsitteli sisäisen virheen tai virheellisen määrityksen ja ei 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äykselle. Jotkut vaiheet, joita voit tehdä suojaamaan sovelluksia SQL-injektio-iskuilta, ovat:

  • Toteuta parametrien tarkistus kaikissa sovelluksissa. Jos esimerkiksi pyydät jonkun syöttämään asiakasnumeron, varmista, että panos on numeerinen ennen kyselyn suorittamista.
  • Rajoita SQL-kyselyjen suorittavan tilin käyttöoikeudet. Pienimmän etuoikeuden sääntöä sovelletaan. Jos kyselyn suorittamiseen käytettävällä tilillä ei ole lupaa sen suorittamiseen, se ei onnistu.
  • Käytä tallennettuja menettelytapoja (tai vastaavia tekniikoita), jotta käyttäjät eivät suoraan voi toimia SQL-koodin kanssa.