Ataki XSS czyli Cross Site Scripting pozwalają atakującemu na wykonanie złośliwego kodu ( najczęściej javascript) po stronie przeglądarki. Kod może być przechowywany na serwerze ( stored xss), bądź też wykonaniu po uruchomieniu odpowiednio spreparowanego adresu url (reflected)

Istnieją trzy typy ataków XSS:

  1. Reflected XSS – “odbity XSS” – ładunek tj złośliwy kod przekazujemy w parametrach adresu url
  2. Persistent/Stored XSS – “zapisany XSS” – ładunek jest zapisany pod odpowiednio spreparowanym adresem url ( np zapisany w bazie w komentarzach)
  3. DOM based XSS –  ładunek ataku jest wykonywany w wyniku modyfikacji “środowiska” DOM ​​w przeglądarce ofiary

Więcej informacji o tym czym są ataki xss można przeczytać na wikipedii  – w tym wpisie skupimy się na części praktycznej

Jak zweryfikować podatność na ataki XSS

Wstępnym testem na podatność może być podanie jako parametrów znaków:

Aby bezpłatnie odblokować dalszą treść kliknij "Zapisz się" - dostaniesz nielimitowany dostęp do wszystkich treści i wyślę Ci na maila kilka wyjątkowych bonusów !!
Jeśli jesteś już zapisany - Kliknij "Zaloguj się" i podaj swojego maila - treść zostanie odblokowana:
Zaloguj się lub Zapisz się
Sprawdź Przejdź do zapisu
Anuluj
Dalsza część artykułu jest dostępna tylko dla zapisanych do newslettera. Aby zapisać się do newslettera Kliknij tutaj , lub wypełnij pola w bocznym panelu.
Jeśli jesteś już zapisany - podaj poniżej swój adres e-mail: Odblokuj
adotpay
Anuluj
Jeśli zostaną one poprawnie przeparsowane to jest duża szansa że atak się uda.

Atak XSS w praktyce

Do przeprowadzania testów polecam użyć frameworka DVWA – najwygodniej uruchomić go jako kontener dockera:

Po uruchomieniu kontenera pod adresem http://localhost:8080 ( domyślny login to admin, a haslo: password) mamy możliwość przeprowadzania testów xss:

xss

Zanim zaczniemy “hakować” warto zapoznać się z trzema przydatnymi opcjami:
1) Security Level (lewy dolny róg obrazka)- poziom zabezpieczeń po stronie kodu, im wyższy tym trudniej wykorzystać podatność
2) View Source (prawy dolny róg) – podgląd kodu źródłowego
3) View Help – pomoc i wskazówki do udanego ataku.

Ok, zaczynajmy!

Atak XSS – Security Level : low

Formularz pobierający zmienną i przekazujący ją bezpośrednio jako parametr – tutaj wystarczy dowolny kod javascript np.:

Atak XSS – Security Level : medium

Na tym poziomie ( poziom zmieniamy w zakładce “DVWA Security”) z przekazywanego żądania usuwany jest ciąg znaków “<script>”. Wystarczy więc zmienić wielkość liter:

Atak XSS – Security Level : high

Na tym poziomie sprawdzana jest dodatkowo wielkość znaków,  więc poprzedni kod się nie wykona poprawnie ( nie zwróci nam okienka z “123”).
Aby ominąć to zabezpieczenie możemy użyć innych znaczników html:

Inne metody wykorzystania podatności XSS

Jak widzisz XSS nie ogranicza się tylko do prostego kodu w tagach script – można go wykorzystać w wielu innych przypadkach,  o których często zapominają programiści.

Poniżej kilka gotowców które spowodują pokazanie alertu – wystarczy więc odpowiednio zweryfikować dane przesyłane do serwera, sprawdzić zwrócony kod odpowiedzi i odpowiednio zmodyfikować żądanie:

Dodatkowo należy pamiętać że niektóre znaki mogą być odpowiednio kodowane co również może zmylić filtry.

Więcej praktycznych przykładów można znaleść tutaj

Czy ataki XSS to tylko wyskakujące okienka?

Nie, okienka to najbardziej “widoczny” sposób na pokazanie podatności XSS. Najczęściej ta podatność jest wykorzystywana do załadowania (uruchomienia) odpowiedniego pliku javascript i tym samym przejęcia kontroli nad przeglądarką użytkownika.
W tym celu często używany jest “kombajn” BeEF – jednak ten wpis ma charakter wyłącznie edukacyjny i omawianie tego narzędzia moja się z celem.