Přejít k navigační liště

Zdroják » Databáze » SQL Injection pre každého

SQL Injection pre každého

Články Databáze

V dnešnej dobe plnej webových frameworkov, databázových knižníc a ORM by som tak trochu čakal, že webov náchylných na SQL Injection už nebude veľmi veľa. Opak je však pravdou a zaútočiť na tieto weby pomocou SQL Injection už môže naozaj ktokoľvek, stačí mu len vhodný nástroj a trochu trpezlivosti.

SQL Injection

SQL Injection je technika namierená proti (nielen) webovým aplikáciám využívajúcim SQL databázu. Myšlienkou je databáze vhodne podstrčiť dáta, napríklad v URL alebo prostredníctvom formulára, ktoré následne databáza vykoná. SQL Injection využíva bezpečnostné chyby v aplikáciach, najčastejšie nekontrolovanie vstupu od používateľa.

Celú myšlienku najlepšie ilustruje XKCD komix Exploits of a Mom

Predstavte si napríklad SQL výraz

statement = "SELECT * FROM users WHERE name ='" + userName + "';"

ak ako userName zadáte napríklad

' or '1'='1

stane sa z neho

SELECT * FROM users WHERE name = '' OR '1'='1';

A výsledkom je zoznam všetkých používateľov z databázy. Injectovať môžete samozrejme akékoľvek SQL, napríklad zmazanie nejakej tabuľky, vloženie nového záznamu a podobne.

Ako nájsť potencionálne zraniteľné weby?

Najjednoduchší spôsob je nájsť weby, ktoré obsahujú v URL index.php?id= alebo asp?id=. Na to stačí do Google zadať

allinurl:  asp?id= OR index.php?id=	

Prípadne to môžete trochu obmedziť a skúšať napadnúť len české weby

allinurl:  asp?id= OR index.php?id= site:.cz	

Ako zaútočiť?

Najjednoduchší spôsob útoku je použiť nejaký nástroj, na ktorého ovládanie nemusíte o SQL Injection v podstate nič vedieť. Odporúčam Havij, ktorý je celkom dobre použiteľný aj v bezplatnej verzii, najmä ak budete napádať klasické PHP+MySQL weby. (Pozor: Zdá se že program Havij byl infikován, použijte raději jinou aplikaci.)

get_data_1_2

Havij sa používa naozaj jednoducho, zadáte URL, stlačíte Analyze a čakáte. Ak máte šťastie, dostanete oznam o úspechu, ak nie, pokračujete ďalším z nájdených webov. V prípade úspechu sa prepnete na záložku Tables a môžete skúmať jednotlivé tabuľky, stĺpce a hlavne ich dáta.

Prvý web náchylný na SQL Injection, ktorý som po pár pokusoch našiel, obsahoval zahashované heslá. Ak ide o MD5, čo je väčšina prípadov, môžete použiť záložku MD5 skúsiť heslo k danému hashu zisť z niektorého reverse md5 lookup webu.

Ako sa brániť?

Kontrolujte vstupné dáta. Proces ošetrenia vstupu a odstránenia nebezpečných výrazov sa v angličtine označuje sanitize a pre každý jazyk, framework, databázu je možné nájsť množstvo článok, ako na to. Napríklad pre PHP a MySQL je vhodné použiť mysqli_real_escape_string.

Aktualizace. Dodatek Michala Špačka:

Pokud se chcete bránit proti útoku SQL Injection, použijte třídy nebo funkce, které umožňují oddělit SQL dotaz od vstupních proměnných. Takové funkce a třídy pak tyto proměnné buď správně ošetří nebo rovnou posílají na server odděleně (nativní prepared statements), takže se nemůže stát, že nějakou proměnnou ošetřit zapomenete, pokud ji přímo nevložíte do samotného dotazu. Pro PHP existuje několik tříd, které oddělování dotazů od proměnných podporují, jsou to například nástroje jako je dibi, NotORM nebo funkce qsprintf z knihovny libphutil. Přímo v PHP je dostupná knihovna PDO a její metody prepare a execute. PDO neposkytuje všechny vymoženosti předchozích knihoven, chybí například podpora polí pro SQL dotaz INSERT INTO nebo podmínku WHERE IN. Při jejím rozšiřování si tak musíte dávat pozor na to, abyste do kódu nějakou zranitelnost nezavlekli.

Dalšími nástroji, které slouží pro testování zranitelnosti SQL Injection jsou např. Burp Suite, Zed Attack Proxy nebo dvojice sqlmap a nosqlmap. V každém případě takové nástroje zkoušejte pouze na vlastních webech a na webech, které jsou k testování buď výslovně určené nebo k tomu máte povolení provozovatele.

Přístupnost není jen o splnění norem: nový pohled na inkluzivní design

Přístupnost a inkluze možná nepatří mezi nejžhavější témata digitálního světa – dokud o nich nezačne mluvit Vitaly Friedman. Na WebExpo 2024 předvedl, že inkluzivní design není jen o splněných checkboxech, ale hlavně o lidech. S energií sobě vlastní obrátil zažité přístupy naruby a ukázal, že skutečně přístupný web je nejen možný, ale i nezbytný.

Efektivnější vývoj UI nebo API: Co si odnést z WebExpo 2025?

Různé
Komentáře: 0
Jak snadno implementovat moderní uživatelské rozhraní? Které funkce brzdí rychlost vašeho webu? A kdy raději sami přibrzdit, abychom využitím AI nepřekročili etické principy? Debatu aktuálních dev témat rozdmýchá sedmnáctý ročník technologické konference WebExpo, která proběhne v Praze od 28. do 30. května. Který talk či workshop si rozhodně nenechat ujít? Toto je náš redakční výběr z vývojářských hroznů.

Zapřáhněte AI jako nikdy předtím. Květnová konference WebExpo přivítá hvězdy technologického světa

Od 28. do 30. května 2025 promění pražský Palác Lucerna na tři dny technologická konference WebExpo. Na programu je více než 80 přednášek a workshopů od expertů z celého světa. WebExpo tradičně propojuje vývojáře, designéry, marketéry i byznysové lídry a nabízí praktické dovednosti, strategické myšlení a přináší nejnovější trendy nejen v oblasti AI.