top of page

Portswigger : Account locking (Hesap Kilitleme)

Yazarın fotoğrafı: Songül ÖZÜGÜRLER
Songül ÖZÜGÜRLER
28 Nis
3 dakikada okunur

Portswigger : Account locking (Hesap Kilitleme)

Portswigger : Account locking (Hesap Kilitleme)

Web sitelerinin brute-force saldırılarını engellemek için kullandığı yöntemlerden biri, belirli şüpheli koşullar gerçekleştiğinde — genellikle art arda belirli sayıda hatalı giriş denemesi yapıldığında — hesabı kilitlemektir. Normal giriş hatalarında olduğu gibi, sunucunun “hesap kilitlendi” şeklindeki yanıtları da saldırganların kullanıcı adı enumerate etmesine yardımcı olabilir.

Hesap kilitleme, belirli bir kullanıcıyı hedef alan brute-force saldırılarına karşı bir miktar koruma sağlar. Ancak saldırganın rastgele herhangi bir hesabı ele geçirmeye çalıştığı durumlarda bu koruma yeterli olmaz.

Hesap Kilitlemeyi Atlatma Yöntemi

Portswigger : Account locking (Hesap Kilitleme)

Aşağıdaki yaklaşım bu tür korumaları aşmak için kullanılabilir:

Geçerli olma ihtimali yüksek kullanıcı adlarının bir listesini oluşturun. Bu listeyi username enumeration yaparak ya da yaygın kullanıcı adları listesinden oluşturabilirsiniz.

Bir kullanıcı tarafından kullanılıyor olma ihtimali yüksek, çok küçük bir parola listesi seçin. Burada kritik nokta şu: Seçtiğiniz parola sayısı sistemin izin verdiği hatalı giriş sayısından fazla olmamalı. Örneğin limit 3 giriş denemesi ise en fazla 3 şifre denemelisiniz.

Burp Intruder gibi bir araçla seçtiğiniz her parolayı tüm kullanıcı adlarıyla test edin. Bu şekilde, hiçbir hesabı kilitlenmeye zorlamadan tüm kullanıcılar üzerinde brute-force denemesi yapmış olursunuz. Sadece bir kullanıcının o üç şifreden birini kullanması, hesabın ele geçirilmesi için yeterlidir.

Credential Stuffing Karşısında Hesap Kilitlemenin Yetersizliği

Hesap kilitleme, credential stuffing saldırılarına karşı da koruma sağlayamaz.

Credential stuffing, büyük veri ihlallerinden çalınmış gerçek kullanıcı adı:şifre kombinasyonlarının toplu şekilde denenmesidir. Bu saldırı, insanların aynı kullanıcı adı ve şifreyi birçok sitede tekrar kullanmasına dayanır; dolayısıyla bu çalınmış bilgilerden bazılarının hedef sitede de geçerli olma ihtimali vardır.

Hesap kilitleme burada etkisiz kalır çünkü:

Her kullanıcı adı yalnızca bir kez denenir.

Yani limit aşılmadığı için hesap kilitlenmez.

Sonuç olarak saldırgan, tek bir otomatik saldırıyla birçok farklı hesabı ele geçirebilir.

Lab: Username enumeration via account lock

Bu labda amaç, kötü yapılandırılmış brute-force korumasını kullanarak hem kullanıcı adı enumere etmek , hem de kilitlenen bir hesabın doğru şifresini tespit etmek . Tüm süreç tamamen iki fark üzerinden çalışıyor:

- Yanıt uzunluklarındaki örtülü farklar

- Hesap kilitlendiğinde dönen farklı hata mesajı

Ben de adımları buna göre planladım.

İlk adım: Yanlış bilgilerle login isteği yakaladım

Önce login sayfasında bilerek yanlış username–password girdim ve POST /login isteğini Burp Intruder’a yolladım.

Portswigger : Account locking (Hesap Kilitleme)

Lab’ın en önemli kısmı burası: Username’leri test ederken hesap 3–5 denemede kilitlendiği için bu davranışı tetiklemem gerekiyordu.

Ortaya çıkan POST /login isteğini Intruder’a gönderdim.

Saldırı türü olarak Cluster Bomb seçtim. Bu saldırı tipini tercih etme sebebim, aynı istekte hem kullanıcı adını hem de ek bir boş payload pozisyonunu kontrol edebilmekti.

- Birinci payload pozisyonu: username

- İkinci payload pozisyonu: boş payload (Null payload)

username=§invalid-username§&password=example§§

Portswigger : Account locking (Hesap Kilitleme)

§&password=example§§ eklememin sebebi, isteğe ikinci bir boş payload pozisyonu oluşturup Intruder’da buna Null payloads atayarak her kullanıcı adını birkaç kez arka arkaya test etmek. Böylece response sürelerindeki küçük farklar daha net ortaya çıkıyor ve gerçek kullanıcı adının tetiklediği ekstra kontroller yüzünden oluşan gecikmeyi çok daha güvenilir şekilde yakalayabiliyorum.

Portswigger : Account locking (Hesap Kilitleme)
Portswigger : Account locking (Hesap Kilitleme)

ıntruder saldırısını başlattım ve ajax değerinin uzunluğunun diğerlerinden farklı olduğunu gördüm

Portswigger : Account locking (Hesap Kilitleme)

ajax değerini kullanarak password değerine intruder attack kullanarak yeni bir sniper attack başlattım. Sniper attack kullanmamın nedeni ise tek değer üzerinde brute force başlatmaktı.

Portswigger : Account locking (Hesap Kilitleme)
Portswigger : Account locking (Hesap Kilitleme)

Saldırı başladığında hata mesajlarında ince ama önemli bir fark gördümbir response hiç hata mesajı içermiyordu. Bu da doğru parolanın bulunduğunun göstergesiydi. username ajax password ise qwertyuiop olduğunu bulduk.

PortSwigger lablarında her kullanıcıya özel bir ortam oluşturulduğu için, benim çözdüğüm lab ile sizinki farklı username passworde sahip olabilir . 🌸

Bu lab, bize çok önemli bir gerçeği hatırlatıyor:

Yanıt süreleri, yanıt uzunlukları ve hata mesajları — hepsi bilgi sızdırır.

Geliştirici tarafı sadece “işlev çalışıyor mu?” diye bakarken, bir güvenlik testçisi olarak bizim “sistem davranışı sır veriyor mu?” diye bakmamız gerekiyor.

Bu yüzden brute-force korumaları düzgün tasarlanmadığında, en basit farklar bile ciddi zafiyetlere dönüşebiliyor.

 
 
bottom of page