Web for Pentester 2 – Authentication Çözümleri

PentesterLab’ın hazırladığı Web for Pentester 2 deney ortamının Authentication çözümlerini elimden geldiğince anlatmaya çalışacağım. Sırasıyla başlayalım..

Example 1

Telnet ile 192.168.56.102/authentication/example1 adresine HTTP request yaptığımızda header bilgisinden Auth yöntemi olarak “Basic” kullanıldığını görüyoruz.

realm parametresinde “Username is admin, now you need to guess the password” diye bir açıklama belirterek bize kullanıcı adı ve parolayı veriyor.

Basic admin:admin

Example 2

Telnet ile 192.168.56.102/authentication/example2 adresine HTTP request yaptığımızda yine “Basic” kullanıldığını ve realm parametresinde “Username is hacker, now you need to find the password” mesajıyla bize bir şeyler anlatılmaya çalışıldığını görüyoruz.

Kullanıcı adının “hacker” olduğunu biliyoruz. Birkaç denemeyle hacker:hacker, hacker:admin gibi seçenekleri denedim fakat yetkilendirme başarısız oldu.

Elimizde hiçbir şey olmadığına göre araştırmaya koyuluyoruz. Birkaç başarısız zafiyet denemesinden sonra https://groups.google.com/forum/#!msg/rubyonrails-security/ANv0HDHEC3k/mt7wNGxbFQAJ linkinde güzel bir bilgi elde ettim.

Açıklayacak olursam: Kısaca parolanın hacker:foo şeklinde olduğunu varsayalım. hacker:fo1 şeklinde bir kimlik gönderirsek hacker:bar kimliğine göre daha uzun sürede cevap dönüyor. Yani karakter karakter kontrol edilme durumu var. Eğer baştan doğru karakteri gönderirseniz response time uzuyor. Brute force denemesi yapacağız. Bunun için harf ve sayı denemesi yapan güzel bir script yazdım.

Script kısaca her bir iterasyonda en uzun response değerine sahip karakteri buluyor ve bunları birleştirerek devam ediyor.

Ben sonuçlara göre parolayı tahmin ettiğim için saldırıyı devam ettirmedim. (p4ssw0rd olduğu açıkça görülüyor)

Basic hacker:p4ssw0rd

Example 3

Bu problemde bize bir kullanıcı login sayfası verilmiş. Mevcut bir kullanıcının bilgileri verilerek bize “admin” kullanıcısıyla giriş yapmamız söylenmiş.

Benin aklıma hemen cookie ile ilgili bir zafiyet olduğu geldi ve bilgileri verilen kullanıcı ile giriş yapıp cevabı inceledim.

Kırmızıyla işaretlediğim yerde cookie değeri clear text ve user1 yazılmış e daha ne olsun :). Hemen EditThisCookie eklentisiyle bunun yerine admin yazalım ve sonuç 🙂

Example 4

Example 3’e benzer örnekte hemen verilen bilgileri girip login oldum.

Cookie değerini incelediğimde bu sefer biraz daha akıllıca davranılıp md5 hash kullanıldığını fark ettim.

Peki bu neyin özeti diye geliyor aklımıza hemen ve online bir site ile daha önce böyle bir hash indexlenmiş mi ona bakıyoruz. Bulduğumuz sonuç:

Geriye admin textini md5 encrypt edip cookie değerini değiştirmek kalıyor.

Example 5

Bu örnekte herhangi bir kullanıcı bilgisi verilmemiş ama bir register sayfamız var. Hemen admin adında bir kullanıcı oluşturmayı deneyelim. Böyle bir kullanıcının var olduğunu söylüyor ve bir kez daha “Admin” şeklinde kayıt yapıyoruz ve sonuç:

Example 6

Example 5’teki yöntemi uyguluyoruz fakat başarısız oluyor. Ignore-case kontrolü var fakat şöyle bir deneme yapılsa “admin ” yani kullanıcı adının sonuna boşluk ekliyoruz. Oldukça basit olan bu problemde böylece çözülmüş oluyor.

Basit örneklerle karşılaşmış olsakta benim en çok üzerinde zaman harcadığım Example 2 oldu. Nerde Digest, nerde Windows Auth demeden de duramadım. Umarım faydalı olmuştur. 🙂

*Başlık görseli: http://www.pymnts.com/news/security-and-risk/2016/multichannel-authentication-goes-invisible/

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir