SelamünAleyküm Dostlar! 
2.Bölümde Linux terminalinin gücünü keşfettik. Şimdi sıra, penetration testing dünyasının diğer önemli yarısında Windows.
Neden Windows önemli?
Çünkü hedef sistemlerin büyük çoğunluğu Windows sunucuları ve iş istasyonlarıdır. Active Directory, Windows servisleri ve Windows tabanlı uygulamaları anlamak, test etmek ve güvenliğini sağlamak için bu ortamın dilini konuşmalısınız.
Linux'ta "siyah ekran" neyse, Windows'ta da Command Prompt (CMD) ve PowerShell odur.
YASAL UYARI YAPMAK ZORUNDAYIZ: Bu seride gösterilen tüm komutlar ve teknikler sadece kendi laboratuvar ortamınızda (örneğin, kurduğunuz sanal Windows makinelerde) veya açıkça yazılı izin verilen sistemlerde kullanılmalıdır. İzinsiz bir Windows ağında veya sistemde komut çalıştırmak, bilgi toplamak veya tarama yapmak TCK 243-244. maddelere göre suçtur. Lütfen etik ve yasal sınırlar içinde kalın.
Penetration tester'lar sadece saldırı aracı (Kali Linux) kullanmaz; hedef sistemin iç yapısını da derinden anlamak zorundadır. Bir Windows ağına sızdığınızda veya bir Windows sunucusunu test ettiğinizde, yapacağınız ilk işlerden biri o sistemde komut çalıştırarak bilgi toplamak olacaktır. İşte burada CMD ve PowerShell devreye girer.
İki ortamıda temel bir karşılaştırması yapalım:
CMD'yi başlatmak için
Klasik CMD Ekran Görüntüsü:
1. Temel Dizin ve Dosya Komutları
2. Sistem ve Ağ Bilgisi Komutları (Pentesterlar İçin En Önemli Kısım)
Bu komutlar, bir sisteme erişim sağladığınızda ilk çalıştıracağınız, "sistemi anlama" komutlarıdır.
3. Öğrendiklerimizle Pratik için Basit Bilgi Toplama Script'i Yazalım: Temel Sistem Enumeration Script'i (Batch)
Basit bir .bat dosyası oluşturarak bu komutları birleştirelim:
Bu betiği
PowerShell'i başlatmak için
Klasik Powershell Ekran Görüntüsü: Mavi arka planlı,
1. PowerShell Felsefesi: Cmdlet'ler ve Pipeline
PowerShell komutlarına cmdlet (command-let okunur) denir. Standart yapıları
En güçlü özelliği pipeline (|). Linux'takinden daha gelişmiş olarak, sadece metin değil, nesneleri bir cmdlet'den diğerine aktarır. Bu nesnelerin özelliklerine (
2. Temel Cmdlet'ler ve CMD Karşılıkları
3. Penetration Testing İçin Kritik PowerShell Cmdlet'leri
4. Pipeline Gücü: Veriyi Filtreleme, Biçimlendirme ve Dışa Aktarma
PowerShell'in gerçek gücü, veriyi işleme şeklindedir.
5. PowerShell ile Uzaktan Komut Çalıştırma
Penetration testing'deki en önemli yeteneklerden biri, bir sistemden diğerine komut göndermektir. PowerShell bunu
UYARI: Bu teknik, ancak hedef sistemde yetkiniz varsa ve Windows Uzaktan Yönetimi (WinRM) açıksa çalışır. İzinsiz kullanımı kesinlikle yasaktır.
Bir sonraki bölümde, bu iki dünyayı (Linux ve Windows) içinde barındıracak, güvenli Laboratuvar Ortamımızı Kuracağız. VirtualBox/VMware, Kali Linux ve hedef Windows sanal makinelerinin kurulumunu adım adım işlemeye çalışacağız.
Not: Bu bölümde geçen tüm komutlar, kendi kontrolünüzdeki sanal makinelerde veya açıkça test etme izni verilmiş sistemlerde denenmelidir.
2.Bölümde Linux terminalinin gücünü keşfettik. Şimdi sıra, penetration testing dünyasının diğer önemli yarısında Windows.
Neden Windows önemli?
Çünkü hedef sistemlerin büyük çoğunluğu Windows sunucuları ve iş istasyonlarıdır. Active Directory, Windows servisleri ve Windows tabanlı uygulamaları anlamak, test etmek ve güvenliğini sağlamak için bu ortamın dilini konuşmalısınız.
Linux'ta "siyah ekran" neyse, Windows'ta da Command Prompt (CMD) ve PowerShell odur.
YASAL UYARI YAPMAK ZORUNDAYIZ: Bu seride gösterilen tüm komutlar ve teknikler sadece kendi laboratuvar ortamınızda (örneğin, kurduğunuz sanal Windows makinelerde) veya açıkça yazılı izin verilen sistemlerde kullanılmalıdır. İzinsiz bir Windows ağında veya sistemde komut çalıştırmak, bilgi toplamak veya tarama yapmak TCK 243-244. maddelere göre suçtur. Lütfen etik ve yasal sınırlar içinde kalın.
Neden Windows Komut Satırı ve PowerShell Bu Kadar Kritik?
Penetration tester'lar sadece saldırı aracı (Kali Linux) kullanmaz; hedef sistemin iç yapısını da derinden anlamak zorundadır. Bir Windows ağına sızdığınızda veya bir Windows sunucusunu test ettiğinizde, yapacağınız ilk işlerden biri o sistemde komut çalıştırarak bilgi toplamak olacaktır. İşte burada CMD ve PowerShell devreye girer.
- Command Prompt (CMD): Windows'un geleneksel, basit komut satırı ortamı. Temel sistem ve ağ yönetimi için kullanılır.
- PowerShell: Microsoft'un CMD'nin çok ötesine geçen, güçlü bir komut satırı kabuğu ve betik dili. Penetration testing'de altın standarttır. Nesne yönelimlidir, .NET Framework ile entegredir ve sistemi Linux'taki gibi derinlemesine kontrol etmenizi sağlar. Birçok gelişmiş saldırı aracı ve framework'ü (PowerSploit, Empire, Nishang) PowerShell tabanlıdır.
İki ortamıda temel bir karşılaştırması yapalım:
| Özellik | Command Prompt (CMD) | PowerShell (PS) |
|---|---|---|
| Temel Amacı | Basit komutlar, toplu iş dosyaları (.bat) | Gelişmiş sistem yönetimi, otomasyon, betikleme (.ps1) |
| Çıktı Yapısı | Düz metin (Text) | Nesneler (Objects) – üzerinde işlem yapılabilir |
| Güç & Esneklik | Sınırlı | Çok yüksek (.NET entegrasyonu sayesinde) |
| Pentest'teki Rolü | Temel bilgi toplama, ağ keşfi | İleri seviye bilgi toplama, kalıcılık, yanal hareket, exploit |
| Varsayılan Erişim | Tüm kullanıcılarda | Modern Windows'ta kısıtlı, yükseltilmiş yetki gerektirebilir |
Windows Komut Satırı (CMD) Temelleri
CMD'yi başlatmak için
Windows Tuşu + R yapıp cmd yazın ve Enter'a basın. Veya arama çubuğuna "cmd" yazıp "Command Prompt" uygulamasını çalıştırın.Klasik CMD Ekran Görüntüsü:
1. Temel Dizin ve Dosya Komutları
- cd (Change Directory): Dizin değiştirir.
Kod:cd Desktop # Masaüstü dizinine geçer cd .. # Bir üst dizine çıkar cd \ # Kök dizine (C:\) geçer D: # D sürücüsüne geçer (cd değil, direkt sürücü harfi!)
- dir (Directory): Dizindeki dosya ve klasörleri listeler. Linux'taki
lskomutunun karşılığıdır.
Kod:dir # Basit liste dir /a # Gizli dosyalar dahil tümünü listeler dir /s # Alt dizinleri de rekürsif olarak listeler dir *.txt # Sadece .txt uzantılı dosyaları listeler
- type & more: Dosya içeriğini görüntüler. Linux'taki
catvelesskomutlarına benzer.
Kod:type notes.txt # notes.txt dosyasının içeriğini gösterir type notes.txt | more # İçeriği sayfa sayfa gösterir (uzun dosyalar için)
- copy, move, del, mkdir, rmdir: Dosya işlemleri.
Kod:copy file1.txt file2.txt # Kopyalama move file1.txt C:\Temp\ # Taşıma del secret.txt # Dosya silme (DİKKAT! Geri alacağım dersen.Geri dönüşüm kutusuna gitmez :) ) mkdir PentestLab # Yeni klasör oluşturma rmdir OldFolder # Boş klasörü silme
2. Sistem ve Ağ Bilgisi Komutları (Pentesterlar İçin En Önemli Kısım)
Bu komutlar, bir sisteme erişim sağladığınızda ilk çalıştıracağınız, "sistemi anlama" komutlarıdır.
- whoami: Mevcut kullanıcıyı gösterir. Hangi yetkilerle çalıştığınızı anlamak için ilk adım.
Kod:whoami # Örnek: desktop-abc123\student whoami /priv # Kullanıcının ayrıcalıklarını (privileges) listeler whoami /groups # Kullanıcının üyesi olduğu grupları listeler
- systeminfo: Sistem hakkında detaylı bilgi verir. Zaafiyet taraması için altın değerindedir.
Kod:systeminfo # İşletim sistemi adı, versiyon, kurulum tarihi, hotfix'ler, donanım vs. systeminfo | findstr /B /C:"OS Name" /C:"OS Version" # Sadece OS bilgisini çeker
- hostname: Bilgisayarın adını gösterir.
- ipconfig: Ağ yapılandırma bilgilerini gösterir. Linux'taki
ifconfig/ip addrkarşılığı.
Kod:ipconfig # Tüm arabirimlerin IP, alt ağ maskesi, varsayılan ağ geçidi ipconfig /all # MAC adresi, DNS sunucuları, DHCP bilgisi dahil tüm detay
- netstat: Aktif ağ bağlantılarını, dinleme portlarını ve routing tablosunu gösterir.
Kod:netstat -ano # Tüm bağlantıları ve dinleme portlarını, ilgili PID ile gösterir # -a: Tümü, -n: Sayısal adresler, -o: İşlem ID'si (PID)
- net Komutu: Windows ağ yönetiminin İsviçre çakısı. Kullanıcı, paylaşım, grup ve oturum bilgilerini öğrenmek için kritiktir.
Kod:net users # Sistemdeki tüm kullanıcı hesaplarını listeler net localgroup administrators # Yöneticiler grubundaki kullanıcıları listeler net share # Açık dosya paylaşımlarını listeler net session # Sisteme bağlı olan uzak kullanıcıları listeler (eğer varsa) net use * # Eşleştirilmiş ağ sürücülerini gösterir
- tasklist & taskkill: Çalışan prosesleri listeler ve durdurur.
Kod:tasklist # Linux'taki `ps` komutu gibi çalışan prosesleri listeler tasklist /svc # Proseslerle ilişkili servisleri de gösterir taskkill /PID 1234 /F # PID'si 1234 olan prosesi zorla durdurur (/F force)
3. Öğrendiklerimizle Pratik için Basit Bilgi Toplama Script'i Yazalım: Temel Sistem Enumeration Script'i (Batch)
Basit bir .bat dosyası oluşturarak bu komutları birleştirelim:
Kod:
@echo off
echo ===== TEMEL SİSTEM ENUMERATION RAPORU ===== > system_scan.txt
echo Tarih: %date% %time% >> system_scan.txt
echo. >> system_scan.txt
echo [1] KULLANICI VE SİSTEM BİLGİSİ >> system_scan.txt
whoami >> system_scan.txt
echo. >> system_scan.txt
hostname >> system_scan.txt
echo. >> system_scan.txt
systeminfo | findstr /C:"OS Name" /C:"OS Version" /C:"System Type" >> system_scan.txt
echo. >> system_scan.txt
echo [2] AĞ YAPILANDIRMASI >> system_scan.txt
ipconfig /all | findstr /C:"IPv4" /C:"Physical Address" /C:"DNS Servers" >> system_scan.txt
echo. >> system_scan.txt
echo [3] AKTİF BAĞLANTILAR (İlk 10 kayıt) >> system_scan.txt
netstat -ano | findstr /V "127.0.0.1" | head -n 10 >> system_scan.txt 2>nul
echo. >> system_scan.txt
echo [4] KULLANICILAR VE GRUPLAR >> system_scan.txt
net users >> system_scan.txt
echo. >> system_scan.txt
net localgroup administrators >> system_scan.txt
echo Rapor 'system_scan.txt' dosyasına kaydedildi.
Bu betiği
scan.bat olarak kaydedip çalıştırdığınızda, temel sistem bilgilerini bir metin dosyasına yazar.PowerShell Temelleri: Penetration Tester'ın Gerçek Silahı
PowerShell'i başlatmak için
Windows Tuşu + R yapıp powershell yazın. Daima mümkünse "Windows PowerShell (Yönetici)" veya "Windows Terminal" içinden PowerShell'i yönetici olarak çalıştırmaya çalışın, çünkü birçok komut yükseltilmiş yetki ister.Klasik Powershell Ekran Görüntüsü: Mavi arka planlı,
PS C:\Users\...> prompt'u gözüken bir PowerShell penceresi.
1. PowerShell Felsefesi: Cmdlet'ler ve Pipeline
PowerShell komutlarına cmdlet (command-let okunur) denir. Standart yapıları
Fiil-İsim şeklindedir (ör: Get-Process, Stop-Service).En güçlü özelliği pipeline (|). Linux'takinden daha gelişmiş olarak, sadece metin değil, nesneleri bir cmdlet'den diğerine aktarır. Bu nesnelerin özelliklerine (
Property) erişebilir, filtreleyebilir, sıralayabilirsiniz.2. Temel Cmdlet'ler ve CMD Karşılıkları
| Görev | CMD Komutu | PowerShell Cmdlet'i (ve Kullanımı) |
|---|---|---|
| Dosya Listeleme | dir | Get-ChildItem veya takma adı ls, dir |
| Dosya İçeriği | type | Get-Content .\file.txt |
| Proses Listeleme | tasklist | Get-Process |
| Proses Durdurma | taskkill /PID X | Stop-Process -Id X veya Get-Process notepad | Stop-Process |
| Servis Yönetimi | net start/stop | Get-Service, Start-Service, Stop-Service |
| Ağ Yapılandırması | ipconfig | Get-NetIPConfiguration |
| ARP Tablosu | arp -a | Get-NetNeighbor |
| Yardım Alma | komut /? | Get-Help Get-Process veya Get-Process -? |
3. Penetration Testing İçin Kritik PowerShell Cmdlet'leri
- Get-WmiObject veya Get-CimInstance: Windows Yönetim Araçları'na (WMI) erişir. Sistem hakkında her türlü bilgiyi çekmek için sınırsız bir kaynaktır. (Not:
Get-CimInstancedaha moderndir).
Kod:# Sistem Bilgisi Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object Caption, Version, OSArchitecture # Tüm kullanıcı hesapları Get-CimInstance -ClassName Win32_UserAccount # Tüm diskler ve boş alan Get-CimInstance -ClassName Win32_LogicalDisk # İşlemci bilgisi Get-CimInstance -ClassName Win32_Processor # Oturum açmış kullanıcılar Get-CimInstance -ClassName Win32_ComputerSystem | Select-Object UserName
- Get-NetTCPConnection:
netstat -ano'nun PowerShell versiyonu, ancak çıktısı işlenebilir nesnelerdir.
Kod:Get-NetTCPConnection -State Listen | Select-Object LocalAddress, LocalPort, OwningProcess # Dinlemede (Listen) olan portları ve hangi PID'in dinlediğini gösterir.
- Get-LocalUser, Get-LocalGroupMember: Yerel kullanıcı ve grupları yönetir.
- Test-NetConnection: Gelişmiş
pingve port testi aracı.
Kod:Test-NetConnection -ComputerName 192.168.1.1 -Port 80 # 80 portunun açık olup olmadığını test eder
4. Pipeline Gücü: Veriyi Filtreleme, Biçimlendirme ve Dışa Aktarma
PowerShell'in gerçek gücü, veriyi işleme şeklindedir.
Select-Object, Where-Object, Sort-Object, Export-Csv gibi cmdlet'lerle çıktıyı tamamen kontrol edersiniz.
Kod:
# 1. Çalışan tüm prosesleri al
# 2. CPU kullanımı 50'den fazla olanları filtrele
# 3. Sadece İsim, ID ve CPU sütunlarını seç
# 4. CPU'ya göre büyükten küçüğe sırala
# 5. Sonucu bir CSV dosyasına yaz (ileride analiz için)
Get-Process | Where-Object {$_.CPU -gt 50} | Select-Object Name, Id, CPU | Sort-Object CPU -Descending | Export-Csv -Path "high_cpu_processes.csv" -NoTypeInformation
5. PowerShell ile Uzaktan Komut Çalıştırma
Penetration testing'deki en önemli yeteneklerden biri, bir sistemden diğerine komut göndermektir. PowerShell bunu
Invoke-Command cmdlet'i ile yapar.
Kod:
# Uzak bilgisayarda komut çalıştırma (Yetki ve WinRM servisi gerekir)
Invoke-Command -ComputerName TARGET-PC -ScriptBlock { Get-Process }
UYARI: Bu teknik, ancak hedef sistemde yetkiniz varsa ve Windows Uzaktan Yönetimi (WinRM) açıksa çalışır. İzinsiz kullanımı kesinlikle yasaktır.
Birkaç Pratik Egzersiz Yapalım: Kendi Makinenizi Keşfedin
- CMD ile Temel Keşif:
- Bir CMD penceresi açın.
whoami,hostname,ipconfig /allkomutlarını çalıştırın.netstat -ano | findstr :3389komutuyla RDP portunun (3389) dinlenip dinlenmediğini kontrol edin.net localgroup administratorskomutuyla yöneticileri listeleyin.
- PowerShell ile Derinlemesine Enumeration:
- PowerShell'i Yönetici olarak başlatın.
Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object *komutuyla OS bilgilerinin tamamını görüntüleyin.Get-NetTCPConnection -State Listen | Where-Object {$_.LocalPort -lt 1024}komutuyla "well-known" portlarda (1024'ten küçük) nelerin dinlediğini bulun.Get-CimInstance -ClassName Win32_StartupCommand | Select-Object Name, Command, Userkomutuyla sistemle başlayan programları listeleyin.
- Çıktıyı Raporla:
- Yukarıdaki PowerShell komutlarından birinin çıktısını
| Out-File -FilePath my_scan.txtile bir dosyaya yazın.
- Yukarıdaki PowerShell komutlarından birinin çıktısını
Güvenlik ve Etik Uyarıları Tekrar Vurgulayalım
- Execution Policy: PowerShell, güvenlik için varsayılanda betik çalıştırmaya izin vermez (
Restricted). LaboratuvarınızdaSet-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUserkomutuyla geçici olarak değiştirebilirsiniz. Asla bunu gerçek bir sistemde yapmayın. - Log Kaydı: Windows, PowerShell komut geçmişini (
Get-History) ve olay günlüklerini (Event Log) detaylı kaydeder. Gerçek bir pentest sırasında bu izleri temizlemek (logging) ayrı bir konudur.
- Antivirüs/EDR: Modern güvenlik yazılımları (Defender, CrowdStrike, SentinelOne vs.) şüpheli PowerShell aktivitelerini (uzak betik indirme, kod yürütme) yakalayıp engeller. Testlerinizi AV/EDR'siz bir lab ortamında yapın.
Bir sonraki bölümde, bu iki dünyayı (Linux ve Windows) içinde barındıracak, güvenli Laboratuvar Ortamımızı Kuracağız. VirtualBox/VMware, Kali Linux ve hedef Windows sanal makinelerinin kurulumunu adım adım işlemeye çalışacağız.
Not: Bu bölümde geçen tüm komutlar, kendi kontrolünüzdeki sanal makinelerde veya açıkça test etme izni verilmiş sistemlerde denenmelidir.




