Vulnhub-Cryptobank Walkthrough

Vulnhub-Cryptobank Walkthrough

Merhabalar arkadaşlar bu yazıda Vulnhub platformu üzerinde bulunan orta seviye olarak belirlenmiş olan Cryptobank makinesinin çözümünü anlatmaya çalışacağım. Cryptobank makinesi, SQL Injection zafiyeti ile kullanıcı ve parolalarının sömürülmesiyle yetkili bir kullanıcı elde etme, ardından bu yetki ile gizli dizinlerin keşif edilip backup dosyaları sayesinde kaynak kodlara erişim sağlanarak WAF’ın bypass edilmesiyle komut çalıştırılarak shell ve user alınması ve son olarak proxy tünelleme ile hedef üzerinde çalışan docker servisinin keşfi ile ilgili zafiyetin bulunarak root kullanıcısının elde edilmesi şeklinde bir hikayeye sahiptir.
Makineye buradan ulaşabilirsiniz.

ENUMERATION

İlk olarak makinenin ağdaki keşfini sağlamak için netdiscover aracını kullanıyoruz ve makine IP adresini öğreniyoruz.

Ardından makine üzerinde nmap taraması gerçekleştiriyoruz.

Görüldüğü üzere makine üzerinde 22 ve 80 portları açık durumda. 80 portu üzeridne Cryptobank web servisi çalışmakta. İkinci bir adım olarak dizin taraması gerçekleştiriyoruz.

Burada, /development dizinini ziyaret ettiğimizde bizden geçerli oturum bilgileri ile giriş yapmamız isteniyor. Fakat herhangi bir girdiye sahip olmadığımızdan web sitesini inceleyerek bilgi edinmeye çalışıyoruz. Web sitesi üzerinde ilk dikkatimizi çeken nokta kişiler ve bilgileri oluyor.

Kullanıcılar için belirtilen linkleri ele aldığımız da örnek olarak Bill White için “bill.w” kullanıcı adı değeri şeklinde tüm kullanıcılar için link olarak verilmiş ve bunları not olarak saklıyoruz. Ardından login sayfasını SQLi ile bypass etmeye çalışıyoruz.

“admin’ or 1=1—“ payloadı ile bypass işlemini denediğimizde başarılı bir sonuç elde ediyoruz ve bizi CEO olan williamdelisle olarak giriş yaptırıyor. Burada burpsuite ile araya girerek isteği sqlmap’de kullanmak üzere kaydediyoruz.

Komut satırından “ sqlmap –r istek.req –p user –dbs –batch” komutunu çalıştırarak veri tabanı ismini elde ediyoruz.

Veri tabanı ismini “cryptobank” olarak elde ettikten sonra “ sqlmal –r istek –p user –D cryptobank –tables –batch “  komutunu çalıştırarak veri tabanı tablolarını listeliyoruz.

Ardından “sqlmap –r istek.req –p user –D cryptobank –T accounts –dump –batch “ komutu ile accounts tablasonun içeriğini dump ederek kullanıcı adları ve parolaları elde ediyoruz.

/development dizinine giriş yapabilmek için elde ettiğimiz kullanıcı isimlerini web sitesi üzerinden elde ettiğimiz kullanıcı isimleriyle birlikte bir dosyaya ve parolaları da ayrı bir dosyaya aldıktan sonra “hydra –L users.txt –P pass.txt cryptobank.local –f http-get /development” komutunu çalıştırarak bruteforce saldırısı ile geçerli kullanıcı adı ve parola değerini elde ediyoruz.

Bruteforce saldırısının ardından juliusb.wJWm4CgV26 şeklinde kullanıcı adı ve parola değerlerini elde ediyoruz. Ardından development dizinine giriş yaptığımızda aşağıdaki gibi sayfa karşımıza çıkıyor.

SHELL

Burada giriş yaptıktan sonra bize atanan Authorization header değerini de ekleyerek bir dizin taraması daha gerçekleştiriyoruz.

/backups ve /tools olmak üzere iki adet dizin elde ettik. Tools dizinini ziyare ettiğimizde Command Execution seçeneği bulunmakta fakat burada karşımıza çıkan inputlara bypass girdileri denediğimizde WAF engeli karşımıza çıkmakta.

Backups dizinini incelediğimizde ise bir home dizini karşımıza çıkmakta ve web sitesinin şeması karşımıza çıkmakta. Bu adımda bir dizin taraması daha gerçekleştiriyoruz.

Burada “.git” adında gizli bir dizin elde ediyoruz. Bu github proje commitlenirken otomatik oluşturulan dosya.

Githack aracını kullanarak kaynak dosyalarını elde etmeye çalışacağız. Bunun için “GitHack.py http://cryptobank.local/development/backups/home/.git/komutunu girerek kaynak kodları elde ediyoruz. Kaynak kodları incelediğimizde command execution için belirlenen inputlar ile ilgili betik dikkatimizi çekiyor.

Burada username kısmına alınan girdiği komut olarak çalıştırıyor fakat parola girdisi olarak Julius kullanıcısına ait parolanın girilmesi gerekli. Bilgiler dahilinde kendi makinemiz üzerinde reverse  shell betiğini içeren bash dosyası oluşturuyoruz httpserver kullanarak wget aracı ile hedef makineye aktarıyoruz ve ardından scriptimizi çalıştırarak reverse shell alıyoruz.

Httpserver ile dosyanın aktarılması işlemlerine daha ayrıntılı şekilde buradan ulaşabilirsiniz.

ROOT

Shell aldıktan sonra makine üzerinde bilgi edinirken, makine üzerinde docker servisinin çalıştığını gözlemliyoruz. Bunu linenum gibi otomatize edilmiş scriptler yardımıyla tarama yaparak görebiliriz ya da netstat aracıyla network bağlantılarını kontrol ettiğimizde de gözlemleyebiliriz.

Görüldüğü üzere 172.17.0.1 IP adresiyle 8983 portu üzerinde bu servis çalışmakta. Docker üzerinde hangi servisin çalıştığını öğrenmek ve bilgi edinmek için öncelikle proxy tünelleme ile kendi makinemiz üzerinden erişim sağlamaya çalışalım. Bunun için revsocks aracından faydalanacağız. Öncelikle kendi makinemiz üzerinde 8443 portunu dinlemeye alıyoruz ve hedef makine üzerinde bu porta bağlanıyoruz.

Ardından web browser üzerinde aşağıdaki gibi proxy ayarlarımızı yapıyoruz.

Belirtilen IP ve portu ziyaret ettiğimizde görüyoruz ki üzerinde Solr 8.1.1 çalışmakta.

Solr 8.1.1 sürümüne ait zafiyetleri kontrol ediyoruz.

Solr’a ait bir remote code execution zafiyeti bulduk. Zafiyeti sömürmek için python scriptini aşağıdaki gibi çalıştırıyoruz ve sudo grubunda bulunan solr kullancısı olarak shell alıyoruz.

Son olarak, sudo izinlerini kontrol  ediyoruz ve root parolası olmadan, biraz tahmine dayalı olarak belirlenmiş solr kullanıcısına ait parola ile root kullanıcısına geçiş yapabileceğimizi görüyoruz ve shellimizi root kullanıcısına yükseltiyoruz.

Related Posts

Facebook Comments