Cross-Site Scripting - na czym polega atak XSS

Czy wiesz, że haker może Cię zhakować, nie hakując Ciebie?

W tym artykule poznasz rodzaje ataków hackerskich, a dokładnie jeden rodzaj – atak XSS, czyli Cross-Site scripting. Zacznijmy może od tego całego XSS, co to jest XSS i z czym to się je. Atak XSS, czyli Cross-Site- Scripting jest to nic innego jak poważna luka w zabezpieczeniach webaplikacji.

przemek szmajPrzemysław Szmaj. Test Engineer w Nokia. Fanatyk etycznego hackingu i cyberbezpieczeństwa. Autor kanału na YouTube o tematyce etycznego hackingu. Godzinami może rozmawiać bez przerwy o zagadnieniach związanych z hackingiem. Absolwent Informatyki na Wydziale Matematyki, Fizyki i Informatyki na Uniwersytecie Opolskim.


Podatność XSS polega na tym, że atakujący wykorzystuje błąd implementacji zabezpieczeń po stronie serwera/webaplikacji, który polega na braku filtrowania wprowadzanych danych przez użytkowników na stronie www. Atakujący wstrzykuje złośliwy kawałek kodu napisanego w języku JavaScript lub w innym języku skryptowym – w dowolnym polu na przykładowej stronie www (pod warunkiem, że jest taka możliwość. Np. pole do skomentowania lub jakiś formularz).

Tak wstrzyknięty złośliwy urywek kodu (co zobaczysz w dalszej części tego artykułu) trafia na serwer, a przy ponownym załadowaniu strony przez dowolnego użytkownika na stronie (lub jej odświeżeniu, bo przecież przy odświeżaniu strony, kod źródłowy jest ponownie zaciągany z serwera), zbiera swoje żniwo.

Jakie są skutki ataku XSS?

Otóż, wyobraźmy sobie, że znajdujemy się na naszej ulubionej stronie czy jakimś portalu społecznościowym jak przystało na każdej takiej stronie, możemy coś zamieścić, opublikować, polubić czy skomentować. Dla przykładu powiedzmy, że godzinę po naszej ostatniej wizycie dostajemy telefon od znajomego z zapytaniem, czemu publikujemy dziwne posty i piszemy wiadomości do znajomych z prośbą o pilną pożyczkę kasy… i tu zapala nam się lampka – co jest grane?

Otóż za pomocą ataku XSS atakujący może wykraść nasze ciasteczka (cookies), w których jest zapisany nasz identyfikator sesji – czyli mówiąc najprościej, jak się da – może się zalogować na nasze konto bez posiadania loginu i hasła… – taki scenariusz przedstawimy sobie za chwilkę. Zacznijmy od czegoś prostszego.

Prosty przykład

Zacznijmy od najprostszego przykładu, abyśmy dobrze zrozumieli zamysł całego XSS’a. Poniżej zobaczymy przykład poprawnego, jak i błędnego filtrowania wprowadzonych danych przez użytkownika na testowej stronie, która znajduje się w bezpiecznym kontrolowanym środowisku.

Poniższy rysunek pokazuje nam poprawne filtrowanie wprowadzonych danych. Użytkownik wprowadził w pole tekstowe nagłówek z języka HTML oznaczające wielkość h1 wraz z napisem Just Join It, a następnie przesłał je na serwer. Po ponownym załadowaniu strony otrzymał informację zwrotną. Oczywiście w tym przypadku filtrowanie po stronie serwera zadziałało poprawnie i użytkownik zamieścił wpis na stronie, który wygląda jak kawałek kodu <h1>JustJoinIT</h1>, co ilustruje poniższy rysunek.

XSS - poprawne filtrowanie danych

Poprawne filtrowanie wprowadzonych danych

Skoro już wiemy, jak wygląda poprawne filtrowanie danych, teraz zobaczmy, co się stanie, w chwili gdy serwer nie będzie poprawnie filtrował wprowadzonych danych, lub wcale nie będzie ich filtrował. Scenariusz jest taki sam, użytkownik wprowadził w pole tekstowe nagłówek z języka HTML oznaczający wielkość h1 wraz z napisem Just Join It, a następnie przesłał je na serwer. Tylko tym razem efekt był całkiem inny, co możemy zobaczyć poniżej.

XSS - błędne filtrowanie danych

Błędne filtrowanie wprowadzonych danych

Jak widzimy, po ponownym załadowaniu strony, ukazał nam się czerwony napis w postaci dużego nagłówka z napisem “JustJoinIT”, co jednoznacznie oznacza, że filtrowanie po stronie serwera nie działa tak, jak powinno co może narazić wszystkich użytkowników, bez wyjątku. W takim przypadku nie ma znaczenia, jaki użytkownik odwiedzi stronę, każdemu wyświetli się taki napis. Oczywiście możliwości na wykorzystanie takiego błędu jest sporo – tutaj wystarczy dobra umiejętność posługiwania się HTML’em czy JavaScriptem.  

Dla przykładu użytkownik może wkleić kawałek kodu – <script> location.href =”www.justjoin.it”; <script>, który po przesłaniu na serwer i po ponownym załadowaniu strony, każdy użytkownik, który wjedzie na stronę – automatycznie zostanie przekierowany na stronę najlepszego portalu z ogłoszeniami o pracę – Just Join IT.

XSS – logowanie bez znajomości loginu i hasła

Czy za pomocą XSS’a można zalogować się na cudze konto bez loginu i hasła? A owszem. Wystarczy, że atakujący wstrzyknie odpowiedni kawałek złośliwego kodu, a strona zostanie ponownie zaczytana, co ilustruje rysunek poniżej.

XSS - logowanie na konto bez znania loginu i hasła

Przed wstrzyknięciem złośliwego kodu atakujący przygotowuje narzędzie, które będzie nasłuchiwało komunikacje, a w chwili wejścia na zainfekowaną stronę przechwyci Cookie sesji użytkownika, które przy odpowiednim użyciu pozwoli na zalogowanie się bez loginu i hasła do konkretnego konta, co stanowi realne zagrożenie dla wszystkich użytkowników. Poniższy rysunek przedstawia przechwycone dane, które są zaznaczone kolorem czerwonym.

XSS - przechwycone dane dzięki Cross-Site Scripting

Jak widzimy atakującemu udało się przechwycić cookie sesyjne a w późniejszym etapie atakujący może rozpocząć inne czynności – logowanie się na konto, przeszukiwanie konta pod względem cennych informacji…

Mam nadzieje, że po przeczytaniu tego krótkiego artykułu, zrozumiesz sposób działania XSS i jeśli kiedyś będziesz administratorem strony czy serwera – będziesz pamiętał o włączeniu filtrowania wprowadzanych danych przez użytkowników.


Zdjęcie główne artykułu pochodzi z unsplash.com

Zapraszamy do dyskusji

Patronujemy

 
 
More Stories
Microsoft Windows 365 Cloud PC
Microsoft Windows 365 Cloud PC – nadchodzą komputery na abonament