WEP lekcja #13 – Atak XSS (cross-site scripting) wprowadzenie

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:

Jak włamać się na stronę internetową? | KURS – XSS #1

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.

Uwaga! Rozwiązanie 1. Nie psuj sobie zabawy!
Poniżej znajduje się podstawowy skrypt PHP wyświetlający tekst wprowadzony od użytkownika:

<?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"]Typowy przykład wykonania powyższego kodu demonstrujący atak hakera reflected xss (cross-site scripting) 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 &lt; i &gt;.

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! 😉

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *