Broken Authentication
Last updated
Was this helpful?
Last updated
Was this helpful?
Authentication, bir kullanıcının kimliğini doğrulama işlemidir. Kimlik doğrulama mekanizmalarındaki çoğu güvenlik açığı iki yoldan biriyle ortaya çıkar.
Kimlik doğrulama mekanizmaları brute-force saldırılarına karşı yeterince koruma sağlayamadığı için zayıftır.
Uygulamadaki mantık hataları veya kötü kodlama, kimlik doğrulama mekanizmalarının bir saldırgan tarafından tamamen atlanmasına izin verir. Buna "Broken Authentication" denir.
Eğer doğru ve yanlış kullanıcı adı girişlerinde farklı yanıtlar dönüyorsa kullanıcı adları listelenebilir. Bu bir zafiyettir.
Parolaya çok uzun bir değer girerek kullanıcı adlarını listelemeyi deneyebiliriz. Eğer bir yanıt diğerlerinden daha geç geliyorsa o kullanıcı adı var olabilir.
Eğer başarısız girişler sonucunda hesap kilitlendi yanıtı alıyorsak fakat var olmayan hesaplarda bu yanıtı almıyorsak bu yöntemle kullanıcıları listeleyebiliriz.
Eğer brute-force koruması IP üzerinden yapıyorsak aşağıdaki başlıklar ile bu koruma atlatılabilir.
Eğer doğru giriş yaptığımızda brute-force sayacı sıfırlanıyorsa her brute-force denemesinin arasına doğru girişler koyabiliriz.
Eğer login isteğinde json veri gönderiliyorsa ve parolanın bir liste olarak gönderilmesine izin veriliyorsa tek bir istek ile brute-force yapabiliriz.
Eğer 2FA kontrolü client-side yapılıyorsa sadece yönlendirme ile bu koruma sağlanıyor olabilir. Kullanıcının profil sayfasını 2FA girmeden ziyaret etmeyi deneyebiliriz.
Eğer 2FA kodunda brute-force koruması yok ise ve bu kod kısa ise brute-force deneyebiliriz.
Parola sıfırlama isteğindeki parametreleri kontrol edebiliriz.
Eğer parola sıfırlama linki aşağıdaki header kullanılarak üretiliyorsa, kurban linke tıkladığında istek bizim sunucumuza gönderilebilir.
Eğer parola sıfırlama isteğinde username parametresi varsa diğer kullanıcılar için brute-force denemesi yapabiliriz.
Eğer kullanıcının session çerezi base64 gibi bir şifreleme kullanıyorsa bu çerez üzerinden brute-force denemeleri yapabiliriz. Login panelinde koruma olsa bile çerez için bir koruma yapılmamış olabilir.
Aşağıdaki gibi hassas veriler içeren hiçbir isteğin HTTP tarifiği üzerinden gönderilmemesi gerekir.
Parolalar veya şifreler
Body kısmındaki Tokenler
Çerezlerin içinde Hesap veya şifre sıfırlama kodları
Sunucu bir session tokeni için çerez bilgisi döndürürse, istemcinin çerezi daha sonra şifrelenmemiş kanallar üzerinden ifşa etmesini önlemek için çerez Secure flag de içermelidir.
Eğer uygulama giriş paneli içeriyorsa varsayılan kullanıcı bilgileri ile giriş yapmayı deneyebiliriz. Ayrıca aşağıdaki gibi çok kullanılar bilgileri deneyebiliriz.
Challange aritmetik veya tahmin edilebilir olmamalı.
HTTP Response code ile kontrol yapılmamalı.
Sunucu tarafı mantığı varsayılan olarak başarılı bir çözüme sahiptir.
CAPTCHA meydan okuma sonucu hiçbir zaman sunucu tarafında doğrulanmaz.
CAPTCHA giriş alanı veya parametresi manuel olarak işlenir ve yanlış bir şekilde doğrulanır veya kaçar.
CAPTCHA'yı çözmeden istek göndermeyi deneyin.
Yanlış Captcha ile göndermeyi deneyin.
Captcha değeri client-side tutuluyor olabilir.
Zaten kullanılmış bir kodu deneyin.
Cookie olmadan isteği gönderin belki cookie olmadığında kontrol edilmiyordur.
Çok adımlı captca varsa direkt son adımı göndermeyi deneyin.
Belki başka endpointte captcha koruması yoktur. (Örneğin aynı isteğin mobil apisi)
Portswigger Academy: https://portswigger.net/web-security/authentication