Empire LupinOne

Bu, Empire Lupinone makinesi üzerinde gerçekleştirdiğim sızma testi raporudur. İçerisinde keşif aşamasından kullanıcı tanımlama ve yetki yükseltme süreçlerine kadar yaptığım her işlemi aşama aşama okuyabilirsiniz.

author image

Written by

Furkan İbiş

Published on

Jan 14

Empire LupinOne

Empire: LupinOne

Empire: LupinOne Nedir?

Empire: Lupinone, benim gibi sızma testini öğrenmek ve bu alanda kendini geliştirmek isteyen kullanıcılar için Vulnhub tarafından yayınlanmıştır.

Sistemi indirmek için Empire: Lupinone bağlantısını, yapımcılarını görmek için ise icex64 & Empire Cybersecurity bağlantısını kullanabilirsiniz.

Sistemin DHCP servisi aktif bir şekilde konfigüre edildiğinden, lab ortamını kurmak için öncelikle sanal makinelerimizi sistemimize yüklememiz yeterli olacaktır. Ardından, Empire: Lupinone için keşif aşamasına geçebiliriz.

Keşif

Hedef sistemi, Kali Linux sistemimle aynı ağa bağlı olacak şekilde kurdum. İlk amacımız, hedef sistemin IP adresini tespit etmek. Bu işlem için netdiscover veya doğrudan nmap aracını kullanabiliriz. Her iki araçla da yapacağımız işlem, bağlı olduğumuz ağdaki tüm IP adreslerine ICMP isteği göndererek ağda hangi cihazların bulunduğunu belirlemekten ibaret aslında.

nmap -sP 172.16.13.0/24

Burada görüldüğü gibi, hedef sistemimize 172.16.13.130 IP adresi atanmış durumda. Bu basit yöntemle IP adresini öğrendik. Peki, hedef sistemin sunduğu servisler nelerdir?

Bunu öğrenmek için yine nmap aracını kullanarak bir TCP Connect Scan taraması gerçekleştireceğim. Hedef sistemin log tutmasının lab ortamında bir sorun oluşturmayacağının farkındayım, bu yüzden TCP Connect Scan kullanmamda bir sakınca yok.

nmap -sT 172.16.13.130 -p-

Hedef sistemin HTTP ve SSH servislerini sağladığını görüyorum.

Bu aşamada, daha derine inerek ayrıntılı bir keşif işlemi yapmam gerektiğini düşünüyorum. Bu nedenle, hedef sisteme yönelik daha detaylı bir tarama gerçekleştirerek sağladığı HTTP servisi hakkında kapsamlı bilgiler edinmeyi amaçlıyorum. Bunun için nmap aracındaki HTTP-ENUM betiğini kullanarak çeşitli bilgiler edinebileceğim aşağıdaki komutu çalıştırıyorum.

nmap --script=http-enum 172.16.13.130 -p 80

Robots.txt Nedir?

Bu noktada robots.txt dosyasının içeriğini inceliyorum. Ancak, robots.txt dosyasının ne olduğunu açıklamak gerekirse:

robots.txt, bir web sitesinin kök dizininde yer alan ve genellikle web tarayıcılarına veya arama motoru botlarına yönelik talimatlar içeren bir dosyadır. Bu dosya, arama motorlarının sitenizin belirli bölümlerini tarayıp taramaması gerektiğini belirtmek amacıyla kullanılır.

Web tarayıcılarının veya arama motoru botlarının taramasına izin verilmeyen /~myfiles yolu dikkatimi çekiyor.

Bu path'e girdiğimde bir hata (Error) sayfası alıyorum. Ancak dikkatimi çeken iki önemli nokta var: Birincisi, sayfanın kaynak kodunda yer alan 'You can do it, keep trying.' mesajı. İkincisi ise gösterilen 404 mesajının gerçek bir 404 mesajı olmaması. Farkı açıklamak gerekirse:

FFUF Aracının Kullanımı

Bu noktada, başka sayfalar olup olmadığını merak ederek çeşitli path'leri manuel olarak deniyorum (örneğin, /~admin gibi). Ancak, bu denemeler sonucunda bir sonuca ulaşamıyorum. Sonunda, bu işlemi benim yerime gerçekleştirebilecek bir araç bulmak için araştırma yapmaya karar veriyorum. Dirb kullanmamamın sebebi, hedef sistemin sağladığı HTTP servisinde ~ karakteri ile çeşitli kullanıcıya yönelik dosyaların saklanması; ancak Dirb, tam olarak istediğim gibi bir tarama sağlayamıyor...

Araştırmalarım sonucunda ffuf aracını buldum. Kısaca açıklamak gerekirse, ffuf, Go ile yazılmış bir web fuzzer aracıdır. Bu aracı, hedef sistemin path'lerini bulmak için tam istediğim şekilde kullanabilirim.

ffuf -u http://172.16.13.130/~FUZZ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 200

Bu işlem sonrasında, ffuf aracı secret adında bir sayfanın daha bulunduğunu belirtiyor.

icex64'ün Arkadaşının Bıraktığı Not

Bu sayfaya gittiğimde, icex64 isimli kullanıcının en yakın arkadaşına bıraktığı bir notla karşılaşıyorum.

Burada üç önemli nokta dikkat çekiyor:

  1. icex64, buralarda bir yere SSH private key dosyasını sakladığını belirtiyor.
  2. 'Hackers don’t find it and crack my passphrase with fasttrack' ifadesinden, şifreyi fasttrack aracılığıyla bulabileceğimizi anlıyoruz.
  3. Hedef sistemde, muhtemelen 'icex64' kullanıcı adına sahip bir kullanıcı bulunuyor.

İlk maddeye göre, /~secret/ yolunun altında SSH private key içeren bir dosya olduğunu düşünüyorum. Bu nedenle, daha önce kullandığımı belirttiğim ffuf aracıyla /~secret/ yolundaki dosyaları bulmayı hedefliyorum.

ffuf -u http://172.16.13.130/~secret/FUZZ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -e .php,.html,.txt 

Bu şekilde ffuf aracını kullandığımda, beklediğim bir sonuçla karşılaşmıyorum. Uzun bir süre boyunca bu dosyaya nasıl erişebileceğimi düşünürken, dosyanın gizli bir dosya olabileceği ve başında nokta (.) işaretiyle arama yapmam gerektiği aklıma geliyor.

ffuf -u http://172.16.13.130/~secret/.FUZZ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -e .php,.html,.txt

Ve düşündüğüm gibi, dosya gizli bir dosya olarak karşıma çıkıyor. Ancak, çok fazla çıktı olduğu için gözden kaçmaması adına sonuçları dikkatlice incelemeniz gerekiyor.

Çözümleme

Sayfanın içinde, icex64'ün belirttiği gibi şifrelenmiş bir SSH key bulunuyor.

Bu key'i kaydedip çözmek için Cyberchef'i kullanıyorum ve base58 ile çözümleme yapıyorum. Çıktı, doğrudan icex64'ün özel SSH anahtarı olarak ortaya çıkıyor.

Bu noktada, bu SSH key'i icex64_ssh.txt isimli bir dosyaya kaydediyorum ve ssh2john aracıyla bunu John the Ripper'in işleyebileceği bir forma dönüştürüyorum. İkinci maddede belirttiğimiz gibi, fasttrack.txt ile çok kısa bir sürede şifreyi çözüyorum.

icex64'ün şifresini bulduğuma göre, şimdi yapmam gereken hedef sisteme SSH ile bağlanmak. Key dosyasının group ve others yetkilerini 0 yapmayı unutmayın.

Hedef Sisteme Giriş Yapmak

Ve hedef sistemin içindeyiz. İlk işim, bulunduğum dizindeki dosyalara bakmak. Burada user.txt isimli bir dosya görüyorum. Bu dosyanın içeriğini kontrol ettiğimde şöyle bir çıktı alıyorum. Dosyanın çıktısına bakarsak sanırım doğru yoldayız.

Diğer Kullanıcıları Tanımlamak

icex64'ün home klasöründe daha fazla bir şey bulamıyorum. Bu nedenle, sistemde başka hangi kullanıcıların olduğunu görmek için /etc/passwd dosyasını inceliyorum.

Sistemde bir de arsene isimli bir kullanıcı olduğunu görüyorum. User ID'si 1000 olduğu için, bu kullanıcının muhtemelen hedef sistemin ilk oluşturulmuş kullanıcısı olduğunu düşünüyorum. Arsene kullanıcısının home dizininde bulunan heist.py, note.txt ve .secret dosyaları dikkatimi çekiyor. Ayrıca, icex64 kullanıcısının sistemde neleri çalıştırabileceğini de merak ediyorum.

Dosya izinlerinden de görebileceğimiz gibi, .secret dosyasını henüz okuma şansımız yok. Ancak, note.txt ve heist.py dosyalarının group ve others için okuma (read) yetkisi verildiğini görüyorum. Note.txt ve heist.py dosyalarının içeriğini incelediğimde ise şunları görüyorum:

Dosya İzinleri Neden Önemlidir?

Burada şu konular dikkatimi çekiyor: Arsene, yazdığı kodun güvenliği konusunda icex64'den yardım istiyor. Bu konuya özellikle dikkat edilmesi kafamda acaba heist.py dosyasındaki kodun nelere yol açabileceğini incelemem ve araştırmam gerektiğini düşündürtüyor.

Öncelikle, bu modülün bulunduğu klasörü bulup inceleme yapmak istiyorum. Ancak, amacım başka olmasına rağmen beklenmedik bir sonuçla karşılaşıyorum. webbrowser modülünün yüklü olduğu path'i bulmak için yaptığım aramada, webbrowser.py dosyasının herkes tarafından yazılabilir ve çalıştırılabilir bir yetkiye sahip olduğunu görüyorum.

Bu noktada, yapılması gereken işlem olarak webbrowser.py modülüne bir reverse shell kodu eklemeyi hedefliyorum. Eklemeyi planladığım kodu buradan görebilirsiniz.

Kodu çalıştırmadan önce, yeni bir terminal açıp 4242 portunu dinleme moduna alıyorum.

Ardından, kodu Arsene kullanıcısı için çalıştırıyorum.

Arsene'nin Yetkileri

Kodu çalıştırdığım anda, açtığım terminale Arsene kullanıcısı olarak bir oturum açmış oluyorum. Bu aşamadan itibaren, ilk iş olarak Arsene'nin home dizinine ilerleyip .secret dosyasını okutarak karşıma Arsene'nin şifresini çıkartıyorum.

Bu parolayı kullanarak, önceki terminaldeki mevcut kullanıcıyı arsene olarak değiştiriyorum. Şimdi, arsene kullanıcısının sistemde hangi komutları çalıştırabildiğini merak ediyorum.

Ardından, GTFOBins sitesinden pip kullanılarak yazılmış komutları kullanıyorum.

TF=$(mktemp -d)
echo "import os; os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(tty) 2>$(tty)')" > $TF/setup.py
pip install $TF

Root Olmak

Ardından, hedef sistemde root yetkisini elde ediyorum. Root kullanıcısının home dizinine giderek oradaki dosyaları kontrol ediyorum.

Root.txt dosyasını kontrol ettiğimde ise şu harika sonucu görüyorum.

Hedef sisteme sızmış ve bu sızma testi sürecini tamamlamış oluyorum.

Bakış Açısının Önemi

Bu sızma testi sürecini kısaca özetlemem gerekirse, gerçekten çok fazla kaybolduğum kısımlar oldu. Görmem gereken noktaları kaçırdım ve çok sayıda tekrar ile yanlış işlemler yaptım; bu da bana oldukça fazla zaman kaybettirdi. Ancak, bu süreçte keyif almama engel olamadı. Yeni bakış açıları kazanmanın, sanırım bu işin en önemli parçası olduğunu düşünüyorum. Bir sonraki projeme bu düşünce ile yaklaşacağım.

Yazımı okuduğunuz için çok teşekkür ederim. Esen kalın.