WebGoat | WriteUp

WebGoat içerisinde çeşitli zafiyetler bulunduran bir web uygulamasıdır.
Bu web uygulamasını kurduktan sonra içerisinde bulunan zafiyetleri sömürerek kendinizi geliştirebilir ve çalışabilirsiniz.

Adım adım zafiyet çözümlerinin ekran görütünlerini sizlerle paylaştım ve yapmış olduğum işlemleri detaylı bir şekilde açıklamaya çalıştım. Tabii bir zafiyetin birden fazla şekilde exploit(zafiyeti sömürmek) türü olabilir. Yapmış olduğum örneklerle sınırlı kalma zorunluluğu yok yani :’) Umarım sizler için yararlı olur.

Access Control Flaws

Using an Access Control Matrix

Açıklama : Tek tek kullanıcılarda “Account Manager” rol’ünü denedik. Larry kullanıcısında ise işlem başarılı şekilde gerçekleşti.

Bypass a Path Based Access Control

Açıklama : Herhangi bir dosyayı seçtikten sonra dosyayı görüntüle tuşuna bastık ve giden isteği BurpSuite ile yakaladık. Burp üzerinde “File=” değişkenine ” ../../../../../WEB-INF/ ” parametresini yazdıktan sonra isteği gönderdik. Directory Listing yapmış olarak, belirttiğimiz dosyaya erişimi sağlayabilmiş olduk.

Stage 1 – Bypass Business Layer Access Control

Açıklama : ViewProfile butonuna bastıktan sonra isteği BurpSuite ile yakaladık. “Action” değişkenini “ViewProfile” den “DeleteProfile” parametresi ile değiştirerek isteği gönderdiğimizde ; Tom kullanıcısının hesabını silmiş olduk.

Stage 3 – Bypass Data Layer Access Control

Açıklama : Bizden “Tom” hariç başka bir kullanıcı hesabının görüntülenmesi isteniyor. Ben “Larry” kullanıcısını seçtim fakat şifresini bilmiyorum. Herhangi bir şifre yazıp Login butonuna bastıktan sonra isteği BurpSuite ile yakaladım. Larry kullanıcısının “employee_id’sinin 101” olduğunu öğrendim. Tom kullanıcısına giriş yaptım sonrasında ViewProfile butonuna tıkladım ve isteği BurpSuite ile yakaladım. Tom kullanıcısındayken employee_id değerim 105 oldu. Bu employee_id değerini, Larry’nin employee_id değeri ile değiştirdiğim zaman (yani yakaladığım istekte “employe_id=101” olarak değiştirdim) ve isteği gönderdiğimde Larry kullanıcısının hesabını görüntüleyebilmiş oldum.

Authentication Flaws

Forgot Password

Açıklama : Bir “Şifremi Unuttum” sayfası ile karşılaşıyoruz. Bize verdiği bilgilere göre kullanıcı ismimiz “webgoat”. Şifremizi görüntülemeden önce bize bir “Gizli Soru” soruluyor ve doğru cevabı verirsek şifremizi görebiliyoruz. Webgoat kullanıcısının gizli soru cevabı ise “red” olduğu bize verilmiş. Başka bir kullanıcının şifresini bulmamız isteniyor. “Admin” isimli bir kullanıcı var mı diye baktım ve olduğunu gördüm. Şifreyi görebilmemiz için “Color” un ne olduğunu da bilmemiz gerekiyor. Bu sayfa üzerinde örneğin “3 yanlış girişten sonra engelleme” gibi bir önlem alınmadığı için tüm renkleri tek tek denedim ve rengin “green” olduğu ortaya çıktı ve şifreyi görüntüleyebildim. Basit olarak bir BruteForce saldırısı yapılmaya açık.

Multi Level Login 1

Açıklama : Sistemde login olunmamız isteniyor ve bu sistemde bir doğrulama sistemi kullanılıyor. Kullanıcı adımız “Jane”, şifremiz ise “tarzan”. Login tuşuna bastığımızda bizden TAN #4 değerini istiyor. Varsayalım ki biz bu değeri bilmiyoruz ve sadece TAN #1 değerini biliyoruz. Login sayfasında, “Inspect Element” ile TAN’ın bulunduğu yerde ki Value’yi değiştirip 1 yazıyoruz. (Bizden TAN #4’ü istiyordu yani oradaki kodda <input name=”hidden_tan” value=”4″ yazıyordu. Biz sadece TAN #1’i bildiğimiz için o kodu <input name=”hidden_tan” value=”1″ olarak değiştirdik) ve bu sayede sonrasında textbox’a TAN #1 değerini yazarak oturum açabilmiş olduk.

Multi Level Login 2

Açıklama : Bize Joe kullanıcısı ve şifresi verilmiş. Fakat bizden Jane kullanıcısının hesabında oturum açmamız isteniyor. Kullanıcı adına “Joe”, şifreye “banana” yazdıktan sonra login butonuna bastık. Oturumu açabilmek için bizden TAN #1 değeri isteniyor. Bu sayfada tekrar “Inspect Elements”i açtık ve “Joe” değerinin hidden biçimde kaynak kodunda görüntülendiğini gördük. Value’yi “Joe” yerine “Jane” olarak değiştirip, TAN #1 değerini girdik ve “Jane” kullanıcısının hesabında Jane’nin “şifresini girmeden” oturum açabilmiş olduk.

Password Strenght

Açıklama : Bize verilen şifreleri https://howsecureismypassword.net/ sitesine yazarak, bir brute-force saldırısında şifrenin ne kadar sürede kırılabileceğini sorgulattık ve değerleri yazdık.

Session Managment Flaws

Session Fixation

Açıklama : Burada bizden Jane kullanıcısının Session’ı(Oturumunu) çalmamız isteniyor. İlk ekran görüntüsünde gördüğünüz gibi Jane’ye bir mail gönderiyoruz. Mailin içerisinde “Goat Hills Financial” isimli bir link oluşturmak için yazılmış olan kodları görüyoruz. O “<a href>” komudunun sonuna “&SID=833” ü ekledikten sonra maili gönderiyoruz. Tabii bu değeri istediğiniz bir şeyle değiştirebilirsiniz. Bir sonraki ekran görüntüsünde biz Kurban olan Jane kullancısı oluyoruz ve almış olduğumuz maildeki “Goat Hills Financial” linkine tıklıyoruz ve oturum açıyoruz. Şimdi tekrar Hacker kullanıcısı olduk ve biz de “Goat Hills Financial” linkine tıklıyoruz. URL’e baktığımızda “&SID=NOVALIDSESSION” değerini görüyoruz. Burada ki “NOVALIDSESSION” değerini, Jane kullanıcısına gönderdiğimiz “SID” değeriyle değiştiriyoruz. Yani burada biz “&SID=833” değerini gireceğiz. Ve bu şekilde Jane kullanıcısının oturumuna erişmiş olduk.

Spoof an Authentication Cookie

Açıklama : Bize 2 adet kullanıcı adı ve şifresi verilmiş. Sonrasında ise Alice kullanıcısının hesabında oturum açmamız isteniyor. Webgoat kullanıcısında oturum açtık ve Inspect Elements ile Cookie değerini inceledik “Cookie = 65432ubphcfx”. Sonra ki adımda Aspect kullanıcısında oturum açtık ve Inspect Elements ile Cookie değerini inceledik “Cookie = 65432udfqtb”. Cookie’lerde Sayıların(65432) sabit olarak aynı olduğunu fark ettik. Geriye kalan string değerini decode edebilir miyiz diye bakıyoruz.

https://cybersecurity.wtf/encoder/ ” sitesine, Webgoat kullanıcısından aldığımız Cookie’nin string değerlerini giriyoruz(yani “ubphcfx”) ve “Reverse” işlemi gerçekleştiriyoruz. Karşılaştığımız çıktı ise “xfchpbu” oluyor. Bu değeri(xfchpbu) “char–” (bir karakter aşağı kaydırma) işleminden geçiriyoruz ve aldığımız sonuç “webgoat” oluyor, yani kullancı adının ta kendisi. Aynı işlemi sırasıyla “Aspect” kullancısının Cookie değerine de yapıyoruz ve decode işlemlerinin sonucunda “Aspect” değerini görüyoruz. Varsayımımız doğrulandı, kullanıcı adı bir kaç encode işleminden sonra Cookie değeri olarak kullanılıyor.
Bizden Alice kullanıcısında oturum açmamız isteniyordu. Alice kullanıcısının Cookie’sini yaratmak için yaptığımız Decode işlemlerini reverse ederek “Alice” kullanıcı adı için encode işleminden geçireceğiz.
Alice’in tersten yazılışı = “ecila”. Şimdi de harf harf alfabede bir karakter üstlerini yazmamız gerekiyor.
e>f
c>d
i>j
l>m
a>b
Yani string “fdjmb” oluyor. Sonrasında bilgilerini bildiğimiz webgoat kullanıcısı ile login olurken giden isteği BurpSuite ile yakalıyoruz.
Sonrasında Alice için ürettiğimiz Cookie değerini, Burp isteğinde yakaladığımız Cookie ile değiştiriyoruz ve isteği gönderiyoruz. Bu sayede Alice’nin bilgilerini kullanmadan Alice kullanıcısında oturum açabilmiş olduk.

0x020

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

WordPress.com'da bir web sitesi veya blog oluşturun

Yukarı ↑

%d blogcu bunu beğendi: