<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCYJNY**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
Datę wygaśnięcia ciasteczka określa atrybut `Expires`. Z kolei atrybut `Max-age` definiuje czas w sekundach do momentu usunięcia ciasteczka. **Wybierz `Max-age`, ponieważ odzwierciedla nowoczesne praktyki.**
Hosty, które otrzymają ciasteczko, są określone przez atrybut `Domain`. Domyślnie jest ustawiony na host, który wydał ciasteczko, nie obejmując jego subdomen. Jednak gdy atrybut `Domain` jest jawnie ustawiony, obejmuje również subdomeny. Sprawia to, że określenie atrybutu `Domain` jest mniej restrykcyjną opcją, przydatną w sytuacjach, gdzie konieczne jest udostępnianie ciasteczek między subdomenami. Na przykład, ustawienie `Domain=mozilla.org` sprawia, że ciasteczka są dostępne na jego subdomenach, takich jak `developer.mozilla.org`.
Konkretna ścieżka URL, która musi być obecna w żądanym URL-u, aby został wysłany nagłówek `Cookie`, jest wskazana przez atrybut `Path`. Ten atrybut traktuje znak `/` jako separator katalogów, umożliwiając dopasowania w podkatalogach.
Pamiętaj, że podczas konfigurowania ciasteczek zrozumienie tych atrybutów może pomóc w zapewnieniu, że zachowują się zgodnie z oczekiwaniami w różnych scenariuszach.
Tabela z [Invicti](https://www.netsparker.com/blog/web-security/same-site-cookie-attribute-prevent-cross-site-request-forgery/) i nieco zmodyfikowana.\
Ciasteczko z atrybutem _**SameSite**_ pomoże **zmniejszyć ataki CSRF**, gdy wymagana jest zalogowana sesja.
**\*Zauważ, że od Chrome 80 (luty 2019) domyślne zachowanie ciasteczka bez atrybutu SameSite** **będzie luźne** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
Zauważ, że tymczasowo, po zastosowaniu tej zmiany, **ciasteczka bez polityki SameSite****w Chrome będą traktowane jako None** podczas **pierwszych 2 minut, a następnie jako Lax dla żądań POST z najwyższego poziomu między witrynami.**
* Jeśli strona **wysyła ciasteczka jako odpowiedź** na żądania (na przykład na stronie **PHPinfo**), możliwe jest wykorzystanie XSS do wysłania żądania do tej strony i **ukradzenia ciasteczek** z odpowiedzi (sprawdź przykład w [https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/).
* To można ominąć za pomocą żądań **HTTP TRACE** jako odpowiedź serwera (jeśli ta metoda HTTP jest dostępna) odzwierciedli wysłane ciasteczka. Ta technika nazywa się **Śledzenie między witrynami**.
* Ta technika jest unikana przez **nowoczesne przeglądarki, które nie zezwalają na wysyłanie żądania TRACE** z JS. Jednak znaleziono pewne sposoby obejścia tego w określonym oprogramowaniu, takie jak wysyłanie `\r\nTRACE` zamiast `TRACE` do IE6.0 SP2.
* Innym sposobem jest wykorzystanie podatności zero/dnia przeglądarek.
* Możliwe jest **nadpisanie ciasteczek HttpOnly** poprzez przeprowadzenie ataku przepełnienia Cookie Jar:
Ważne jest zauważenie, że ciasteczka z prefiksem `__Host-` nie mogą być wysyłane do naddomen ani subdomen. To ograniczenie pomaga w izolowaniu ciasteczek aplikacji. Dlatego stosowanie prefiksu `__Host-` dla wszystkich ciasteczek aplikacji można uznać za dobrą praktykę w celu zwiększenia bezpieczeństwa i izolacji.
Więc jedną z ochron przed ciasteczkami z prefiksem `__Host-` jest zapobieganie ich nadpisywaniu z subdomen. Zapobieganie na przykład atakom [**Cookie Tossing**](cookie-tossing.md). W prezentacji [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F\_wAzF4a7Xg) ([**dokument**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) przedstawiono, że było możliwe ustawienie ciasteczek z prefiksem \_\_HOST- z subdomeny, oszukując parser, na przykład dodając "=" na początku lub na początku i na końcu...:
W PHP było również możliwe dodanie **innych znaków na początku** nazwy ciasteczka, które miały zostać **zamienione na podkreślenia**, umożliwiając nadpisanie ciasteczek `__HOST-`:
Wrażliwe dane osadzone w ciasteczkach powinny zawsze być dokładnie sprawdzane. Ciasteczka zakodowane w Base64 lub podobnych formatach często mogą być zdekodowane. Ta podatność pozwala atakującym zmieniać zawartość ciasteczka i podszywać się pod innych użytkowników, kodując zmodyfikowane dane z powrotem do ciasteczka.
Ten atak polega na kradzieży ciasteczka użytkownika w celu uzyskania nieautoryzowanego dostępu do jego konta w aplikacji. Korzystając z ukradzionego ciasteczka, atakujący może podszywać się pod prawowitego użytkownika.
W tym scenariuszu atakujący oszukuje ofiarę, aby użyła określonego ciasteczka do zalogowania się. Jeśli aplikacja nie przypisuje nowego ciasteczka po zalogowaniu, atakujący, posiadając oryginalne ciasteczko, może podszyć się pod ofiarę. Ta technika polega na tym, że ofiara loguje się za pomocą ciasteczka dostarczonego przez atakującego.
Tutaj atakujący przekonuje ofiarę do użycia ciasteczka sesji atakującego. Ofiara, wierząc, że jest zalogowana do swojego konta, nieumyślnie wykonuje czynności w kontekście konta atakującego.
Tokeny JSON Web (JWT) używane w ciasteczkach mogą również zawierać podatności. Aby uzyskać szczegółowe informacje na temat potencjalnych wad i jak je wykorzystać, zaleca się zapoznanie się z podlinkowanym dokumentem dotyczącym hakowania JWT.
Ten atak zmusza zalogowanego użytkownika do wykonania niechcianych działań w aplikacji internetowej, w której aktualnie jest uwierzytelniony. Atakujący mogą wykorzystać ciasteczka, które są automatycznie wysyłane z każdym żądaniem do podatnej strony.
(Sprawdź dalsze szczegóły w [oryginalnym badaniu](https://blog.ankursundara.com/cookie-bugs/)) Przeglądarki pozwalają na tworzenie ciasteczek bez nazwy, co można zademonstrować za pomocą JavaScriptu, jak pokazano poniżej:
Wynikiem w nagłówku cookie wysłanym jest `a=v1; test value; b=v2;`. Co ciekawe, umożliwia to manipulowanie ciasteczkami, jeśli ustawiono puste ciasteczko o nazwie, potencjalnie kontrolując inne ciasteczka poprzez ustawienie pustego ciasteczka na określoną wartość:
(Sprawdź szczegóły w [oryginalnym badaniu](https://blog.ankursundara.com/cookie-bugs/)) Kilka serwerów internetowych, w tym te oparte na Java (Jetty, TomCat, Undertow) i Pythonie (Zope, cherrypy, web.py, aiohttp, bottle, webob), błędnie obsługuje ciasteczka ze względu na przestarzałe wsparcie dla RFC2965. Odczytują wartość ciasteczka w podwójnych cudzysłowach jako pojedynczą wartość, nawet jeśli zawiera średniki, które normalnie powinny oddzielać pary klucz-wartość:
(Sprawdź dalsze szczegóły w [oryginalnym badaniu](https://blog.ankursundara.com/cookie-bugs/)) Nieprawidłowe parsowanie ciasteczek przez serwery, w szczególności Undertow, Zope oraz te korzystające z `http.cookie.SimpleCookie` i `http.cookie.BaseCookie` w Pythonie, tworzy możliwości ataków wstrzykiwania ciasteczek. Te serwery niepoprawnie ograniczają początek nowych ciasteczek, pozwalając atakującym na podszywanie się pod ciasteczka:
Ta wrażliwość jest szczególnie niebezpieczna w aplikacjach internetowych polegających na ochronie przed CSRF opartej na ciasteczkach, ponieważ pozwala atakującym na wstrzykiwanie sfałszowanych ciasteczek z tokenem CSRF, potencjalnie omijając środki bezpieczeństwa. Problem jest pogłębiony przez sposób obsługi przez Python zduplikowanych nazw ciasteczek, gdzie ostatnie wystąpienie zastępuje wcześniejsze. Wzbudza to również obawy dotyczące ciasteczek `__Secure-` i `__Host-` w niebezpiecznych kontekstach oraz może prowadzić do pomijania autoryzacji, gdy ciasteczka są przekazywane do serwerów back-endowych podatnych na podszywanie.
* Sprawdź opcję "**zapamiętaj mnie**", jeśli istnieje, aby zobaczyć, jak działa. Jeśli istnieje i może być podatne, zawsze używaj ciasteczka z opcji **zapamiętaj mnie** bez żadnego innego ciasteczka.
Jeśli ciasteczko pozostaje takie samo (lub prawie takie samo) po zalogowaniu, oznacza to prawdopodobnie, że ciasteczko jest powiązane z pewnym polem twojego konta (prawdopodobnie z nazwą użytkownika). W takim przypadku możesz:
* Spróbuj utworzyć wiele **kont** z bardzo **podobnymi** nazwami użytkowników i spróbuj **odgadnąć**, jak działa algorytm.
* Spróbuj **przeprowadzić atak brutalnej siły na nazwę użytkownika**. Jeśli ciasteczko służy tylko jako metoda uwierzytelniania dla twojej nazwy użytkownika, możesz utworzyć konto o nazwie użytkownika "**Bmin**" i **przeprowadzić atak brutalnej siły** na każdy **bit** ciasteczka, ponieważ jedno z ciasteczek, które spróbujesz, będzie należeć do "**admin**".
Jeśli atak zakończył się sukcesem, możesz spróbować zaszyfrować wybrany ciąg znaków. Na przykład, jeśli chciałbyś **zaszyfrować****user=administrator**
Być może ciasteczko mogłoby mieć jakąś wartość i być podpisane za pomocą CBC. Wtedy integralność wartości to podpis utworzony za pomocą CBC z tą samą wartością. Ponieważ zaleca się użycie wektora zerowego jako IV, ten rodzaj sprawdzania integralności może być podatny na atak.
Utwórz użytkownika o nazwie na przykład "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" i sprawdź, czy istnieje jakiś wzorzec w ciasteczku (ponieważ ECB szyfruje każdy blok tym samym kluczem, te same zaszyfrowane bajty mogą się pojawić, jeśli nazwa użytkownika jest zaszyfrowana).
Powinien być jakiś wzorzec (o wielkości używanego bloku). Więc, znając sposób zaszyfrowania grupy "a", możesz utworzyć nazwę użytkownika: "a"\*(rozmiar bloku)+"admin". Następnie możesz usunąć zaszyfrowany wzorzec bloku "a" z ciasteczka. I będziesz mieć ciasteczko użytkownika "admin".
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.