Tento článek vysvětluje, jak pomocí nástroje pro penetrační testování SQLMAP otestovat, zda jsou webové stránky zabezpečeny proti SQL Injection.

Co je SQL Injection?

SQL Injection je technika injekce kódu, při které útočník provádí škodlivé dotazy SQL, které ovládají databázi webové aplikace. Pomocí správné sady dotazů může uživatel získat přístup k informacím uloženým v databázích. SQLMAP testuje, zda je parametr ‚GET‘ zranitelný vůči SQL Injection.
Příklad uvažujme následující segment kódu php:

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

Pokud uživatel zadá jako vstup „value‘); DROP TABLE table;-„, dotaz se stane

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

což je pro nás nežádoucí, protože zde je vstup uživatele přímo zkompilován spolu s předem napsaným dotazem sql. Uživatel tedy bude moci zadat dotaz sql potřebný k manipulaci s databází.

Kde můžete SQLMAP použít?

Pozorujete-li webovou adresu url, která má tvar http://testphp.vulnweb.com/listproducts.php?cat=1, kde je parametr ‚GET‘ tučně, pak může být webová stránka zranitelná tímto způsobem SQL injection a útočník může získat přístup k informacím v databázi. Nástroj SQLMAP navíc funguje, pokud je založen na jazyce php.

Jednoduchým testem pro ověření, zda je váš web zranitelný, by bylo nahradit hodnotu v parametru požadavku get hvězdičkou (*). Například,

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

Pokud to povede k chybě, jako je chyba uvedená výše, pak můžeme jednoznačně říci, že webová stránka je zranitelná.

Instalace sqlmap

SQLMAP se dodává s předinstalovaným systémem kali linux, který je preferovanou volbou většiny penetračních testerů. Pomocí příkazu

 sudo apt-get install sqlmap 

Usage

však můžete sqlmap nainstalovat i na jiné linuxové systémy založené na systému Debian:

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

Jak vidíte, je zde parametr požadavku GET (cat = 1), který může uživatel změnit úpravou hodnoty cat. Tato webová stránka tedy může být zranitelná vůči injekci SQL tohoto typu.
K otestování této skutečnosti použijeme nástroj SQLMAP. Chcete-li se podívat na sadu parametrů, které lze předat, zadejte do terminálu,

 sqlmap -h 

Parametry, které použijeme pro základní SQL Injection, jsou zobrazeny na obrázku výše. Spolu s nimi budeme používat také parametry -dbs a -u, jejichž použití bylo vysvětleno v kroku 1.
Použití nástroje SQLMAP k testování webové stránky na zranitelnost SQL Injection:

  1. Krok 1: Vypsání informací o existujících databázích
    Nejprve tedy musíme zadat url adresu webu, kterou chceme zkontrolovat, spolu s parametrem -u. Můžeme také použít parametr -tor, pokud chceme webovou stránku testovat pomocí proxy serverů. Nyní bychom obvykle chtěli otestovat, zda je možné získat přístup k databázi. Proto k tomu použijeme parametr -dbs. Parametr -dbs vypíše všechny dostupné databáze.
     sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1 --dbs 

    Dostaneme následující výstup, který nám ukazuje, že jsou k dispozici dvě databáze. Někdy vám aplikace oznámí, že identifikovala databázi, a zeptá se, zda chcete otestovat i jiné typy databází. Můžete pokračovat a zadat ‚Y‘. Dále se může zeptat, zda chcete otestovat další parametry zranitelností, zde zadejte ‚Y‘, protože chceme důkladně otestovat webovou aplikaci.

    Pozorujeme, že jejich jsou dvě databáze, acuart a information_schema

  2. Krok 2: Výpis informací o tabulkách přítomných v konkrétní databázi
    Chceme-li se pokusit o přístup k některé z databází, musíme náš příkaz mírně upravit. Nyní použijeme parametr -D pro zadání názvu databáze, ke které chceme získat přístup, a jakmile získáme přístup k databázi, chtěli bychom zjistit, zda můžeme přistupovat k tabulkám. K tomu použijeme dotaz -tables. Přistupme k databázi acuart.
     sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1 -D acuart --tables 

    Tables

    Na výše uvedeném obrázku vidíme, že bylo načteno 8 tabulek. Nyní tedy s jistotou víme, že webová stránka je zranitelná.

  3. Krok 3: Výpis informací o sloupcích konkrétní tabulky

    Pokud chceme zobrazit sloupce konkrétní tabulky, můžeme použít následující příkaz, ve kterém pomocí -T zadáme název tabulky a pomocí -columns se zeptáme na názvy sloupců. Pokusíme se získat přístup k tabulce ‚artists‘.

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

    Sloupce

  4. 4. krok: Výpis dat ze sloupců
    Podobně můžeme přistupovat k informacím v konkrétním sloupci pomocí následujícího příkazu, kde pomocí -C lze zadat více názvů sloupců oddělených čárkou a dotaz -dump načte data
     sqlmap -u http://testphp.vulnweb.com/listproducts.php?cat=1-D acuart -T artists -C aname --dump 

    Z výše uvedeného obrázku vidíme, že jsme získali přístup k datům z databáze. Podobně můžeme na takto zranitelných webových stránkách doslova prozkoumat databáze a získat informace

Předcházení SQL Injection

SQL injection lze obecně zabránit použitím připravených příkazů . Při použití připraveného příkazu v podstatě používáme šablonu pro kód a analyzujeme kód a uživatelský vstup odděleně. Nesměšuje se tak dotaz zadaný uživatelem a kód. V příkladu uvedeném na začátku tohoto článku je vstup zadaný uživatelem vložen přímo do kódu a jsou zkompilovány dohromady, a proto jsme schopni spustit škodlivý kód. V případě připravených příkazů v podstatě odešleme dotaz sql se zástupným znakem pro uživatelský vstup a skutečný uživatelský vstup pak odešleme jako samostatný příkaz.
Podívejte se na následující úsek kódu php.

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

V tomto kódu není uživatelský vstup kombinován s připraveným příkazem. Jsou zkompilovány samostatně. Takže i když je jako uživatelský vstup zadán škodlivý kód, program bude škodlivou část kódu jednoduše považovat za řetězec a ne za příkaz.

Poznámka: Tato aplikace má sloužit výhradně k testovacím účelům
Související článek
Základní SQL injection a její zmírnění

Referece:stackoverflow.com

Tento článek přispěl Deepak Srivatsav. Pokud se vám GeeksforGeeks líbí a chtěli byste přispět, můžete také napsat článek pomocí stránky contribute.geeksforgeeks.org nebo poslat svůj článek na adresu [email protected]. Uvidíte, jak se váš článek objeví na hlavní stránce GeeksforGeeks, a pomůžete tak ostatním geekům.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.