Hoşgeldin Misafir

Sıfırdan Etik Network Penetration Testing Öğreniyorum - Bölüm 3: Windows Komut Satırı ve PowerShell Temelleri

YARBAY

28 Haz 2025
1,341 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
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.


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:
ÖzellikCommand 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üç & EsneklikSı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şimTüm kullanıcılardaModern 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ü:
70cp77e.png



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 ls komutunun 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 cat ve less komutları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

    m4u1not.png
  • hostname: Bilgisayarın adını gösterir.
  • ipconfig: Ağ yapılandırma bilgilerini gösterir. Linux'taki ifconfig/ip addr karşı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.
fa7trda.png


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örevCMD KomutuPowerShell Cmdlet'i (ve Kullanımı)
Dosya ListelemedirGet-ChildItem veya takma adı ls, dir
Dosya İçeriğitypeGet-Content .\file.txt
Proses ListelemetasklistGet-Process
Proses Durdurmataskkill /PID XStop-Process -Id X veya Get-Process notepad | Stop-Process
Servis Yönetiminet start/stopGet-Service, Start-Service, Stop-Service
Ağ YapılandırmasıipconfigGet-NetIPConfiguration
ARP Tablosuarp -aGet-NetNeighbor
Yardım Almakomut /?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-CimInstance daha 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ş ping ve 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

  1. CMD ile Temel Keşif:
    • Bir CMD penceresi açın.
    • whoami, hostname, ipconfig /all komutlarını çalıştırın.
    • netstat -ano | findstr :3389 komutuyla RDP portunun (3389) dinlenip dinlenmediğini kontrol edin.
    • net localgroup administrators komutuyla yöneticileri listeleyin.
  2. 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, User komutuyla sistemle başlayan programları listeleyin.
  3. Çıktıyı Raporla:
    • Yukarıdaki PowerShell komutlarından birinin çıktısını | Out-File -FilePath my_scan.txt ile bir dosyaya yazı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ızda Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser komutuyla 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.