Tässä artikkelissa kerrotaan, miten testataan, onko verkkosivusto turvassa SQL-injektiolta SQLMAP:n tunkeutumistestityökalun avulla.

Mitä on SQL-injektio?

SQL-injektio on koodin injektointitekniikka, jossa hyökkääjä suorittaa pahantahtoisia SQL-kyselyjä, jotka ohjaavat verkkosovelluksen tietokantaa. Oikeilla kyselyillä käyttäjä voi päästä käsiksi tietokantoihin tallennettuihin tietoihin. SQLMAP testaa, onko ’GET’-parametri haavoittuvainen SQL Injectionille.
Harkitse esimerkiksi seuraavaa php-koodisegmenttiä:

$variable = $_POST;mysql_query("INSERT INTO `table` (`column`) VALUES ('$variable')");

Jos käyttäjä syöttää syötteeksi ”value’); DROP TABLE table;-”, kyselystä tulee

INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')

joka ei ole toivottavaa meille, koska tässä käyttäjän syöttö käännetään suoraan valmiiksi kirjoitetun sql-kyselyn kanssa. Näin ollen käyttäjä voi syöttää tietokannan manipulointiin tarvittavan sql-kyselyn.

Missä voit käyttää SQLMAP:ia?

Jos havaitset web-urlin, joka on muodoltaan http://testphp.vulnweb.com/listproducts.php?cat=1, jossa ’GET’-parametri on lihavoitu, verkkosivusto voi olla haavoittuvainen tälle SQL-injektiotavalle, ja hyökkääjä voi päästä käsiksi tietokannassa oleviin tietoihin. Lisäksi SQLMAP toimii, kun se on php-pohjainen.

Yksinkertainen testi sen tarkistamiseksi, onko verkkosivustosi haavoittuva, olisi korvata get-pyyntöparametrin arvo tähdellä (*). Esimerkiksi,

http://testphp.vulnweb.com/listproducts.php?cat=* 

Jos tuloksena on edellä esitetyn kaltainen virhe, voimme lopullisesti sanoa, että verkkosivusto on haavoittuva.

SQLMAP:n asentaminen

SQLMAP tulee valmiiksi asennettuna kali linuxin mukana, joka on useimpien tunkeutumistestaajien suosima valinta. Voit kuitenkin asentaa sqlmapin muihinkin debian-pohjaisiin linux-järjestelmiin komennolla

 sudo apt-get install sqlmap 

Usage

Tässä artikkelissa käytämme havainnollistamistarkoituksessa haavoittuvuuksia sisältävää verkkosivua:

 http://testphp.vulnweb.com/listproducts.php?cat=1 

Kuten huomaatte, GET-pyynnön parametri (cat = 1) on käyttäjän muutettavissa muokkaamalla catin arvoa. Tämä verkkosivusto saattaa siis olla haavoittuvainen tällaiselle SQL-injektiolle.
Testaamiseen käytetään SQLMAP:ia. Voit tarkastella välitettävien parametrien joukkoa kirjoittamalla terminaaliin,

 sqlmap -h 

Yllä olevassa kuvassa näkyvät parametrit, joita käytämme perus-SQL-injektiossa. Näiden lisäksi käytämme myös parametreja -dbs ja -u, joiden käyttö on selitetty vaiheessa 1.
SQLMAP:n käyttäminen verkkosivuston testaamiseen SQL Injection -haavoittuvuuden varalta:

  1. Vaihe 1: Luettele tiedot olemassa olevista tietokannoista
    Aluksi meidän on siis syötettävä web-url, jonka haluamme tarkastaa, sekä parametri -u. Voimme käyttää myös -tor-parametria, jos haluamme testata verkkosivuston välityspalvelimia käyttäen. Nyt tyypillisesti haluamme testata, onko tietokantaan mahdollista päästä käsiksi. Niinpä käytämme siihen -dbs-parametria. -dbs listaa kaikki käytettävissä olevat tietokannat.
     sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1 --dbs 

    Saamme seuraavan tulosteen, joka osoittaa, että käytettävissä on kaksi tietokantaa. Joskus sovellus ilmoittaa, että se on tunnistanut tietokannan, ja kysyy, haluatko testata muita tietokantatyyppejä. Voit jatkaa ja kirjoittaa ’Y’. Lisäksi se voi kysyä, haluatko testata muita parametreja haavoittuvuuksien varalta, kirjoita tähän ’Y’, koska haluamme testata verkkosovelluksen perusteellisesti.

    Havaitsemme, että tietokantoja on kaksi, acuart ja information_schema

  2. Vaihe 2: Luettelo tietystä tietokannasta löytyvistä taulukoista
    Yritääksemme päästä käsiksi mihin tahansa tietokantaan meidän on muutettava komentoamme hieman. Käytämme nyt -D:tä määrittääksemme sen tietokannan nimen, johon haluamme päästä käsiksi, ja kun pääsemme tietokantaan, haluamme nähdä, pääsemmekö käsiksi taulukoihin. Tätä varten käytämme -tables-kyselyä. Käytetään acuart-tietokantaa.
     sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1 -D acuart --tables 

    Taulukot

    Yllä olevassa kuvassa näemme, että 8 taulukkoa on haettu. Nyt tiedämme siis varmasti, että verkkosivusto on haavoittuva.

  3. Vaihe 3: Tietojen listaaminen tietyn taulukon sarakkeista

    Jos haluamme tarkastella tietyn taulukon sarakkeita, voimme käyttää seuraavaa komentoa, jossa käytämme -T:tä taulukon nimen määrittämiseen ja -columns:ää sarakkeiden nimien kyselyyn. Yritämme käyttää taulukkoa ’artists’.

     sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1 -D acuart -T artists --columns 

    Sarakkeet

  4. Vaihe 4: Tietojen tyhjentäminen sarakkeista
    Voidaan vastaavasti päästä käsiksi tietyn sarakkeen tietoihin seuraavalla komennolla, jossa -C:llä voidaan määrittää useita sarakkeiden nimiä pilkulla erotettuna, ja -dump-kysely hakee tiedot
     sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1-D acuart -T artists -C aname --dump 

    Yllä olevasta kuvasta näemme, että olemme päässeet käsiksi tietoihin tietokannasta. Vastaavasti tällaisissa haavoittuvissa verkkosivustoissa voimme kirjaimellisesti tutkia tietokantoja poimiaksemme tietoja

Prevent SQL Injection

SQL-injektio voidaan yleensä estää käyttämällä Prepared Statements . Kun käytämme valmisteltua lauseketta, käytämme periaatteessa mallia koodille ja analysoimme koodin ja käyttäjän syötteen erikseen. Se ei sekoita käyttäjän syöttämää kyselyä ja koodia. Tämän artikkelin alussa annetussa esimerkissä käyttäjän syöttö syötetään suoraan koodiin, ja ne kootaan yhteen, jolloin voimme suorittaa haitallista koodia. Valmistelluissa lausekkeissa lähetämme periaatteessa sql-kyselyn, jossa on paikanvaraaja käyttäjän syötettä varten, ja sen jälkeen lähetämme varsinaisen käyttäjän syötteen erillisenä komentona.
Harkitse seuraavaa php-koodisegmenttiä.

$db = new PDO('connection details');$stmt = db->prepare("Select name from users where id = :id");$stmt->execute(array(':id', $data));

Tässä koodissa käyttäjän syötettä ei ole yhdistetty valmistettuun lausekkeeseen. Ne kootaan erikseen. Joten vaikka käyttäjän syötteeksi syötettäisiinkin haitallista koodia, ohjelma käsittelee koodin haitallista osaa yksinkertaisesti merkkijonona eikä komentona.

Huomautus: Tätä sovellusta saa käyttää vain testaustarkoituksiin
Seuraava artikkeli
Perus SQL-injektio ja sen lieventäminen

Viittaus:stackoverflow.com

Tämän artikkelin on kirjoittanut Deepak Srivatsav. Jos pidät GeeksforGeeksistä ja haluat osallistua, voit myös kirjoittaa artikkelin osoitteessa contribute.geeksforgeeks.org tai lähettää artikkelisi sähköpostitse osoitteeseen [email protected]. Näet artikkelisi näkyvän GeeksforGeeksin pääsivulla ja autat muita geekkejä.

Vastaa

Sähköpostiosoitettasi ei julkaista.