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.

Vite 8 Beta přináší nový bundler Rolldown a zásadní zrychlení buildů

Vite je moderní nástroj pro vývoj webových aplikací, který klade důraz na rychlost a jednoduchou konfiguraci. Umožňuje okamžitý start dev serveru a optimalizované produkční buildy, což urychluje vývoj i nasazení. Verze 8 Beta přináší zásadní změnu díky integraci bundleru Rolldown napsaného v Rustu, který sjednocuje vývojovou a produkční pipeline. Novinka výrazně zrychluje buildy a přináší moderní optimalizace. Součástí jsou také nové funkce pro TypeScript a připravovaný Full Bundle Mode pro rychlejší dev server.

Stack Overflow spouští AI Assist: nový nástroj pro moderní vývojáře

Stack Overflow představil AI Assist, nástroj, který propojuje generativní AI s rozsáhlou databází ověřených znalostí komunity. Platforma, která byla více než 18 let klíčovým zdrojem řešení pro vývojáře po celém světě, tím reaguje na změny ve způsobu práce s informacemi. Cílem AI Assist je zrychlit hledání odpovědí, zvýšit jejich spolehlivost a nabídnout kontext, který pomáhá lépe porozumět problému i řešení. Tento krok odráží trend, kdy se vývojáři čím dál více obracejí na nástroje, které dokážou kombinovat rychlost AI s ověřenými znalostmi komunity. AI Assist se tak stává mostem mezi tradičním Q&A formátem a moderními interaktivními asistenty.