Dzisiaj wracamy do najpopularniejszych ataków na aplikacje webowe. Tym razem zabieramy się za przechwytywanie danych – rodzaj ataku bardziej znany jako ang. Session Hijacking, który pozwala atakującemu przejąć oraz korzystać z sesji, która została nawiązana przez danego użytkownika w sposób autoryzowany.

Po przechwyceniu sesji ofiary, wszystkie akcje są wykonywane przez atakującego „na koszt ofiary”.

Na czym polega atak typu Session Hijacking?

Atak polega na zdobyciu aktywnej sesji ofiary wykradając w ten sposób jej tożsamość.

Przechwytywanie sesji może odbywać się na wiele sposobów. Najpopularniejszym i najbardziej znanym sposobem jest ten z wykorzystaniem dodatkowej podatności w aplikacji webowej – Cross Site Scripting, która została opisana w jednym z poprzednich artykułów.

Natomiast przechwycenie sesji z wykorzystaniem podatności XSS jest tylko jednym z przykładów, drugą metodą może być np. wcześniejsze zainfekowanie komputera ofiary bądź podsłuchanie komunikacji sieciowej ofiary z daną aplikacją.

Scenariusz ataku Session Hijacking może wyglądać następująco:

  1. Atakujący osadza w danej aplikacji webowej złośliwy kod javascriptowy, wykorzystując podatność typu XSS,

2. Ofiara loguje się w sposób prawidłowy do aplikacji webowej, w której atakujący osadził złośliwy kod,

3. Po zalogowaniu się z sukcesem, złośliwy kod javascriptowy uruchamia się,

4. Po uruchomieniu się tego kodu, ciasteczka sesyjne ofiary zostają odesłane do atakującego,

5. Atakujący loguje się do aplikacji webowej i używa wykradzionych ciasteczek sesyjnych jako swoich, uzyskując tym samym sesję ofiary.

Przykładowy atak

Adres IP atakowanej aplikacji: 10.0.2.21

Adres IP atakującego: 10.0.2.15 (Kali Linux)

Adres IP ofiary, której sesja zostanie przechwycona przez atakującego: 10..0.2.25 (Windows)

Ofiara zalogowana jest do aplikacji jako użytkownik admin co obrazuje poniższy zrzut ekranu:

Natomiast atakujący zalogowany jest jako użytkownik pablo.

Atakujący znajduje podatność typu Stored Cross Site Scripting i w aplikacji osadza złośliwy kod, który ma za zadanie wykraść ciasteczka sesyjne ofiary. Następnie użyje ich jako swoich i w efekcie „przeskoczy” ze swojej sesji ustanowionej na użytkownika pablo na sesję ofiary ustanowionej na użytkownika admin.

Atakujący osadza złośliwy kod XSS:

Następnie ofiara wchodzi na zasób z wstrzykniętym powyższym złośliwym kodem Javascriptowym, który będzie wykradał różnego typu dane o przeglądarce i sesji ofiary.

W efekcie czego, atakujący uzyskuje dane o sesji ofiary.

I w konsekwencji…

Czyli atakujący widzi jakie ciasteczka sesyjne posiada ofiara. To daje atakującemu możliwość podmiany swojego parametru PHPSESSIONID przez wykradzioną wartość parametru PHPSESSIONID z ciasteczka sesyjnego ofiary.

Zrzut ekranu z oryginalnymi ciasteczkami sesyjnymi atakującego

Na powyższym i poniższym zrzucie ekranu widać operację wspomnianego podłożenia wartości parametru PHPSESSIONID.

Zrzut ekranu z podmienionym parametrem PHPSESSIONID

Efekt podmiany parametru PHPSESSIONID powoduje że atakujący (który wcześniej miał uprawnienia użytkownika pablo) przechwycił sesję ofiary, uzyskując tym samym sesję użytkownika admin.