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.

Proč vám model napíše Python, i když jste si řekli o Rust

AI
Komentáře: 0
Výkonnostní propast mezi Pythonem a ostatními jazyky se za poslední rok a půl skoro zavřela. Dnešní modely zvládají Rust i Go srovnatelně dobře. Když jim ale volbu necháte, sáhnou stejně po Pythonu. A u knihoven je to ještě výraznější: mezi funkčně srovnatelnými balíčky je až 84procentní rozdíl v kvalitě generovaného kódu. Proč to tak je a co s tím.

WP2Shell: Kritická hrozba pro samotné jádro WordPressu. Útočníci mohou získat kontrolu nad webem

Zranitelnost ve WordPressu není žádná novinka. Kdo provozuje weby postavené na této platformě, ví, že bezpečnostní záplaty chodí prakticky pořád. O to větší pozornost by měla vzbudit chyba, u které nic z toho neplatí. A přesně takový je případ zranitelnosti, která dostala přezdívku wp2shell. potřeb. Zranitelný kontaktní formulář, děravý e-shopový plugin, opomenutá kontrola oprávnění v nějaké obskurní rozšiřující knihovně – to je denní chleba každého, kdo sleduje bezpečnostní feedy. Zpráva „nová chyba ve WordPress pluginu“ má tak nízkou informační hodnotu, že ji většina lidí přejde bez mrknutí oka.

Mýtus jedné aplikace: proč PWA nenahradí vývoj pro každou platformu

PWA mohou webu přidat ikonu na ploše, fungování bez připojení, notifikace a některé systémové funkce. Nejsou ale cestou k jednomu klientu pro všechny platformy. Vyplatí se tam, kde se lidé k webu vracejí a ocení okamžitý vstup z odkazu. Jakmile aplikace musí spolehlivě běžet na pozadí nebo fungovat stejně na každém zařízení, bývá vhodnější nativní řešení.