170 likes | 301 Views
Jacek Włodarczyk jacekwlo@gmail.com. OWASP Meeting Blind SQL Injections. 12.02.2009. Forma prezentacji. Forma dzisiejszej prezentacji będzie składać się z omówienia ataków typu Blind SQL Injection na przykładach praktycznych
E N D
Jacek Włodarczyk jacekwlo@gmail.com OWASP MeetingBlind SQL Injections 12.02.2009
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
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
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
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
'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
'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.
' 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
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
Nazwa bazy danych/wersja DBMS Funkcja database() Nazwa bazy danych nie jest konieczna do wykonania skutecznego ataku Funkcja version() /*! ... */ DEMO:
Nazwa tabel(i) Select from – wiele wariantów information_schema.tables DUAL DEMO:
Ilość kolumn i wierszy Group by Order by Union select Limit asc/desc DEMO:
Nazwy pól Group by Order by Information_schema.columns DEMO:
Zawartość tabeli – wiele możliwości Select if And if Ascii Ord Mid Substring Podzapytania Length benchmark
Zawartość tabeli - C.D. Concat Char load_file Like Bit operators Compress DEMO:
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:
Koniec Pytania?