Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License. The OWASP Foundation OWASP OWASP Meeting Blind SQL Injections Jacek Włodarczyk
OWASP 2 Forma prezentacji Forma dzisiejszej prezentacji będzie składać się z omówienia ataków typu Blind SQL Injection na przykładach praktycznych Wykorzystane środowisko to BT3 wraz z tym co oferuje ta wersja standardowo Wykorzystane przykłady dotyczą środowiska MySQL oraz aplikacji PHP
OWASP 3 Cel dzisiejszej prezentacji Przegląd przydatnych informacji Poznanie nazwy/wersji bazy danych/DBMS Poznanie nazwy tabeli Poznanie liczby kolumn w tabeli Poznanie liczby wierszy w tabeli Poznanie nazw pól tabeli Poznanie zawartości pól tabeli Posłużenie się automatem (skrypt) Krótka analiza IDS evasion
OWASP 4 Wstęp Ataki typu Blind SQL Injection, są to ataki, które dostarczaja informacji o atakowanym systemie DBMS na podstawie odpowiedzi 'True'/'False' Odpowiedzi 'True'/'False' są wynikiem odpowiednio spreparowanych żądań do serwera WWW Odpowiedzi 'True'/'False' mogą być przekazywane w różnych formach, w zależności od reakcji aplikacji na atak
OWASP 5 Ważne fakty Unie działają od wersji MySQL >= 4.0 Podzapytania (zapytania zagnieżdżone) od wersji MySQL >= 4.1 Baza information_schema od wersji MySQL >= 5.0
OWASP 6 'true'='true' dla różnych konstrukcji zapytań admin'-- ' or 0=0 -- " or 0=0 -- or 0=0 -- ' or 0=0 # " or 0=0 # or 0=0 # ' or 'x'='x " or "x"="x ') or ('x'='x
OWASP 7 'true'='true' dla różnych konstrukcji zapytań - C.D. ' or ''=' ' or a=a-- ') or ('a'='a ") or ("a"="a abc" or "a"="a abc" or 1=1 -- abc' or 1=1 -- abc' or 'a'='a abc') or ('a'='a abc")or("a"="a... itd.
OWASP 8 ' OR 1=1 - zamienniki ' OR 2=2 ' OR 1 ' OR TRUE ' OR 'tekst' = concat('tek','st') ' OR 'tekst' = 'tekst' ' OR 'tekst' IN ('tekst') ' OR 'tekst' like 'teks%' ' OR 2 > 1
OWASP 9 OR 1=1 – zamienniki C.D. ' OR 2 BETWEEN 1 AND 3 ' OR 'tekst' > 't' Z kolei znak większości lub mniejszości można zastąpić predykatem BETWEEN: OR id>1 może być wyrażone przez: OR id between 2 and 1e100
OWASP 10 Nazwa bazy danych/wersja DBMS Funkcja database() Nazwa bazy danych nie jest konieczna do wykonania skutecznego ataku Funkcja version() /*!... */ DEMO:
OWASP 11 Nazwa tabel(i) Select from – wiele wariantów information_schema.tables DUAL DEMO:
OWASP 12 Ilość kolumn i wierszy Group by Order by Union select Limit asc/desc DEMO:
OWASP 13 Nazwy pól Group by Order by Information_schema.columns DEMO:
OWASP 14 Zawartość tabeli – wiele możliwości Select if And if Ascii Ord Mid Substring Podzapytania Length benchmark
OWASP 15 Zawartość tabeli - C.D. Concat Char load_file Like Bit operators Compress DEMO:
OWASP 16 Automatyzacja Blind SQL Injection (brute force search) vs Blind SQL Injection (binary search) Różna ilość odpytań serwera Różnica w szybkości Wygoda w przypadku niestandardowych reakcji aplikacji (np. 302) DEMO:
OWASP 17 Koniec Pytania?