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:
- Reflected XSS – “odbity XSS” – ładunek tj złośliwy kod przekazujemy w parametrach adresu url
- Persistent/Stored XSS – “zapisany XSS” – ładunek jest zapisany pod odpowiednio spreparowanym adresem url ( np zapisany w bazie w komentarzach)
- 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:
Jeśli jesteś już zapisany - Kliknij "Zaloguj się" i podaj swojego maila - treść zostanie odblokowana:
Atak XSS w praktyce
Do przeprowadzania testów polecam użyć frameworka DVWA – najwygodniej uruchomić go jako kontener dockera:
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.:
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:
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:
1 | <body onload=alert('test1')> |
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:
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.