VulnHub – NullByte-0x01 CTF Çözümü

Merhaba

Bildiğiniz üzere vulhub.com sitesi, community tarafından hazırlanan vulnerable yani zafiyet içeren sanal makinaların ve sistemlerin yayınlandığı bir platform. Bu platform farklı senaryoların bulunduğu, sonucunda bir bayrağın elde edildiği ufak CTF’lerin imajının paylaşıldığı bir yerdir. https://www.vulnhub.com

Son zamanlarda özellikle web uygulamalarına yoğunlaşmak zorunda kaldığım bir güvenlik testi sürecinden geçtiğim için özellikle network ve host bazlı saldırılar açısından paslanmamak adına vulnhost.com’a giriş en son yayınlanmış senaryolardan birisi olan NullByte 0x01’i indirmeye karar verdim. Yazının geri kalan bölümlerinde bu level’i geçmek ve /root/flag.txt dosyasına ulaşmak için yaptığım işlemleri adım adım anlatıyor olacağım. Sizde kendinizi denemek istiyorsanız https://www.vulnhub.com/entry/nullbyte-1,126/ adresinden sanal makina imajını indirebilirsiniz.

Kurulum ve Hedef Tespiti

Kurulumun yapılması son derece kolay bir operasyon. OVA formatında indireceğiniz NullByte0x01 doğrudan VirtualBox ve Vmware ile çalıştırılabilir. Saldırgan olarak kullanacağımız Kali ile NullByte makinalarının ikisinide NAT mod’a alarak birbirleri ile network bazlı konuşabilir hale getiriyoruz.

Nullbyte imajının network’te tespitinin yapılabilmesi adına öncelikle NAT network’ünde ki canlı makinaların tespiti yapılmalıdır.

Nmap’in -sn parametresi, herhangi bir port taraması gerçekleştirmeden sadece hedef adresin canlı olup olmadığını kontrol etmektedir. Bu işlemide Ping Scan adı verilen tarama tekniği ile gerçekleştirmektedir.

Bu listeyi biraz daha sade hale getirmek istersek;

Tüm sistem sanal ortamda çalıştığı için 10.0.0.1, 10.0.0.2 ve 10.0.0.254 önceden rezerve edilmiş adreslerdir. 10.0.0.136 ise taramayı gerçekleştirdiğimiz Kali makinamızın IP adresi. Geriye 10.0.0.137 kaldığına göre NullByte imajın 10.0.0.137 adresinde hizmet verdiği anlaşılmaktadır. Hedefin ipadresini kısa yoldan Vmware sisteminden de elde edebileceğimiz gibi, biraz ısınma olsun diye uzun yolu tercih ettiğimi belirtmek isterim.

Nmap, nmap ve yine nmap

İlk aşama olarak hedefte aktif olarak çalışmakta olan TCP servislerini ve versiyon bilgilerini tespit etmek amacıyla aşağıdaki tarama gerçekleştirilir.

Görüldüğü üzere 80 ve 777 portlarında Apache ve SSH servisi çalışmakta. Bu noktada 2 adet çalışma gerçekleştirilebilir. Öncelikle SSH servisine brute-force çalışması yapacağız. Bu çalışmayı gerçekleştirdiğim araç hakkında bilgilere https://www.mehmetince.net/beleth-multi-threat-sozluk-saldirilari-ile-ssh-hacking-performansi/ adresinden ulaşabilirsiniz.

1-2 saat hala bir sonuç elde edilemediği için başka yollar üzerinden saldırımıza devam etme kararı aldım. BU sefer 80. port’un daki apache servisi ise dirbuster çalıştırmaya karar verdim. Dirbuster sadece ve sadece 10.0.0.137/phpmyadmin adresinde kurulu son sürüm bir phpmyadmin tespit etti. Mysql için password brute-force işlemi gerçekleştirmek için BurpSuite Pro aracını kullandım. Yaklaşık 50.000 password denemesinden sonra hedef sistemde “weak password” kategorisinde herhangi bir zafiyetin olmadığına ikna oldum.

http://10.0.0.137/ adresini ziyaret ettiğimizde karşımıza aşağıdaki resim çıkmakta.
main

Bu resme exiftool ile baktığımızda aşağıda ki sonuç çıkmakta.

Gördüğünüz üzere http://10.0.0.137/kzMb5nVYJw/ adresine referansta bulunan bir açıklama bilgisi bulunmaktadır.

Deneme, Yanılma

http://10.0.0.137/kzMb5nVYJw/ adresinde karşımıza çıkan form’un HTML kaynaklarına baktığımızda aşağıdaki bilgiler gözükmektedir.

Görünen o ki, burada herhangi bir SQLi saldırısı gerçekleştirilmeyecek. Tekrardan Burp Suite Pro’yu kullanabiliriz ama bu sefer sırf egzersiz olsun diye hydra ile bu testi gerçekleştireceğim.

Bizim form alanımızda sadece key bulunmakta. Hydra ile username & password ikilisi denemek için dizayn edilmiş. Bu nedenle her ne kadar gereskzide olsa ^USER^ adında bir parametre daha tanımladım. Bu parametreye ise root adında bir bilgi atatım. Bu işlem tamamiyle işlevsiz olup HYDRA’nın düzgünce çalışabilmesi için gerçekleştirildi. key=^PASS^ise asıl deneme yanılma işlemini gerçekleştireceğimiz alan olarak seçildi. Sonuç olarak elite bu form alanını geçen bilgi oldu..!

SQLi

Form alanına elite bilgisini giriş yaptıktan sonra karşımıza basit bir başka form çıktı ve bize user search imkanı sundu.

http://10.0.0.137/kzMb5nVYJw/420search.php?usrtosearch=root123

Örneğin yukarıda ki gibi bir talep veri tabanında root123 verisini aramakta. Basit bir login TRUE sorgusu ile ilgili tabloda ki tüm kayıtlara aşağıdaki şekilde erişilebilir.

Sizler buradan sonra sqlmap ile devam edebilirsiniz. Ben yine egzersiz olsun diye manuel devam edeceğim.

Mevcut user root olduğu için doğrudan hedef sistemde INTO OUTFILE yapabilme imkanımız bulunmakta. Eğer web folder’ının izinleri yeterli düzeyde olsaydı bu işlemi yaparak doğrudan php backdoor upload gerçekleştirebilirdik. Öteki yandan mysql root user’ı ile bağlantı gerçekleştirildiği için root user’ın hash’lerini elde edip password crackin yapabiliriz veya doğrudan 420search.php dosyasının kaynak kodlarını okuyup veritabanı bağlantı bilgilerini elde edebiliriz. Ben load_file yöntemini tercih edeceğim.

Veri tabanı bilgilerini elde ettik..! root:sunnyvale . Veri tabanına http://10.0.0.137/phpmyadmin üzerinden erişip tabloları gezdiğimizde şu bilgi dikkatimizi çekiyor.

ramses : YzZkNmJkN2ViZjgwNmY0M2M3NmFjYzM2ODE3MDNiODE

Burada ki data adeta BASE64 gibi duruyor olsada sonda bir adet = eksik. Bunu ekleyerek decode ettiğimizde ise  c6d6bd7ebf806f43c76acc3681703b81 hash bilgisi karşımıza çıkmakta.Bu hash değerinin rainbow table ile kırılması son derece kolay.

c6d6bd7ebf806f43c76acc3681703b81 = omega

Bu bilgiler ile sunucuya SSH üzerinden erişebiliriz. Bu noktadan sonra yerel yetki yükseltme saldırıları ile /root/ dizini altına erişim gerçekleştirmeye çalışacaüız.

History

Bir alışkanlık olarak her hedef sisteme erişim sağladığım da ilk yaptığım iş mevcut kullanıcının komut geçmişini okumaktır.

Görüldüğü üzere /var/www/backup dizini altında bir adet ls komutu ardından ise procwatch adın da bir programın çalıştırılma işlemi gerçekleştirmiştir.

Bu çalıştırılabilir dosyayı yerel bilgisayarımız olan kali’ye indirerek analiz edeceğiz. Scp komutu ile dosyayı yerel bilgisayarınıza indirebilirsiniz.

Bu dosyayı gdb ile açıp main fonksiyonunu analiz ettiğimizde system fonksiyonunu çağırdığını görebilirsiniz.

Stack’in durumuna baktığımızda ise henüz herhangi bir verinin olmadığını görebiliriz.

Şimdi system fonksiyonu çağrısı öncesinde ki ASM kodlarına bakalım. 0x0804841e adresinde yani +35. satırda eax değerinin stack’e yüklendiğini görebilirsiniz. Bir sonraki komutla da system fonksiyonu çağırılmaktadır. Tam o ana break koyup stack’in durumuna bakalım. Böylece system fonksiyonuna gönderilen parametreye bakmış olacağız.

prowatch uygulamasını ilk çalıştırdığımız andan beri aklımda olan “Bu ps aux çıktısına benziyor..” düşüncesi doğrulanmış oldu. Basit anlamda system(“ps”); gibi bir C kodunun olduğunu görmüş olduk. Bu linux sistemlerde bir güvenlik açığına sebeb olmaktadır çünkü ps komutuna soft-link oluşturarak aslında istediğimiz linux komutunu çalıştırabilir olacağız. Şöyle ki;

Eğer herhangi bir programlama dili ile system fonksiyonunu kullanarak terminal komutu çağırırsanız, bu komut PATH global değişkeninde tanımlanan dizinlerin içerisinde aranacaktır.

Yani direk id komutu çağırılırsa sırasıyla şu kombinasyonlara bakılacaktır.

  • /usr/local/bin/id
  • /usr/bin/id

gibi.. Eğer biz bu global PATH değişkenine “İlk önce bulunduğum bu dizinine bak.” anlamına gelen .: eklersek öncelikle bulunduğumuz dizininde ki id komutunun varlığına bakılacaktır.

Güzel. Program tam dizin yazmak yerine doğrudan komutun kendisini yazdığı için bulunduğumuz dizin altında ki ps komutunu çağırabilir olacağız. Bunun için öncelikle mevcut dizin altına işimize yarayacak ps komutunun linkini oluşturalım.

Böylece system(“ps”) komutu aslında bulunduğumuz dizin altında ki ps komutunu çağırıyor olacaktır ki oda doğrudan /bin/sh’e linklenmiş durumdadır..!

  • Candan BÖLÜKBAŞ

    Böyle güzel yazılmış bir yazıyı okuyunca kolay geliyor ama yapana kadar birkaç saç ağartmak gerekiyor. Eline sağlık, müsadenle eğitimlerde referans vererek bu yazıyı kullamak isterim.

    • Teşekkür ederim :-) Tüm yazılarına amacı zaten kaynak olması, olabilmesi. Bu nedenle istediğin gibi referans olarak kullanabilirsiniz. Doğrudan aynı level’leri verip çözüm olarak bu linki vs gösterebilirsiniz abi.