Data jsou jednou z nejdůležitějších součástí informačních systémů. Databázové webové aplikace používá organizace k získávání dat od zákazníků. SQL je zkratka pro Structured Query Language. Používá se k načítání a manipulaci s daty v databázi.
Co je to SQL Injection?
SQL Injection je útok, který otravuje dynamické příkazy SQL tak, aby komentovaly určité části příkazu nebo připojovaly podmínku, která bude vždy pravdivá. Využívá chyby designu špatně navržených webových aplikací k zneužití příkazů SQL k provádění škodlivého kódu SQL.
V tomto kurzu se naučíte techniky SQL Injection a jak můžete chránit webové aplikace před takovými útoky.
- Jak funguje SQL Injection
- Hackerská aktivita: SQL Inject a Web Application
- Další typy útoků na SQL Injection
- Automatizační nástroje pro SQL Injection
- Jak zabránit útokům SQL Injection
- Hackovací aktivita: Použijte Havji pro SQL Injection
Jak funguje SQL Injection
Typy útoků, které lze provést pomocí injekce SQL, se liší v závislosti na typu databázového stroje. Útok funguje na dynamických příkazech SQL . Dynamický příkaz je příkaz, který je generován za běhu pomocí parametrů heslo z webového formuláře nebo řetězce dotazu URI.
Zvažme jednoduchou webovou aplikaci s přihlašovacím formulářem. Kód formuláře HTML je uveden níže.
TADY,
- Výše uvedený formulář přijímá e-mailovou adresu a heslo je poté odešle do souboru PHP s názvem index.php.
- Má možnost ukládání relace přihlášení do souboru cookie. Odvodili jsme to ze zaškrtávacího pole remember_me. K odesílání dat používá metodu post. To znamená, že hodnoty se v URL nezobrazí.
Předpokládejme, že prohlášení na back-endu pro kontrolu ID uživatele je následující
SELECT * FROM users WHERE email = $ _POST ['email'] A heslo = md5 ($ _ POST ['heslo']);
TADY,
- Výše uvedený příkaz používá hodnoty pole $ _POST [] přímo bez jejich dezinfekce.
- Heslo je šifrováno pomocí algoritmu MD5.
Ilustrujeme útok SQL injection pomocí sqlfiddle. Ve webovém prohlížeči otevřete adresu URL http://sqlfiddle.com/. Zobrazí se následující okno.
Poznámka: budete muset psát příkazy SQL
Krok 1) Zadejte tento kód do levého podokna
CREATE TABLE `users` (`id` INT NOT NULL AUTO_INCREMENT,`email` VARCHAR(45) NULL,`password` VARCHAR(45) NULL,PRIMARY KEY (`id`));insert into users (email,password) values ('This email address is being protected from spambots. You need JavaScript enabled to view it.',md5('abc'));
Krok 2) Klikněte na Vytvořit schéma
Krok 3) Zadejte tento kód do pravého podokna
vyberte * od uživatelů;
Krok 4) Klikněte na Spustit SQL. Uvidíte následující výsledek
Předpokládejme, že uživatel dodá Tato e-mailová adresa je chráněna před spamboty. Abyste ji mohli zobrazit, musíte mít povolený JavaScript. a 1234 jako heslo. Příkaz, který má být proveden proti databázi, by byl
SELECT * FROM users WHERE email = ' Tato e-mailová adresa je chráněna před spamboty. Abyste ji mohli zobrazit, musíte mít povolený JavaScript. “ AND heslo = md5 ('1234');
Výše uvedený kód lze zneužít komentováním části hesla a připojením podmínky, která bude vždy pravdivá. Předpokládejme, že útočník poskytne do pole e-mailové adresy následující vstup.
Tato e-mailová adresa je chráněna před spamboty. Abyste ji mohli zobrazit, musíte mít povolený JavaScript. “ NEBO 1 = 1 LIMIT 1 - ']
xxx pro heslo.
Vygenerovaný dynamický příkaz bude následující.
SELECT * FROM users WHERE email = ' Tato e-mailová adresa je chráněna před spamboty. Abyste ji mohli zobrazit, musíte mít povolený JavaScript. “ NEBO 1 = 1 LIMIT 1 - '] AND heslo = md5 (' 1234 ');
TADY,
- Tato e-mailová adresa je chráněna před spamboty. Abyste ji mohli zobrazit, musíte mít povolený JavaScript. končí jednoduchou citací, která doplňuje citát řetězce
- NEBO 1 = 1 LIMIT 1 je podmínka, která bude vždy pravdivá a omezuje vrácené výsledky pouze na jeden záznam.
- - „AND… je komentář SQL, který vylučuje část týkající se hesla.
Zkopírujte výše uvedený příkaz SQL a vložte jej do textového pole SQL FiddleRun SQL, jak je znázorněno níže
Hackerská aktivita: SQL Inject a Web Application
Máme jednoduchou webovou aplikaci na adrese http://www.techpanda.org/, která je zranitelná útoky SQL Injection pouze pro demonstrační účely. Výše uvedený kód formuláře HTML je převzat z přihlašovací stránky. Aplikace poskytuje základní zabezpečení, jako je sanitace e-mailového pole. To znamená, že náš výše uvedený kód nelze použít k obejití přihlášení.
Abychom to obešli, můžeme místo toho využít pole pro heslo. Níže uvedený diagram ukazuje kroky, které musíte dodržet
Předpokládejme, že útočník poskytne následující vstup
- Krok 1: Zadejte Tato e-mailová adresa je chráněna před spamboty. Abyste ji mohli zobrazit, musíte mít povolený JavaScript. jako e-mailovou adresu
- Krok 2: Zadejte xxx ') NEBO 1 = 1 -]
- Klikněte na tlačítko Odeslat
- Budete přesměrováni na palubní desku
Vygenerovaný příkaz SQL bude následující
SELECT * FROM users WHERE email = ' Tato e-mailová adresa je chráněna před spamboty. Abyste ji mohli zobrazit, musíte mít povolený JavaScript. “ AND heslo = md5 ('xxx') NEBO 1 = 1 -] ');
Níže uvedený diagram ukazuje, že příkaz byl vygenerován.
TADY,
- Příkaz inteligentně předpokládá, že je použito šifrování md5
- Dokončuje jednoduchou nabídku a uzavírací závorku
- Připojí k prohlášení podmínku, která bude vždy pravdivá
Úspěšný útok SQL Injection se obecně pokusí provést řadu různých technik, jako jsou ty, které byly ukázány výše, k provedení úspěšného útoku.
Další typy útoků na SQL Injection
Injekce SQL mohou způsobit více škody než pouhým předáním přihlašovacích algoritmů. Některé z útoků zahrnují
- Mazání dat
- Aktualizace dat
- Vkládání dat
- Provádění příkazů na serveru, které mohou stahovat a instalovat škodlivé programy, jako jsou trojské koně
- Export cenných dat, jako jsou údaje o kreditní kartě, e-mail a hesla, na vzdálený server útočníka
- Získání přihlašovacích údajů uživatele atd
Výše uvedený seznam není vyčerpávající; jen vám dá představu o tom, co je SQL Injection
Automatizační nástroje pro SQL Injection
Ve výše uvedeném příkladu jsme použili techniky ručního útoku založené na našich rozsáhlých znalostech jazyka SQL. Existují automatizované nástroje, které vám pomohou provádět útoky efektivněji a v co nejkratším čase. Mezi tyto nástroje patří
- SQLSmack - https://securiteam.com/tools/5GP081P75C
- SQLPing 2 - http://www.sqlsecurity.com/downloads/sqlping2.zip?attredirects=0&d=1
- SQLMap - http://sqlmap.org/
Jak zabránit útokům SQL Injection
Organizace může přijmout následující zásady, aby se chránila před útoky SQL Injection.
- Vstup uživatele by nikdy neměl být důvěryhodný - před použitím v dynamických příkazech SQL musí být vždy dezinfikován.
- Uložené procedury - tyto mohou zapouzdřit příkazy SQL a považovat všechny vstupy za parametry.
- Připravené příkazy - připravené příkazy fungují tak, že se nejprve vytvoří příkaz SQL a poté se všemi zadanými uživatelskými daty zachází jako s parametry. To nemá žádný vliv na syntaxi příkazu SQL.
- Regulární výrazy - tyto lze použít k detekci potenciálního škodlivého kódu a jeho odstranění před provedením příkazů SQL.
- Přístupová práva uživatelů k databázovému připojení - účtům používaným k připojení k databázi by měla být udělena pouze nezbytná přístupová práva. To může pomoci snížit to, co mohou příkazy SQL provádět na serveru.
- Chybové zprávy - neměly by prozradit citlivé informace ani to, kde přesně došlo k chybě. Jednoduché vlastní chybové zprávy, například „Je nám líto, ale dochází k technickým chybám. Byl kontaktován technický tým. Zkuste to prosím znovu později “lze použít místo zobrazení příkazů SQL, které chybu způsobily.
Hackovací aktivita: Použijte Havij pro SQL Injection
V tomto praktickém scénáři použijeme program Havij Advanced SQL Injection ke skenování zranitelnosti webu.
Poznámka: Váš antivirový program jej může kvůli své povaze označit příznakem. Měli byste jej přidat do seznamu výjimek nebo pozastavit antivirový software.
Na následujícím obrázku je hlavní okno pro Havij
Výše uvedený nástroj lze použít k posouzení zranitelnosti webové stránky / aplikace.
souhrn
- SQL Injection je typ útoku, který využívá špatné příkazy SQL
- Pomocí SQL injection lze obejít přihlašovací algoritmy, načíst, vložit a aktualizovat a odstranit data.
- Mezi nástroje pro vkládání SQL patří SQLMap, SQLPing a SQLSmack atd.
- Dobrá bezpečnostní politika při psaní příkazu SQL může pomoci snížit útoky vložením SQL.