Materiał przerabiany przez uczniów Zespołu Szkół Publicznych nr 1 STO im. Rotmistrza Witolda Pileckiego
w roku szkolnym 2016/17.
UWAGA: W czasie CAŁEGO semestru będziemy używać programu (sniffera) Wireshark
Program Wireshark dostępny jest na tej stronie: https://www.wireshark.org/#download. Są wersje na każdy system operacyjny (włącznie z OS X).
Większość serwisów wspomaga algorytm HTTPS, jednak czasem możliwe jest wymuszenie braku szyfrowania poprzez "zabranie" litery "s" z paska adresu i przeładowanie strony
Klikamy prawym klawiczem na obszar pola tekstowego i wybieramy opcję "zbadaj element"/"inspect"/"Inspect Element" lub podobną. Jeżeli zaznaczyliśmy pole formularza musimy "przejść" kilka poziomów wyżej aby odnaleźć znacznik "FORM" i jego atrybut "action". Atrybut ten przechowuje adres (URL), pod który wysłany zostanie nasz formularz (wszystkie pola tekstowe, zaznaczone opcje itp). W naszym przypadku informacja zostanie wysłana na adres "/search" ("http://www.bing.com/search"). Adresu tego będziemy szukać w logach sniffera.
Po włączeniu łapania pakietów (ikona płetwy - trzecia od lewej) w snifferze Wireshark wpisujemy dowolny napis (w tym przypadku "samolot") i klikamy w formularz. Następnie wyłączamy łapanie pakietów (ikona czerwonego kwadratu - czwarta od lewej).
Dla szybszego wyszukiwania wpisujemy filtr "http" w pole filtrów sniffera. Szukamy adresu, który był ustawiony w znaczniku "FORM" ("/search").
Po zaznaczeniu pakietu w dolnej części ekranu rozwijamy odpowiedni protokół (http) i czytamy co dokładnie wysyła nasz komputer do serwera.
Nasze słowo kluczowe "samolot" zostało przekazane w parametrze o nazwie 'q'. Dodatkowo wysłane zostały inne informacje, które dla niektórych serwisów pozwalają na dodatkowe zmiany parametrów szukania. Znaczenie parametrów niestety nie zawsze jest wyjaśnione.
Zaznaczamy fragment kodu HTML, który odpowiada za wyświetlenie oraz wysłanie formularza.
Wklejamy kod do nowego dokumentu HTML (sniffer_formularz.html) a następnie zmieniamy atrybut "action" w znaczniku "FORM". Adres, na który wysłamy formularz to: http://users.pja.edu.pl/~kaszubat/superszkola/podsluch.php
Plik podsluch.php jest prostym programem w języku skryptowym PHP. Umieszczony jest na serwerze obsługującym skrypty PHP i jest dostępny z sieci Internet.
<?php
//parametr szukania jest w zmiennej
//$_GET["q"]
header('Location: http://www.bing.com/search?q='.$_GET["q"].' podsluchalem');
?>
Program odbiera formularz, i zmienia nagłówek "Location" powodując przeładowanie strony w przeglądarce. Adres podmieniamy na właściwą lokalizację (http://www.bing.com/search), parametr zapytania 'q' zostaje zmieniony. poprzez znak kropki dodajemy do parematru zapytania $_GET["q"] napis "podsluchalem'. Oczywiście kod pozbawiony jest jakiejkolwiek metody zapisu parametru, ale można w łatwy sposób dołożyć zapis do pliku lub do bazy danych.
Formularz pozbawiony reszty strony internetowej (stylów, grafiki i tekstu) prezentuje się niezbyt okazale. Pozostało tylko miejsce do wpisania tekstu do wyszukania oraz przycisk wysyłania.
Po wpisaniu zapytania i zatwierdzeniu go następuje wysłanie do serwera ze skryptem podsłuch.php zamiast do serwera bing.com .
Skrypt PHP modyfikuje zapytanie i odsyła z powrotem do przeglądarki prawdziwą lokalizację serwera (ale zapytanie już ma dodany nasz napis "podsłuchałem").
Przeglądarka automatycznie przeładowuje stronę. Jedyną rzecz, którą widzi użytkownik to zmodyfikowane oryginalne zapytanie.
Jeżeli nie zrobimy żadnej modyfikacji, tylko odeślemy zapytanie bez zmian, użytkownik nie ma szans zauważyć faktu, że braliśmy udział w komunikacji (oczywiście jeżeli użyje sniffera widać dodatkowe wysłanie informacji na nasz serwer ze skryptem php).
Możemy oczywiście podmienić całą stronę startową serwisu bing zapisując stronę na dysku jako plik Bing.html.
Poniżej screenshot formularza skopiowanego ze strony. Jak widać wygląda całkiem podobnie do oryginału.
Musimy zlokalizować miejsce formularza i zmodyfikować atrybut "action" wpisując adres naszego skryptu php.
Po uruchomieniu sniffera możemy podsłuchać jaka informacja faktycznie zostaje wysłana przez przeglądarkę i do kogo.
Widać dokładnie jak przeglądarka komunikuje się z kolejnymi serwerami. Opisując od góry:
Pakiet nr 37: Zapytanie GET (wysłanie formularza) na podmieniony przez nas adres. Jak widać widać nasze zapytanie w parametrze "q"
Pakiet nr 39: Odpowiedź naszego skryptu z kodem 302 Moved Temporarily (tymczasowa zmiana adresu). Użytkownik nie jest o tym informowany w żaden sposób, przeglądarka po prostu wysyła formularz w inne miejsce
Pakiet nr 47: Wysłanie zmodyfikowanego formularza do komputera bing (właściwego)
Pakiet nr 93: Odbiór strony z wynikiem zapytania
Jak widzimy w kolumnie "Time" różnica czasu między ostatnim zapytaniem (0.372 ms) i pierwszym (0.039ms) trwa jedną trzecią sekundy, także użytkownik nie zorientuje się, "że coś się dzieje".