CSRF (Cross Site Request Forgery)
Dołącz do serwera HackenProof Discord, aby komunikować się z doświadczonymi hakerami i łowcami błędów!
Spojrzenie na Hacking Zajmij się treściami, które zagłębiają się w emocje i wyzwania hakerstwa
Aktualności Hackingu na Żywo Bądź na bieżąco z szybkim tempem świata hakerstwa dzięki aktualnościom i spojrzeniom na żywo
Najnowsze Ogłoszenia Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacjami platformy
Dołącz do nas na Discordzie i zacznij współpracować z najlepszymi hakerami już dziś!
Wyjaśnienie Cross-Site Request Forgery (CSRF)
Cross-Site Request Forgery (CSRF) to rodzaj podatności na bezpieczeństwo występującej w aplikacjach internetowych. Umożliwia atakującym wykonywanie działań w imieniu nieświadomych użytkowników poprzez wykorzystanie ich uwierzytelnionych sesji. Atak jest wykonywany, gdy użytkownik zalogowany na platformie ofiary odwiedza złośliwą witrynę. Następnie ta witryna wywołuje żądania do konta ofiary za pomocą metod takich jak wykonanie JavaScript, przesłanie formularzy lub pobranie obrazów.
Wymagania wstępne dla ataku CSRF
Aby wykorzystać podatność CSRF, należy spełnić kilka warunków:
Zidentyfikuj cenną akcję: Atakujący musi znaleźć akcję warta wykorzystania, taką jak zmiana hasła użytkownika, adresu e-mail lub podniesienie uprawnień.
Zarządzanie sesją: Sesja użytkownika powinna być zarządzana wyłącznie za pomocą plików cookie lub nagłówka uwierzytelniania podstawowego HTTP, ponieważ inne nagłówki nie mogą być manipulowane w tym celu.
Brak nieprzewidywalnych parametrów: Żądanie nie powinno zawierać nieprzewidywalnych parametrów, ponieważ mogą one uniemożliwić atak.
Szybkie sprawdzenie
Możesz przechwycić żądanie w Burp i sprawdzić zabezpieczenia CSRF oraz przetestować z przeglądarki, klikając Kopiuj jako fetch i sprawdzając żądanie:
Obrona przed CSRF
Można zaimplementować kilka środków zaradczych, aby chronić się przed atakami CSRF:
Pliki cookie SameSite: Ta atrybut zapobiega przesyłaniu plików cookie przez przeglądarkę wraz z żądaniami między witrynami. Więcej o plikach cookie SameSite.
Współdzielenie zasobów między różnymi źródłami: Polityka CORS witryny ofiary może wpłynąć na wykonalność ataku, zwłaszcza jeśli atak wymaga odczytu odpowiedzi z witryny ofiary. Dowiedz się więcej o omijaniu CORS.
Weryfikacja użytkownika: Wymaganie podania hasła użytkownika lub rozwiązanie captcha może potwierdzić intencje użytkownika.
Sprawdzanie nagłówków Referrer lub Origin: Sprawdzanie tych nagłówków może pomóc zapewnić, że żądania pochodzą od zaufanych źródeł. Jednak staranne tworzenie adresów URL może obejść źle zaimplementowane sprawdzenia, takie jak:
Użycie
http://mal.net?orig=http://example.com
(URL kończy się zaufanym adresem URL)Użycie
http://example.com.mal.net
(URL zaczyna się od zaufanego adresu URL)Modyfikowanie nazw parametrów: Zmiana nazw parametrów w żądaniach POST lub GET może pomóc w zapobieganiu automatycznym atakom.
Tokeny CSRF: Włączenie unikalnego tokenu CSRF w każdej sesji i wymaganie tego tokenu w kolejnych żądaniach może znacząco zmniejszyć ryzyko CSRF. Skuteczność tokenu można zwiększyć, wymuszając CORS.
Zrozumienie i wdrożenie tych obron jest kluczowe dla utrzymania bezpieczeństwa i integralności aplikacji internetowych.
Ominięcia obrony
Od POST do GET
Być może formularz, który chcesz wykorzystać, jest przygotowany do wysłania żądania POST z tokenem CSRF, jednak powinieneś sprawdzić, czy GET jest również ważny i czy podczas wysyłania żądania GET token CSRF jest wciąż weryfikowany.
Brak tokenu
Aplikacje mogą implementować mechanizm weryfikacji tokenów, gdy są obecne. Jednak pojawia się podatność, jeśli weryfikacja jest pomijana całkowicie, gdy token jest nieobecny. Atakujący mogą wykorzystać to, usuwając parametr, który przenosi token, a nie tylko jego wartość. Pozwala to im ominąć proces weryfikacji i skutecznie przeprowadzić atak typu Cross-Site Request Forgery (CSRF).
Token CSRF nie jest powiązany z sesją użytkownika
Aplikacje niepowiązujące tokenów CSRF z sesjami użytkowników stanowią znaczne ryzyko bezpieczeństwa. Te systemy weryfikują tokeny w oparciu o globalny pulę, zamiast zapewniać, że każdy token jest związany z sesją inicjującą.
Oto jak atakujący wykorzystują to:
Uwierzytelniają się za pomocą własnego konta.
Uzyskują ważny token CSRF z globalnej puli.
Wykorzystują ten token w ataku CSRF przeciwko ofierze.
Ta podatność pozwala atakującym na dokonywanie nieautoryzowanych żądań w imieniu ofiary, wykorzystując niewystarczający mechanizm weryfikacji tokenów aplikacji.
Ominięcie metody
Jeśli żądanie używa "dziwnej" metody, sprawdź, czy funkcjonalność nadpisywania metody działa. Na przykład, jeśli używa metody PUT, możesz spróbować użyć metody POST i wysłać: https://example.com/my/dear/api/val/num?_method=PUT
To również może działać, wysyłając parametr _method wewnątrz żądania POST lub używając nagłówków:
X-HTTP-Method
X-HTTP-Method-Override
X-Method-Override
Ominięcie niestandardowego tokenu nagłówka
Jeśli żądanie dodaje niestandardowy nagłówek z tokenem do żądania jako metoda ochrony CSRF, to:
Przetestuj żądanie bez Niestandardowego Tokenu oraz nagłówka.
Przetestuj żądanie z dokładnie taką samą długością, ale innym tokenem.
Token CSRF jest weryfikowany za pomocą pliku cookie
Aplikacje mogą implementować ochronę CSRF poprzez duplikowanie tokenu zarówno w pliku cookie, jak i parametrze żądania lub poprzez ustawienie pliku cookie CSRF i weryfikację, czy token wysłany w backendzie odpowiada plikowi cookie. Aplikacja weryfikuje żądania, sprawdzając, czy token w parametrze żądania jest zgodny z wartością w pliku cookie.
Jednak ta metoda jest podatna na ataki CSRF, jeśli strona internetowa ma wady pozwalające atakującemu na ustawienie pliku cookie CSRF w przeglądarce ofiary, takie jak podatność CRLF. Atakujący mogą wykorzystać to, ładując zwodniczy obraz, który ustawia plik cookie, a następnie rozpoczynając atak CSRF.
Poniżej znajduje się przykład, jak można zbudować atak:
Zauważ, że jeśli token csrf jest powiązany z ciasteczkiem sesji, ten atak nie zadziała, ponieważ będziesz musiał ustawić ofierze swoją sesję, a więc będziesz atakować siebie.
Zmiana typu zawartości
Zgodnie z tym, aby uniknąć żądań wstępnych przy użyciu metody POST, dozwolone są następujące wartości typu zawartości (Content-Type):
application/x-www-form-urlencoded
multipart/form-data
text/plain
Jednak zauważ, że logika serwera może się różnić w zależności od użytego typu zawartości (Content-Type), dlatego powinieneś wypróbować wymienione wartości oraz inne, takie jak application/json
,text/xml
, application/xml
.
Przykład (z tutaj) wysyłania danych JSON jako text/plain:
Ominięcie żądań wstępnych dla danych JSON
Podczas próby wysłania danych JSON za pomocą żądania POST, użycie Content-Type: application/json
w formularzu HTML nie jest bezpośrednio możliwe. Podobnie, wykorzystanie XMLHttpRequest
do wysłania tego typu treści inicjuje żądanie wstępne. Niemniej jednak istnieją strategie, aby potencjalnie ominąć to ograniczenie i sprawdzić, czy serwer przetwarza dane JSON niezależnie od Content-Type:
Użyj alternatywnych typów zawartości: Wykorzystaj
Content-Type: text/plain
lubContent-Type: application/x-www-form-urlencoded
, ustawiającenctype="text/plain"
w formularzu. Ten sposób testuje, czy serwer używa danych bez względu na Content-Type.Zmodyfikuj typ zawartości: Aby uniknąć żądania wstępnego, jednocześnie zapewniając, że serwer rozpoznaje zawartość jako JSON, możesz wysłać dane z
Content-Type: text/plain; application/json
. To nie powoduje żądania wstępnego, ale może być poprawnie przetworzone przez serwer, jeśli jest skonfigurowany do akceptowaniaapplication/json
.Wykorzystanie pliku SWF Flash: Mniej popularna, ale możliwa metoda polega na użyciu pliku SWF flash do ominięcia takich ograniczeń. Aby uzyskać dogłębną wiedzę na temat tej techniki, zapoznaj się z tym postem.
Ominięcie sprawdzania Referrer / Origin
Unikaj nagłówka Referrer
Aplikacje mogą sprawdzać nagłówek 'Referer' tylko wtedy, gdy jest obecny. Aby uniemożliwić przeglądarce wysłanie tego nagłówka, można użyć następującego tagu meta HTML:
To zapewnia, że nagłówek „Referer” jest pominięty, co potencjalnie omija kontrole walidacji w niektórych aplikacjach.
Ominięcia wyrażeń regularnych
pageURL Format BypassAby ustawić nazwę domeny serwera w adresie URL, który zostanie wysłany przez Referrera wewnątrz parametrów, można to zrobić:
Metoda pomijania HEAD
Pierwsza część tego opisu CTF wyjaśnia, że kod źródłowy Oak, router jest ustawiony do obsługi żądań HEAD jako żądań GET bez ciała odpowiedzi - powszechne obejście, które nie jest unikalne dla Oak. Zamiast konkretnego obsługującego żądania HEAD, są one po prostu przekazywane do obsługującego GET, ale aplikacja po prostu usuwa ciało odpowiedzi.
Dlatego, jeśli żądanie GET jest ograniczone, można po prostu wysłać żądanie HEAD, które zostanie przetworzone jako żądanie GET.
Przykłady Wykorzystania
Wyciekanie Tokena CSRF
Jeśli token CSRF jest używany jako obrona, można spróbować go wyciec wykorzystując podatność XSS lub podatność Dangling Markup.
GET za pomocą tagów HTML
Inne tagi HTML5, które mogą być użyte do automatycznego wysłania żądania GET to:
Żądanie GET formularza
Żądanie POST formularza
Wysyłanie żądania POST formularzem za pomocą elementu iframe
Zapytanie POST Ajax
żądanie POST multipart/form-data
Wniosek POST typu multipart/form-data v2
Wysyłka żądania POST formularza z wewnętrznej ramki (iframe)
Ukradnij token CSRF i wyślij żądanie POST
Ukradnij token CSRF i wyślij żądanie POST za pomocą ramki iframe, formularza i Ajax
Ukradnij token CSRF i wyślij żądanie POST za pomocą ramki i formularza
Ukradnij token i wyślij go za pomocą 2 ramek
POBIERANIE TOKENA CSRF za pomocą Ajaxa i wysłanie żądania POST za pomocą formularza
CSRF z Socket.IO
CSRF Atak Brute Force
Kod może być użyty do Brut Force formularza logowania przy użyciu tokenu CSRF (Wykorzystuje również nagłówek X-Forwarded-For w celu próby obejścia ewentualnego czarnego listowania adresów IP):
Narzędzia
Odnośniki
Dołącz do serwera HackenProof Discord, aby komunikować się z doświadczonymi hakerami i łowcami błędów!
Spojrzenie na Hacking Zanurz się w treściach dotyczących emocji i wyzwań związanych z hakerstwem
Aktualności z Hackingu na Żywo Bądź na bieżąco z szybkim tempem świata hakerstwa dzięki aktualnościom i spojrzeniom na żywo
Najnowsze Ogłoszenia Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacjami platformy
Dołącz do nas na Discordzie i zacznij współpracować z najlepszymi hakerami już dziś!
Last updated