Bu yazıda PortSwigger Lab ‘larından kaba kuvvet saldırısı ile “beni hatırla” çerezini kaba kuvvet saldırısı ile çözümleme odasını inceleyeceğiz.
Bu labımızda, hedef alacağımız web uygulamasının, kullanıcıların oturumlarının açık kalmasını sağlayan bir “beni hatırla” özelliği var. Odayı çözmemiz için bize bir örnek kullanıcı adı ve şifresi, bir hedef kullanıcı adı ve kaba kuvvet saldırımızda kullanmamız için bir kelime listesi var.
Web uygulamasını tanımak için ilk etkileşimimizde “wiener:peter” kullanıcı adı ve şifresini kullanacağız ve sonrasında “carlos” hedef kullanıcısı üzerinde geçerli bir oturum elde etmeye çalışacağız.
Haydi başlayalım.
Hedefi Tanıyalım

Laba erişim butonuna tıkladığımızda bir blog sayfası görüyoruz. Bu labımızda neler yapacağımız açık bir şekilde belirtildiği için tüm bloğu keşfe çıkmayacağım, ama keşfetmek istiyorsanız özgürsünüz. Ne yapılacağına dair yönergelerin olmadığı bir ortamda yapılacak ilk şey hedefi keşfetmektir. Tabi ki arkaya Burp Suite ‘i açıp isteklerin birikmesini sağladıktan sonra.

İlk olarak elimizdeki örnek kullanıcı bilgileri ile giriş yapacağız. İşiniz kolaylaşsın isterseniz “stay logged in” butonuna basarak giriş yaparsanız, birazdan kullanacağımız isteği de hazırlamış olursunuz.

Burada giriş yaptıktan sonra basit bir panel bizi karşılıyor. Buradaki tek işlev mail adresi değiştirmekmiş gibi gözüküyor. Direkt olarak bu ekran karşılamazsa “my account” butonuna tıklayın.

Sonrasında GET methodu ile “my-account” url sine giden isteği HTTP tarihçemizden bulup, intruder özelliğine göndereceğiz.

Bu aşamada nereyi hedef almamız gerektiğini biliyoruz. Hedefimiz bu çerez, ama önce onun nasıl çalıştığını anlamamız lazım. Bunun için üzerinde basit bir tersine mühendislik süreci uygulayarak onu oluşturan aşamaları, yani çerezimizin tarifini öğrenmemiz lazım.

Çerezi seçerek sağ tıklayıp, mouse ‘u “convert selection” butonun üzerine getirip, “Base64” butonunun üzerine getirip, “Base64-decode” butonuna tıklayabilirsiniz.

Ya da çerezi kopyalayıp, decoder özelliğine yapıştırıp, decode butonuna basıp, base64 seçeneğini seçerek çerezimin çözümlenmiş halini inceleyebiliriz.
Gerçek hayat örneklerinde, her çerezi çözümlemek için aynı teknik geçerli olmayabilir. Teknolojinin tüm imkanlarını kullanarak elinizdeki karakter dizisinin türünün ne olduğunu tanımlamayı deneyebilirsiniz. Ama bazı denemelerinizde hiç bir verimli sonuca ulaşamayabilirsiniz ve bu normaldir. Her gün güneşli değildir.
Bu aksiyonumuzla birlikte, çerezin [“kullanıcı_adı:” + “karakterler”] şeklinde oluşturulduğunu öğrenmiş olduk. Peki iki nokta üst üste işaretinden sonra gelen karakterler ne?

Bu aşamada google üzerinden “hash identifier” ifadesini aratıp -hash identifier- (https://hashes.com/en/tools/hash_identifier) aracına ulaştım. Sorgulattığımda bunun yüksek ihtimal bir MD5 hashi olduğu sonucunu gösterdi.


Örnek kullanıcımızın şifresini bildiğimiz için, bu md5 hash ‘ini tanımlamak için kullanabileceğimiz bir adet kelimemiz var. Md5 generator aracı ile “peter” kelimesinin hash ‘ini aldığımızda, sonucun, çerezimizde ki karakter dizisi ile eşleştiğini görüyoruz.
Bu süreçten anladığımız üzere uygulamanın “stay-logged-in” butonuna basıldığında verdiği çerez:
- şifrenin md5 hashinin alınması
- kullanıcı_adı:şifrenin_md5_hashi
- dizinin, base64 ile encode edilmesi
süreci ile oluşturuluyor. Çözümlenmeye karşı pek bir güvenliği yok.
Çerezleri, kullanıcı adı ve şifreyi içerecek şekilde oluşturmak, eskiden uygulanılan bir pratikmiş. Günümüzde güvenliği riske atan ve popüler olmayan bir pratik. Günümüzde çerezlerin kullanıcıyı tanımlayan bilgiler içerse bile tuzlanmış olmaları veya tek kullanımlık rastgele karakterler şeklinde oluşturulmaları, doğru kabul edilen popüler bir pratiktir.
UNGA BUNGA – Kapıya taş atmak

Artık “carlos” hedefimizde oturum elde edebilmemiz için tek gereken şey onun şifresi. Peki bu çerez olayını pas geçip login ekranına bir kaba kuvvet saldırısı denesek ne olur? Sonuçta çok çalışmamak, ama akıllı çalışmak daha iyi değil midir?

Bir çok modern uygulamada bir miktar umursanmayan oran limitini burada uygulamışlar. Tabi ki bu odanın amacından sapılmaması için de bunun olması gerekiyordu. O yüzden bu senaryo ile daha fazla uğraşmıyorum.

Artık Burp ‘te kaldığımız yere dönüyoruz. Intruder ‘da ki isteğimizin “stay-logged-in=” tanımlıyacısındaki çerezi işaretleyip, “add” tuşuna basarak, saldırı vektörümüz olarak işaretleyeceğiz.
Sırada kurabiyemizi pişirmek var. Büyükannemizin tarifini de keşfetmiştik zaten, bakalım biz yapınca tadı nasıl oluyormuş.

Intruder panelindeki “Payloads” kısmındaki “Payload settings” e gelerek Portswigger ‘ın laba erişim sayfasındaki örnek listeyi yapıştırıyoruz.
Sonrasında hemen altındaki “Payload Processing” fonksiyonuna gelerek, buradaki sırayı takip ederek, işyükü üzerindeki gerçekleştireceği modifiye görevlerini tanımlıyoruz.

“add” butonuna basıp “hash”i ve “md5” türünü seçiyoruz.

“add” butonuna basıp “prefix”i seçiyoruz ve “carlos:” yazıyoruz
( [kullanıcı_adı:] kısmını temsil edecek.)
(“prefix” kelimesi “başına ekle” anlamı taşır, “suffix” ise “sonuna ekle” anlamını taşır.)

“add” butonuna basıp “encode”u ve “base64-encode” butonunu seçiyoruz.
**-**–*
Peki bu sırayı takip etmesek ne olurdu?
Burp ilk eklediğiniz görevden diğerine geçerek, (liste halinde yukarıdan aşağıya doğru olacak şekilde) bu aksiyonları gerçekleştiriyor. Gerektiğinde, solda gördüğünüz Up-Down butonları ile sıralarını değiştirebilirsiniz. Örnekte ki sırayı takip etmezsek, tarifimiz doğru olmazdı.
- İsterseniz burada prefixi editleyip “wiener:” olarak yazıp, payload listesini de sadece “peter” olarak ekleyip tarifimizin doğru olup olmadığını ilk örnek kullanıcımız üzerinde deneyebilirsiniz. –
Son olarak, eğer fark ettiyseniz giriş yaptıktan sonra bile sayfada çok bir değişim olmuyordu. Keşke Burp ‘te isteklerin cevaplarını ayırt etmek için özelleştirilebilen bir tanımlama özelliği bulunsaydı diye bir dilek dilediyseniz, dileğiniz tam şuanda nobel baba tarafından yerine getirildi.
Külkedisini Bulmak
“Intruder” panelinin ayarlar kısmında (“settings”) “Grep – Match” özelliğini bulup, oraya “Update email” uyarısını ekliyoruz. [BURAYI BİRAZ DAHA DETAYLANDIR DÜZENLE]*
(Saldırıyı başlatmadan önce log out yapmak gerekiyor olabilir, emin olamadım)
Saldırıyı başlattıktan sonra bir sürü istek göreceğiz, bunlardan bir tanesi aradığımız sihirli kombinasyon. İsteklerin bir tanesi hariç hepsinin başarısız olacağını düşünürsek, o bir taneyi diğerlerinden ayıran indikatörleri belirleyebilirsek, filtreleme özellikleri ile kolayca ulaşabiliriz.
İsteklerin başarısız olanlarının aynı statü koduna veya uzunluğa sahip olacağını fark edeceksiniz. Saldırı ekranında ikisinden birine tıklayıp, sıralama düzenini değiştirerek doğru isteği ortaya çıktığı anda görebilirsiniz.
–Error veriyorsa ve cevaplar gözükmüyorsa lab da geçici bir sorun olabilir. Böyle şeylerle karşılaşmak doğaldır, bu labın görece kolay olduğunu düşünürsek, her şeyi doğru yaptığınıza emin olmanıza rağmen ilerleyemiyorsanız (en az 10 dk) bir mola verip daha sonra tekrar deneyin. Her ne kadar teknolojik bir çağda yaşıyor olsak da bazen her bilgisayar aynı sonucu elde edemiyor ve lab çözmek konusunda bu normal bir şey.–
Ekstra notlar:
- Çerezleri çözümleyerek ya da sıfırdan oluşturarak erişim elde edebilmek bir güvenlik zafiyetidir. Genel olarak BAC kategorisine ait olabilir, ama durum özelinde incelenip tanımlanmalıdır.
- Mesela bu örnekte çerez çözümlenmesi ile haksız oturum elde etme sürecini gerçekleştirdik. Ama çerezler için bir savunma mekanizmasını atlatmadık. Burada ilk akla gelen “Broken Authentication and Session Management” olabilir. Ama bence bu tanıma uymaz, çünkü zaten koruyucu bir önlem yoktu ki onun yetersizliğinden bahsedelim. Çerezin yapısını tanımlamak aşırı basitti, bu saldırı yüzeyini bilen bir kişi için emek harcamadan gerçekleştirilebilecek seviyedeydi. Eğer bir güvenlik önlemi var olsaydı ve onu geçmek için bir uğraş vermiş olsaydık o zaman bu kategoriye uyardı denilebilir. Belki uzak bir ihtimal “Server Security Misconfiguration” başlığı akla gelebilir, ama server üzerinde planlanmamış haksız bir eylem gerçekleştirmekten uzak bir sonuç elde ettik, o yüzden bu da değil. BAC kategorisi altında yer alabilirmiş gibi gözükse de, bence ait olduğu kategori “insecure design” (güvenli olmayan tasarım). Baktığımızda login fonksiyonunda bir oran limiti var, ama “my-account” isteğinde yok. Tutarsız bir mimari olduğu ortada. “Beni hatırla” çerezlerinin bu kadar basit bir şekilde oluşturuluyor olması ve her defasında da aynı çerezin oluşturuluyor olması, uygulamanın dizayn sürecinde güvenliğin kesinlikle önplanda tutulmadığını gösteriyor. Böyle bir uygulama için, büyük ihtimalle sadece bu bulguya özel bir çözüm geliştilirdi ve aslında duvar olması gereken yere sadece bir tuğla konulmuş olurdu.
-Başka bir kullanıcıya ait, rastgele oluşturulmuş bir çerezi olduğu gibi kopyalayıp yapıştırmak ve geçerli oturumunu elde etmek bir zafiyet değildir. Zaten modern uygulamalarda “best practice” kuralları uygulandığında, çerezi kopyalayıp yapıştırsanızda geçerli oturuma erişmenize izin vermez. Ama bu şekilde erişmeniz de günümüzde zafiyet kabul edilmiyor.
-Kullanıcının bilgisayarında depolanacak hatırlama çerezleri, her ne kadar okunur halde depolanmasa da, uygulama geliştiricelerine ait bir saldırı yüzeyidir. Ama şifrenizi bir word dosyasına kaydedip bilgisayarınızda depoladığınızda size ait bir saldırı yüzeyi olur.

