Selam millet! Bu yazıda, birlikte HackTheBox platformunda yer alan Editor isimil makineyi çözeceğiz. Makine hakkında çok bir bilgim yok. Açıklama kısmında makinenin kendine gelmesi için 5 dakika bekleyin yazılmış. Tabi VIP üye değilseniz, makineyi yeniden başlatmadığınız sürece beklemenize gerek yok. Makinenin açık portlarını aşağıdaki resimde görüyorsunuz.
İki adet HTTP servisi açık durumda. 8080 numaralı HTTP servisinde bulunan uygulama hakkında baya bir dizin bilgisi vermiş. Bunlarıda robots.txt dosyasından edinmiş. Önce editor.htb domainini hedefin IP adresi ile beraber /etc/hosts dosyasına girelim ki bizi yönlendirmesin ve işimizi temiz bir şekilde yapıp çıkalım.
80 numaralı HTTP servisinin üzerinde çalışan uygulamayı aşağıdan görebilirsiniz. İçerisinde sadece kod editörü ve wiki.editor.htb sayfasına yönlendiren bir link bulunuyor.
Bu uygulama üzerinde, önemli olabilecek sadece wiki.editor.htb sayfasına yönlendiren bir link var. Bu adreside /etc/hosts dosyasına kayıt ettikten sonra 8080 numaralı port üzerinde çalışan uygulama ile aynı olduğunu öğreniyoruz. Sayfayı aşağıya kaydırdığımızda ise uygulamanın adını ve sürümünü görüyoruz.
Uygulamanın adını ve sürümünü internette arattığımızda bu exploit ile karşılaşıyoruz. Bu exploit'in cat /etc/passwd komutunu text parametresi eşliğinde yancıları ile beraber gönderdiğini görüyoruz. Böylece /etc/passwd dosyasının içerisindeki verileri ekrana yazdırıyor olmalı.
Bu komut yerine reverse shell alabileceğimiz bir komut ekleyelim. Daha sonra URL kodlaması yapalım.
Öncelikle 9001 numaralı port'u nc ile dinlemeye alalım. Daha sonra düzenlediğimiz yolu editor.htb:8080/xwiki/ adresinin sonuna ekleyelim. Böylece komut çalışacak ve bağlantımızı alacağız.
Bağlantıyı aldıktan sonra kolay kırılmasın diye sağlamlaştıralım.
> python3 -c "import pty;pty.spawn('/bin/bash')" Bu komut ile Python üzerinden interaktif bir shell elde ediyoruz.
> export TERM=xterm Bu komut, clear komutunu kullanabilmemiz için.
> CTRL + Z daha sonra stty raw -echo;fg Bağlantımızın kırılmaması için kullanıyoruz (CTRL + C ve Z yaptığımızda bağlantının kopmaması için).
Bağlantıyı sağlamlaştırdıktan sonra önemli bilgilerin olabileceği dosyaları aramaya koyuldum ve /usr/lib/xwiki-jetty/webapps/xwiki/WEB-INF dizinindeki hibernate.cfg.xml dosyasının içerisinde bir parola buldum.
ls /home komutunu kullanarak sistemde bulunan kullanıcıları görüntüledim. Sistemde sadece oliver ve root kullanıcısı bulunuyor. Elimdeki parolayı kullanarak oliver kullanıcısına geçiş yapabildim. SSH servisi üzerinden bağlandım bu sefer. Daha hızlı olacağını umuyordum ama ilk bağlantıyla aynı derece yavaş. Bir komut giriyorum bir saniye bekletiyor çıktıyı vermek için. id komutunu kullandığımda netdata isimli bir grupta olduğumu öğrendim. Bu grubun içerisinde bir sürü dosya var, şimdilik görmezden gelelim. netstat -tupln komutunu kullanarak arkada çalışan portları görüntülemek istediğimizde üç farklı port ile karşılaşıyoruz.
- 38461 numaralı port üzerinde sadece bir 404 sayfası bulunuyor.
- 8125 numaralı port bir HTTP servisi değil, başka bir servisi çalıştırıyor olabilir.
- 19999 numaralı port'un üzerinde ise bir web uygulaması çalışıyor.
Tüm bunları curl aracını kullanarak öğrendim. Örneğin curl 127.0.0.1:19999 komutunu kullandığımda sayfanın HTML kodlarını ekrana yazdırdı. Şimdi web uygulaması ile ilgilenebilmemiz için SSH tünelleme aracılığıyla yerel ağ üzerinden erişmeye çalışmamız gerekiyor. Önce SSH bağlantınızı sonlandırın, sonrada aşağıda vereceğim komutu çalıştırın. Tekrar bir bağlantı kazanacak ve yerel ağındaki 19999 numaralı port'a erişebileceğiz.
Terminal açıldıktan sonra tarayıcıdan localhost:19999 adresini açalım.
Yarış arabasına benziyor haha. Web uygulamasının çok karışık görünmesi sizi korkutmasın. Sağ üst kısımda bir uyarı görüyorsunuz. Ona tıkladığımızda güncellenmemiş bir program olduğunu görüyoruz.
1.45.2 sürümünü kullandığı ve kritik değere sahip bir program olduğu belirtilmiş. İşaretlediğim yere tıkladığımızda bu programın ne olduğunu görüyoruz.
Netdata isimli bir programı güncellememiz gerekiyormuş. Hatırlarsanız bizde bu programın bulunduğu grupta bulunuyorduk. İnternette adını ve sürümünü arattığımızda aşağıdaki sayfa ile karşılaşıyoruz.
Programın bu sürümünde komut enjeksiyonu zafiyeti bulunuyormuş. Netdata grubunun sahibi olduğu dosyalara bakarken ndsudo isimli dosyayı görmüştüm. Yazdığına göre bu dosyaya SUID biti atanmış ve PATH değişkeni ile arama yaptığı dizini değiştirebiliyormuşuz. Hemen aşağısında bu zafiyeti nasıl sömürebileceğimizi anlatmış, ona da bakalım.
Öncelikle ndsudo'nun komut listesinde bulunan bir dosyayı seçeceğiz. Örnek olarak nvme dosyasını vermiş. Bizde onu kullanalım. Sonra PATH değişkenine oluşturduğumuz dosyanın bulunduğu dizine ekleyeceğiz. Daha sonra oluşturduğumuz nvme dosyasını çalıştırabilmesi için arama yapmasını sağlamamız gerekiyor. İşe c kodu yazıp derleyerek başlayalım o halde.
Verdiğim kodu test.c olacak şekilde kayıt edelim. Daha sonra gcc -o nvme test.c komutunu kullanarak kodu derleyelim. Bunu kendi sisteminizde yapın, hedef sistemde gcc bulunmuyor.
Program derlendikten sonra nvme isimli bir dosya göreceksiniz. İşte o bizim giriş biletimiz olacak. scp nvme [email protected]:/tmp/ komutunu kullarak hedef sisteme yükleyelim. Daha sonra SSH bağlantımıza geçerek önce export PATH=/tmp:$PATH komutu ile nvme dosyasını yüklediğimiz dizini seçelim. Daha sonra /opt/netdata/usr/libexec/netdata/plugins.d/ndsudo nvme-list komutunu kullanarak programı çalıştıralım. Program nvme dosyasını /tmp dizininde arayacak ve bulduğunda çalıştıracak. Çalıştırdıktan sonra ise bize root yetkisi verecek.
Böylece konunun sonuna geldik. Artık tek yapmanız gereken /home/oliver/user.txt ve /root/root.txt dosyalarından bayrakları toplayıp, makinenin odasına vermek. Konuyu beğendiyseniz kanalıma abone olabilir ve diğer çözümlerime göz atabilirsiniz:
> HTB - Cap Makinesinin Çözümü
> THM - CyberHeroes Meydan Okumasının Çözümü
> Hackviser - Rivalry Makinesinin Çözümü
> HTB - JinjaCare Meydan Okumasının Çözümü
> THM - The Sticker Shop Odasının Çözümü
İki adet HTTP servisi açık durumda. 8080 numaralı HTTP servisinde bulunan uygulama hakkında baya bir dizin bilgisi vermiş. Bunlarıda robots.txt dosyasından edinmiş. Önce editor.htb domainini hedefin IP adresi ile beraber /etc/hosts dosyasına girelim ki bizi yönlendirmesin ve işimizi temiz bir şekilde yapıp çıkalım.
80 numaralı HTTP servisinin üzerinde çalışan uygulamayı aşağıdan görebilirsiniz. İçerisinde sadece kod editörü ve wiki.editor.htb sayfasına yönlendiren bir link bulunuyor.
Bu uygulama üzerinde, önemli olabilecek sadece wiki.editor.htb sayfasına yönlendiren bir link var. Bu adreside /etc/hosts dosyasına kayıt ettikten sonra 8080 numaralı port üzerinde çalışan uygulama ile aynı olduğunu öğreniyoruz. Sayfayı aşağıya kaydırdığımızda ise uygulamanın adını ve sürümünü görüyoruz.
Uygulamanın adını ve sürümünü internette arattığımızda bu exploit ile karşılaşıyoruz. Bu exploit'in cat /etc/passwd komutunu text parametresi eşliğinde yancıları ile beraber gönderdiğini görüyoruz. Böylece /etc/passwd dosyasının içerisindeki verileri ekrana yazdırıyor olmalı.
Bu komut yerine reverse shell alabileceğimiz bir komut ekleyelim. Daha sonra URL kodlaması yapalım.
Öncelikle 9001 numaralı port'u nc ile dinlemeye alalım. Daha sonra düzenlediğimiz yolu editor.htb:8080/xwiki/ adresinin sonuna ekleyelim. Böylece komut çalışacak ve bağlantımızı alacağız.
Bağlantıyı aldıktan sonra kolay kırılmasın diye sağlamlaştıralım.
> python3 -c "import pty;pty.spawn('/bin/bash')" Bu komut ile Python üzerinden interaktif bir shell elde ediyoruz.
> export TERM=xterm Bu komut, clear komutunu kullanabilmemiz için.
> CTRL + Z daha sonra stty raw -echo;fg Bağlantımızın kırılmaması için kullanıyoruz (CTRL + C ve Z yaptığımızda bağlantının kopmaması için).
Bağlantıyı sağlamlaştırdıktan sonra önemli bilgilerin olabileceği dosyaları aramaya koyuldum ve /usr/lib/xwiki-jetty/webapps/xwiki/WEB-INF dizinindeki hibernate.cfg.xml dosyasının içerisinde bir parola buldum.
ls /home komutunu kullanarak sistemde bulunan kullanıcıları görüntüledim. Sistemde sadece oliver ve root kullanıcısı bulunuyor. Elimdeki parolayı kullanarak oliver kullanıcısına geçiş yapabildim. SSH servisi üzerinden bağlandım bu sefer. Daha hızlı olacağını umuyordum ama ilk bağlantıyla aynı derece yavaş. Bir komut giriyorum bir saniye bekletiyor çıktıyı vermek için. id komutunu kullandığımda netdata isimli bir grupta olduğumu öğrendim. Bu grubun içerisinde bir sürü dosya var, şimdilik görmezden gelelim. netstat -tupln komutunu kullanarak arkada çalışan portları görüntülemek istediğimizde üç farklı port ile karşılaşıyoruz.
- 38461 numaralı port üzerinde sadece bir 404 sayfası bulunuyor.
- 8125 numaralı port bir HTTP servisi değil, başka bir servisi çalıştırıyor olabilir.
- 19999 numaralı port'un üzerinde ise bir web uygulaması çalışıyor.
Tüm bunları curl aracını kullanarak öğrendim. Örneğin curl 127.0.0.1:19999 komutunu kullandığımda sayfanın HTML kodlarını ekrana yazdırdı. Şimdi web uygulaması ile ilgilenebilmemiz için SSH tünelleme aracılığıyla yerel ağ üzerinden erişmeye çalışmamız gerekiyor. Önce SSH bağlantınızı sonlandırın, sonrada aşağıda vereceğim komutu çalıştırın. Tekrar bir bağlantı kazanacak ve yerel ağındaki 19999 numaralı port'a erişebileceğiz.
ssh [email protected] -L 19999:127.0.0.1:19999
Terminal açıldıktan sonra tarayıcıdan localhost:19999 adresini açalım.
Yarış arabasına benziyor haha. Web uygulamasının çok karışık görünmesi sizi korkutmasın. Sağ üst kısımda bir uyarı görüyorsunuz. Ona tıkladığımızda güncellenmemiş bir program olduğunu görüyoruz.
1.45.2 sürümünü kullandığı ve kritik değere sahip bir program olduğu belirtilmiş. İşaretlediğim yere tıkladığımızda bu programın ne olduğunu görüyoruz.
Netdata isimli bir programı güncellememiz gerekiyormuş. Hatırlarsanız bizde bu programın bulunduğu grupta bulunuyorduk. İnternette adını ve sürümünü arattığımızda aşağıdaki sayfa ile karşılaşıyoruz.
Programın bu sürümünde komut enjeksiyonu zafiyeti bulunuyormuş. Netdata grubunun sahibi olduğu dosyalara bakarken ndsudo isimli dosyayı görmüştüm. Yazdığına göre bu dosyaya SUID biti atanmış ve PATH değişkeni ile arama yaptığı dizini değiştirebiliyormuşuz. Hemen aşağısında bu zafiyeti nasıl sömürebileceğimizi anlatmış, ona da bakalım.
Öncelikle ndsudo'nun komut listesinde bulunan bir dosyayı seçeceğiz. Örnek olarak nvme dosyasını vermiş. Bizde onu kullanalım. Sonra PATH değişkenine oluşturduğumuz dosyanın bulunduğu dizine ekleyeceğiz. Daha sonra oluşturduğumuz nvme dosyasını çalıştırabilmesi için arama yapmasını sağlamamız gerekiyor. İşe c kodu yazıp derleyerek başlayalım o halde.
C:
#include <unistd.h>
int main() {
setuid(0);
setgid(0);
execl("/bin/bash", "bash", NULL);
return 0;
}
Verdiğim kodu test.c olacak şekilde kayıt edelim. Daha sonra gcc -o nvme test.c komutunu kullanarak kodu derleyelim. Bunu kendi sisteminizde yapın, hedef sistemde gcc bulunmuyor.
Program derlendikten sonra nvme isimli bir dosya göreceksiniz. İşte o bizim giriş biletimiz olacak. scp nvme [email protected]:/tmp/ komutunu kullarak hedef sisteme yükleyelim. Daha sonra SSH bağlantımıza geçerek önce export PATH=/tmp:$PATH komutu ile nvme dosyasını yüklediğimiz dizini seçelim. Daha sonra /opt/netdata/usr/libexec/netdata/plugins.d/ndsudo nvme-list komutunu kullanarak programı çalıştıralım. Program nvme dosyasını /tmp dizininde arayacak ve bulduğunda çalıştıracak. Çalıştırdıktan sonra ise bize root yetkisi verecek.
Böylece konunun sonuna geldik. Artık tek yapmanız gereken /home/oliver/user.txt ve /root/root.txt dosyalarından bayrakları toplayıp, makinenin odasına vermek. Konuyu beğendiyseniz kanalıma abone olabilir ve diğer çözümlerime göz atabilirsiniz:
> HTB - Cap Makinesinin Çözümü
> THM - CyberHeroes Meydan Okumasının Çözümü
> Hackviser - Rivalry Makinesinin Çözümü
> HTB - JinjaCare Meydan Okumasının Çözümü
> THM - The Sticker Shop Odasının Çözümü
Son düzenleme:


