Wybrane podatności aplikacji webowych - Michał Sajdak

32
Wybrane podatności w aplikacjach webowych Michał Sajdak, CISSP, CEH, CTT+ www.securitum.pl www.sekurak.pl

Transcript of Wybrane podatności aplikacji webowych - Michał Sajdak

Page 1: Wybrane podatności aplikacji webowych - Michał Sajdak

Wybrane podatności w aplikacjach webowych

Michał Sajdak, CISSP, CEH, CTT+

www.securitum.pl

www.sekurak.pl

Page 2: Wybrane podatności aplikacji webowych - Michał Sajdak

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

Page 3: Wybrane podatności aplikacji webowych - Michał Sajdak

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

Page 4: Wybrane podatności aplikacji webowych - Michał Sajdak

Cisco RVS 4000

Security router

VPN, Firewall, IPS, …

4 Copyright 2015 Securitum

www.securitum.pl

Page 5: Wybrane podatności aplikacji webowych - Michał Sajdak

Cisco RVS 4000

5 Copyright 2015 Securitum

www.securitum.pl

Page 6: Wybrane podatności aplikacji webowych - Michał Sajdak

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

Page 7: Wybrane podatności aplikacji webowych - Michał Sajdak

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

Page 8: Wybrane podatności aplikacji webowych - Michał Sajdak

8 Copyright 2014 Securitum

www.securitum.pl

Page 9: Wybrane podatności aplikacji webowych - Michał Sajdak

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

Page 10: Wybrane podatności aplikacji webowych - Michał Sajdak

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

Page 11: Wybrane podatności aplikacji webowych - Michał Sajdak

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

Page 12: Wybrane podatności aplikacji webowych - Michał Sajdak

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

Page 13: Wybrane podatności aplikacji webowych - Michał Sajdak

OS Command Exec – JBoss Seam

Zobaczmy

13 Copyright 2014 Securitum

www.securitum.pl

Page 14: Wybrane podatności aplikacji webowych - Michał Sajdak

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

Page 15: Wybrane podatności aplikacji webowych - Michał Sajdak

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

Page 16: Wybrane podatności aplikacji webowych - Michał Sajdak

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

Page 17: Wybrane podatności aplikacji webowych - Michał Sajdak

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

Page 18: Wybrane podatności aplikacji webowych - Michał Sajdak

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

Page 19: Wybrane podatności aplikacji webowych - Michał Sajdak

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

Page 20: Wybrane podatności aplikacji webowych - Michał Sajdak

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

Page 21: Wybrane podatności aplikacji webowych - Michał Sajdak

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

Page 22: Wybrane podatności aplikacji webowych - Michał Sajdak

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

Page 23: Wybrane podatności aplikacji webowych - Michał Sajdak

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

Page 24: Wybrane podatności aplikacji webowych - Michał Sajdak

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

Page 25: Wybrane podatności aplikacji webowych - Michał Sajdak

XXE (XML eXternal Entities)

Encje znany z HTML-a: &lt; lub &#60;

<

&quot; &apos; &amp; &micro; … Ogólnie:

&nazwa_encji; &#numer_encji;

25 Copyright 2014 Securitum

www.securitum.pl

Page 26: Wybrane podatności aplikacji webowych - Michał Sajdak

Renderowanie encji w HTML

W XML-u: działa to podobnie…

26 Copyright 2014 Securitum

www.securitum.pl

Page 27: Wybrane podatności aplikacji webowych - Michał Sajdak

XXE (XML eXternal Entities)

… możemy definiować własne encje

<!ENTITY name "value">

27 Copyright 2014 Securitum

www.securitum.pl

Page 28: Wybrane podatności aplikacji webowych - Michał Sajdak

28 Copyright 2014 Securitum

www.securitum.pl

Page 29: Wybrane podatności aplikacji webowych - Michał Sajdak

29

Page 30: Wybrane podatności aplikacji webowych - Michał Sajdak

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

Page 31: Wybrane podatności aplikacji webowych - Michał Sajdak

Dziękuję za uwagę

Pytania?

Kontakt: [email protected]

http://securitum.pl/

Szkolenia / testy bezpieczeństwa aplikacji

31 Copyright 2014 Securitum

www.securitum.pl

Page 32: Wybrane podatności aplikacji webowych - Michał Sajdak

32