WEP lekcja #5 – wprowadzenie do ciasteczek w PHP

Dzisiejsza piąta już lekcja wprowadzi Ciebie do zagadnień związanych z ciasteczkami (cookies) w protokole HTTP i języku programowania PHP. Jest to kluczowe zagadnienie do zrozumienia kolejnych dwóch lekcji, które pojawią się niebawem. Żeby nie przedłużać wyjaśnię pokrótce czym są ciasteczka.

Najprościej mówiąc są to malutkie pliki w przeglądarce internetowej, które mogą zapamiętywać pewne wartości. Swoim działaniem przypominają nieco zmienne poznane już wcześniej we wprowadzeniu do PHP. Stosuje się je ze względu na fakt, że sam protokół HTTP jest bezstanowy. Czyli każde zapytanie dowolnego użytkownika HTTP dla serwera jest nie powiązane z innym zapytaniem.

Materiał szkoleniowy ciasteczka w PHP – lekcja #5

Poniżej znajduje się główna treść tej lekcji. Porozmawiamy sobie o ciasteczkach i pewnych zagrożeniach z nimi związanych.

Fragment kodów źródłowych PHP o cookies

Poniżej zamieszczamy kody programów w języku PHP zademonstrowane w powyższej lekcji wideo.

Kod źródłowy programu ciasteczko1.php:

<?php
echo('Jestes w ciasteczko 1 ');
setcookie('imie', 'Patryk');

echo($_COOKIE['imie']);
?>

Kod programu ciasteczko2.php:

<?php
echo('CIASTKO 2! ');

echo($_COOKIE['imie']);
?>

Materiały dodatkowe Web Application Pentesting #5 o ciasteczkach

Jeśli nadal po filmie nie rozumiesz po co stosuje się ciasteczka to pozwolę sobie zacytować informacje o protokole HTTP z wikipedia.org:

Jest zaliczany do protokołów bezstanowych (ang. stateless) z racji tego, że nie zachowuje żadnych informacji o poprzednich transakcjach z klientem (po zakończeniu transakcji wszystko „przepada”). Pozwala to znacznie zmniejszyć obciążenie serwera, jednak jest kłopotliwe w sytuacji, gdy np. trzeba zapamiętać konkretny stan dla użytkownika, który wcześniej łączył się już z serwerem.


Warto zapoznać się dodatkowo we własnym zakresie z następującymi materiałami:

Praca domowa we własnym zakresie (cookie)

Kolejna porcja zadań do odrobienia we własnym zakresie z znajomości ciasteczek. Pod poniższymi zadaniami są jak zwykle odpowiedzi lub opcjonalnie podpowiedzi. Nie psuj sobie zabawy! Spróbuj najpierw rozwiązać samemu dany problem. Powodzenia!

-> Zadanie 1

Zapisz poniższy skrypt pod nazwą ciasteczko3.php:

<?php
echo('Ciasteczko3: ');
echo($_COOKIE['ciastko']);
?>

Twoje zadanie polega na wyświetleniu na stronie informacji „Ciasteczko3: jestem!” bez modyfikowania kodu PHP.

Prawidłowo powinno to wyglądać tak jak na poniższym obrazku. Do tej zabawy użyj tylko wtyczki Live HTTP Headers i Firefoxa/Chrome.

Wstrzyknięcie ciasteczka (cookie injection) i jego kradzież w Firefox
Tak powinna wyglądać strona ciasteczko3.php jeśli Ci się uda.
Podpowiedź #1 do zadania nr 1 - jeśli nie dajesz rady to spójrz!

Przejrzyj się za pomocą Live HTTP Headers jak wyglądają nagłówki HTTP, gdy przesyła przeglądarka ciasteczka. Możesz do obserwacji użyć przykładu z wideo ciasteczka1.php i ciasteczka2.php.

Następnie sfałszuj za pomocą Live HTTP Headers odpowiednie zapytanie….

Podpowiedź #2 do zadania nr 1 - jeśli nie dajesz rady to spójrz!

Jeśli chcesz sfałszować zapytanie:

  1. włącz rejestrowanie zapytań HTTP w Live HTTP Headers,
  2. odśwież w standardowy sposób stronę internetową w przeglądarce www,
  3. kliknij w Live HTTP Headers na zapytaniu które chcesz zmodyfikować,
  4. wciśnij przycisk Replay…,
  5. zmodyfikuj żądanie no i Replay,
  6. odśwież w standardowy sposób w przeglądarce stronę WWW i obejrzyj wyniki.

Uwaga! Rozwiązanie 1. Nie psuj sobie zabawy!

  1. włącz rejestrowanie zapytań HTTP w Live HTTP Headers,
  2. odśwież w standardowy sposób stronę internetową w przeglądarce www,
  3. kliknij w Live HTTP Headers na zapytaniu które chcesz zmodyfikować,
  4. wciśnij przycisk Replay…,
  5. zmodyfikuj żądanie dodając nagłówek Cookie: ciastko=jestem!  i wciśnij Replay,
  6. odśwież w standardowy sposób stronę w przeglądarce stronę WWW i obejrzyj swoje rozwiązanie z treści zadania.

[caption id="" align="aligncenter" width="581"]Dodanie ciasteczek w przeglądarce Mozilla Firefox Wstrzyknięty nagłówek Cookie ciastko=jestem! za pomocą wtyczki Live HTTP Headers.[/caption]

-> Zadanie 2

Przeanalizuj poniższy skrypt o nazwie logowanieCookie.php:

<?php

$login = $_POST['login'];
$haslo = $_POST['haslo'];
if (($login=='admin' && $haslo=='1234') || $_COOKIE['zalogowano']==1)
{
setcookie('zalogowano', '1');
echo('<br><br><h1>Czesc admin!</h1>');

} else 
{
setcookie('zalogowano', '0');
echo('<br><br><h1>Nie zalogowano!</h1>');
}
?>

<form action="logowanieCookie.php" method="POST">
Login: <input type="text" name="login">
Haslo: <input type="password" name="haslo">
<input type="submit">
</form>

Twoje zadanie jest następujące. Zaloguj się do powyższego panelu administratora bez użycia ataku brute-force, słownikowego i strzelania na ślepo hasła. Twoją bronią jest tylko Firefox i jego dodatki. Podpowiedź do samego kodu jest tutaj.

Uwaga! Jeśli przypadkowo się zalogujesz testując działanie skryptu, wyczyść ciasteczka w przeglądarce internetowej.

Uwaga! Rozwiązanie 1. Nie psuj sobie zabawy!

Wystarczy, że za pomocą dodatku Mozilla Firefox instalowanego w pierwszej lekcji o nazwie Web Developer, dodasz ciasteczko o nazwie zalogowano z wartością 1. Teraz odśwież stronę www.

[caption id="" align="aligncenter" width="566"]Dodawanie ciasteczek w Firefoxie Dodane ciasteczko zalogowano w dodatku Web Developer przeglądarki Mozilla Forefox.[/caption]

Objaśnienie: Skrypt z tego zadania nie wiele różni się od tych z poprzednich lekcji. Zostało jedynie w instrukcji warunkowej IF dodane sprawdzanie wartości ciasteczka  $_COOKIE[’zalogowano’]. Dodatkowo w dwóch miejscach użyta została funkcja php set cookie w celu ustawienia ciasteczka na wartości 0 w przypadku złego logowania i 1 w przypadku prawidłowego.

Jeśli ciasteczko ma wartość 1 to IF pomija sprawdzanie loginu i hasła i automatycznie loguje się (wyświetla „Czesc admin!”). Dlaczego tak się dzieje? Ponieważ tym razem użyliśmy operatora logicznego alternatywy. W języku potocznym jest to po prostu LUB. Możesz całość przeczytać tak: JEŻELI (login to admin I hasło to 1234 ) LUB ciasteczko to 1Z dosłownych podstaw szkolnej matematyki wiadomo, że alternatywa jest prawdziwa gdy chociaż jeden z jej argumentów jest prawdziwy.

Ciekawostka 1: Zadanie domowe nr 1 również mogłeś wykonać w ten sposób, ale było to nie zgodne z jego treścią.

Ciekawostka 2: Takie błędy w obsłudze ciasteczek również występowały w przeszłości i nadal występują w skryptach pisanych przez niedoświadczonych programistów. Warto analizować nie tylko działanie wizualne aplikacji webowej, ale i nagłówki HTTP wraz z ciasteczkami.

Podsumowanie o „słodkich” ciasteczkach

Ciasteczka występują dosłownie na każdej stronie i mało kto sobie z tego zdaje sprawę. Mogą służyć do podtrzymywania sesji zalogowanego użytkownika, śledzenia poczynań internautów w obrębie strony www i wiele wiele więcej. Jak widać w zadaniu drugim pracy domowej, nieprawidłowa implementacja pewnych mechanizmów na stronie WWW, może umożliwić obejście autoryzacji zupełnie bez znajomości loginu i hasła użytkownika.

Takie błędy nadal czasami się zdarzają i prowadzą do wielu nadużyć (nieraz wymaga to jednak wygenerowanie ciasteczka na komputerze hakera w sposób, który programista danego skryptu sobie wymyślił). Sztuka hakerska to kreatywność i główkowanie… W kolejnej lekcji dowiesz się, jak wykraść ciasteczka za pomocą kilku diabelnie groźnych narzędzi… PHP session id nadchodzi! Dlatego zalecam polajkowanie nas na fejsie, jeśli chcesz być na bieżąco i daniu suba na naszym kanale YT.

Dodaj komentarz

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