top of page

Portswigger Academy Lab : Username enumeration via response timing Writeup

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

Portswigger Academy Lab : Username enumeration via response timing Writeup

Portswigger Academy Lab : Username enumeration via response timing Writeup

Merhaba Size bugün PortSwigger’daki “Username Enumeration via Response Timing” labını anlatacağım. Labın konusu kısaca şu: Uygulamanın bize verdiği yanıt sürelerini analiz ederek geçerli kullanıcı adını bulmak ve ardından bu kullanıcı için parola brute-force işlemi yaparak hesaba giriş sağlamak. Yani tamamen zaman farklarından yararlanarak username enumeration yapıyoruz. Ek olarak, uygulama IP tabanlı brute-force koruması da kullanıyor ama bunu da ufak bir header hilesiyle rahatlıkla atlatabiliyoruz,

laba bağlanalım ve bize verilen kullanıcı adları ile giriş yapmayı denedim. Daha sonra olmayan bir kullanıcı adıyla giriş yapmayı denedim

ipucunda belirttiği gibi birden fazla istek yolladım ve IP tabanlı bir brute-force koruması olduğunu 3 istekten sonra isteklerimi engellediğini farkettim .

Portswigger Academy Lab : Username enumeration via response timing Writeup

Rate limit varsa sahte IP gönderip davranış değişimi olup olmadığına bakıyoruz.

Burp Repeater’da isteğe manuel olarak X-Forwarded-For ekliyorum.

Portswigger Academy Lab : Username enumeration via response timing Writeup

ve IP tabanlı brute force korumasını bu şekilde atlatmış olduk artık bize verilen wordlistleri kullanarak rahat bir şekilde brute force yapabiliriz.

Kullanıcı adları ve şifreleri denemeye devam ettiğimde ilginç bir davranış fark ediyorum. Geçersiz bir username girdiğim her denemede uygulamanın yanıt süresi neredeyse aynı. Ne yazarsam yazayım saniyesi saniyesine benzer zamanlarda dönüyor.

Ama işin rengi, geçerli bir kullanıcı adını wiener yazdığım anda değişiyor. Bu sefer uygulama, girdiğim şifrenin uzunluğuna bağlı olarak daha geç yanıt veriyor. Yani şifre ne kadar uzunsa, yanıt süresi o kadar artıyor.

Portswigger Academy Lab : Username enumeration via response timing Writeup

bu örnekte 3594 milisaniye

Bu zaman farkı bizim için kritik bir ipucu: Uygulama, geçerli bir kullanıcı adı için ekstra işlem yapıyor ve bu “gecikme” sayesinde doğru kullanıcı adını tespit edebiliyoruz.

İsteği Burp Intruder’a gönderdikten sonra önce X-Forwarded-For header’ına payload ekliyorum. Payload türünü Numbers olarak seçip 1 ile 150 arasındaki değerleri listeletiyorum. Böylece her istekte sahte bir IP göndererek rate limit’i atlatmış oluyorum.

Kullanııcı adı kısmına da PortSwigger’ın verdiği candidate username listesini ekliyorum. Yani Intruder aynı anda hem farklı IP’leri deniyor hem de listedeki tüm kullanıcı adlarını tek tek test ediyor.

Her şey hazır olunca brute-force saldırısını başlatıyorum. Artık tek yapmam gereken, sonuçlardaki yanıt sürelerini izleyip diğerlerine göre belirgin şekilde daha geç dönen isteği bulmak. Bu uzun yanıt süresi, geçerli kullanıcı adını gösteriyor.

Portswigger Academy Lab : Username enumeration via response timing Writeup

Brute-force işlemi tamamlandıktan sonra sonuçları daha rahat analiz edebilmek için Intruder penceresinden Columns menüsüne girip Response completed sütununu aktif ediyorum. Bu sütun, her isteğin tamamlanma süresini gösterdiği için zaman bazlı username enumeration yaparken kritik öneme sahip. Bu sayede, diğerlerine göre belirgin şekilde daha uzun sürede tamamlanan isteği kolayca fark ediyorum ve bu da bana geçerli kullanıcı adını veriyor.

brute force sonucu acceso adının username olduğunu görüyorum. aynı şekilde passworde brute force atıyorum. Portswiggerin bana verdiği password listi kullanarak

Portswigger Academy Lab : Username enumeration via response timing Writeup

Son olarak Intruder’daki brute-force saldırısı tamamlandığında sonuçları kontrol ediyorum. Normalde tüm hatalı girişlerde uygulama 200 OK döndürüyordu. Fakat bir isteğin diğerlerinden farklı olarak 302 Redirect döndürdüğünü fark ettim.

Bu, login işleminin başarılı olduğu anlamına geliyor.

Bu 302 dönen isteğe baktığımda kullanılan payload’lar şunlar:

username=acceso password=qazwsx

🌸portswiggerin her labının farklı olduğunu ve bu labda bulunan kullanıcı ve şifrenin sizin labınızda aynı olmayacağını unutmayalım🌸

Yani hem doğru kullanıcı adını hem de doğru parolayı bu şekilde bulmuş oldum. Ardından bu bilgilerle giriş yaptığımda hesap sayfası açılıyor ve lab başarıyla çözülmüş oluyor.

Portswigger Academy Lab : Username enumeration via response timing Writeup

Umarım adım adım gösterdiğim bu süreç işinizi kolaylaştırır. Bir sonraki PortSwigger labında görüşmek üzere, kendinize iyi bakın!🌸

 
 
bottom of page