W dzisiejszej lekcji wprowadzę Ciebie do świata ataków XSS (cross-site scripting). Jest to jedna z najczęściej występujących podatności na stronach internetowych. Jej idea jest bardzo prosta. Programista jak zwykle zapomniał o filtrowani i walidacji danych pochodzących od internauty i je po prostu w pewnym miejscu strony wyświetla.
Dzięki tej właściwości zły haker może osadzić złośliwy kod HTML i JavaScript na stronie internetowej. Za pomocą luki XSS i właściwie spreparowanemu kodu JS, może wykonać on w sposób zupełnie automatyczny poznany przez Ciebie już atak CSRF lub dokonać kradzieży ciasteczek sesyjnych (cookies) logując się bez hasła.
Wideo szkoleniowe o ataku XSS, czyli cross site scripting
Poniżej znajduje się pierwsze wideo z cyklu ataków cross-site scripting wprowadzające Ciebie w ich tajniki. Dowiesz się z niego przede wszystkim o różnicach pomiędzy luką reflected XSS a stored XSS.
Różnice pomiędzy reflected XSS a stored xss
Bardzo łatwo zapamiętać czym obie podatności się różnią. Pierwsza z nich reflected XSS to po prostu mechanizm strony, który jednorazowo wyświetla wprowadzoną przez użytkownika wartość z formularza lub adresu URL. Przykładem mogą być wyszukiwarki internetowe. W drugim przypadku ta wartość jest tymczasowo lub na stałe przechowywana po stronie serwera. Typowe mechanizmy aplikacji webowych mogące potencjalnie posiadać lukę stored XSS to:
- system komentarzy,
- forum internetowe,
- księga gości,
- mechanizmy wyświetlające logi systemowe (np: User-Agent),
- strony profilowe z danymi użytkownika,
- menadżery plików (XSS w nazwie lub metadanych pliku),
- inne.
Więcej na temat ataków XSS znajdziesz w jednym z naszych poprzednich wpisów objaśniających ten typ ataku na użytkownika strony internetowej:
Praca domowa
-> Zadanie 1
Przyjrzyj się funkcji htmlspecialchars() języka PHP (użyj do tego celu Internetu) i napisz dowolny prosty skrypt wyświetlający informacje wprowadzoną przez użytkownika strony. Odpowiedz sobie na pytanie czym różni się wyświetlenie informacji w zwykły sposób za pomocą echo od wyświetlenia z wykorzystaniem z tej funkcji.
<?php echo '<b>Wiadomosc z funkcja htmlspecialchars:</b> '.htmlspecialchars($_GET['wiadomosc']); echo '<br><b>Bez htmlspecialchars:</b> '.$_GET['wiadomosc']; ?>
W celu jego przetestowania wystarczy, że w pasku adresu wprowadzisz w parametrze wiadomosc dowolny ciąg znaków (najlepiej z tagami html) np:
http://localhost/test.php?wiadomosc=<spain%20color="red">SI<b>EM</b>A!</spain>
Tego typu podatność to przykład luki reflected XSS.
[caption id="" align="aligncenter" width="595"] Efekt działania funkcji konwertującej tagi html htmlspecialchars() pozornie broniącej przed atakiem reflected xss.[/caption]
Funkcja htmlspecialchars() umożliwia przefiltrowanie i konwersje wprowadzonego ciągu znaków pod względem występowania tagów HTML. Znaczniki języka HTML zamieniane są na ich odpowiedniki z tablicy znaków specjalnych HTML. Przykładowo nawiasy ostrokątne < > mogą zostać zamienione na ich odpowiedniki języka HTML < i >.
Podsumowanie o atakach XSS
Mam nadzieje, że po tym wprowadzeniu już wiesz czym jest atak XSS. Tego typu podatność tak naprawdę ostatecznie wykorzystywana jest przeciwko innym użytkownikom strony internetowej, a nie jej samej. Wbrew pozorom o czym przekonasz się z następnej lekcji naszych filmowych poradników, oba typy podatności cross-site scripting mogą być bardzo groźne i opłakane w skutkach. Zademonstrujemy oczywiście w kolejnych filmach metodę kradzieży ciasteczek użytkownika i sposobu na proste wykonanie automatycznego ataku CSRF. W ostatniej lekcji cyklu XSS będzie oczywiście aplikacja bomba. Powodzenia w pracy domowej! 😉