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.

Rok po Shai-Hulud: co se změnilo na npm a co musíte udělat do ledna

Před rokem začal registrem npm procházet samošířící červ Shai-Hulud. Od té doby se útoky na dodavatelský řetězec JavaScriptu staly pravidelnou záležitostí a npm postupně přepisuje pravidla publikování. Projdeme, co se za ten rok stalo, jak dnes bezpečně publikovat balíček, co musíte stihnout do ledna 2027 a jak se bránit jako uživatel balíčků.

Vercel zrychlil směrování v CDN. Překvapivě pomohly menší bloky

Vercel zrychlil směrování v CDN tím, že začal načítat víc dat najednou. U velkých webů mu po každém nasazení scházely v cache údaje o mnoha jednotlivých cestách, takže je musel opakovaně dohledávat. U nových bloků metadat Vercel naměřil o 91 % kratší dobu tohoto hledání v 99. percentilu. Cesta k výsledku ale vedla přes nečekané zjištění: příliš velký blok se při vyřizování požadavků nevyplatil.

GraphQL: Alternativa k REST API zblízka

Když se dnes navrhuje nové API, většina vývojářů automaticky sáhne po RESTu. Je to pochopitelné: REST je jednoduchý, dobře zdokumentovaný, podporují ho všechny jazyky a frameworky a většina z nás s ním pracuje léta. Přesto se v posledních letech stále častěji objevuje otázka, zda je REST vždy tou nejlepší volbou. Nejčastěji zmiňovanou alternativou je GraphQL, dotazovací jazyk pro API, který vznikl ve Facebooku a který dnes používají firmy jako GitHub, Shopify nebo Netflix.