2Ağustos
Nishang Framework

Nishang ile Windows Post Exploitation – Part 3

Nishang, Nikhal Mittal tarafından geliştirilen bir post-exploitation araçlar takımıdır. Nishang içerisinde post-exploitation işlemleri sırasında kullanılabilecek olan, Powershell dilinde yazılmış script kodları bulunmaktadır. Nishang’e ait script kodları ile; port taraması, bilgi toplama, hak yükseltme, kimlik bilgilerini ele geçirme, backdoor(arka kapı) bırakma gibi işlemler gerçekleştirilebilir. Powershell ile oluşturulduğundan dolayı Windows işletim sisteminde herhangi bir kurulum gerektirmeden çalıştırılabilir. Aracın önemli özelliklerinden biri de çalıştırılan script’lerin disk üzerinde değil, bellek üzerinde çalışmasıdır.

1. Bölümü okumak için: https://www.priviasecurity.com/kaynaklar/makale/Nishang-ile-Windows-Post-Exploitation-Part-1

2.Bölümü okumak için: https://www.priviasecurity.com/kaynaklar/makale/Nishang-ile-Windows-Post-Exploitation-Part-2

2.6. Escalation

Post-Exploitation aşamalarının önemli aşamalarından biri, “Hak Yükseltme (Privilege Escalation)” aşamasıdır.  Bir makine üzerinde exploitation gerçekleştirilerek ilk adım atıldıktan sonra, kısıtlı yetkilere sahip olunan bir makinede, hak yükseltmek gerekebilir. Nishang araçlar takımında, hak yükseltmek adına 3 adet script bulunmaktadır. Bu scriptler aşağıda açıklanmıştır.

2.6.1 Enable-DuplicateToken

Windows sistemler üzerinde yönetici haklarına sahip olan hesaplar, sistem üzerinde yüksek ayrıcalıklara sahiptirler ve yönetimsel işlemleri gerçekleştirebilirler. Fakat bazen yönetici hesaplarının da erişim kısıtlamasıyla karşılaştığı durumlar bulunmaktadır. Windows sistemlerde bulunan kayıt defterindeki “HKLM:\SECURITY” yoluna yönetici hesaplarının erişim yetkisi yoktur. Bu yola erişmek için SYSTEM ayrıcalıklarına sahip olmak gerekmektedir. Bu script kullanılarak SYSTEM ayrıcalıklarıyla çalışan “lsass.exe” adlı process tarafından kullanılan Access Token (Erişim Belirteci) çoğaltılır ve bu scripti çalıştıran hesap tarafından alınarak SYSTEM ayrıcalıklarıyla işlemler gerçekleştirilebilir. Bu scripti çalıştıran hesap, yönetici ayrıcalıklarına sahip olmalıdır.

Resim 2.6.1.1 – Access Token Çoğaltma

2.6.2. Invoke-PsUACMe

Bu script ile https://github.com/hfiref0x/UACME deposunda bulunan yöntemler kullanılarak UAC atlatılır. Tüm UAC atlatma yöntemleri DLL hijacking, çalıştırılabilir dosyaların adını değiştirme ve konumları değiştirme ile alakalıdır. Bu script, bu yöntemlere dayanarak UAC atlatabilmektedir. Bu script için parametreler aşağıdaki gibidir.

  • Payload: Ayrıcalık elde edilmiş olan process üzerinden çalıştırılacak olan powershell komutunu belirler.
  • Method: Hak yükseltme için kullanılacak yöntemi belirler. Varsayılan olarak sysprep değerini alır.
  • Path: Payload yolunu belirler. Varsayılan yol: C:\Windows\temp\cmd.bat
  • CustomDLL64: Özel olarak oluşturulan 64 bitlik DLL dosyasının yolu
  • CustomDLL32: Özel olarak oluşturulan 32 bitlik DLL dosyasının yolu

Aşağıdaki tabloda metodlar listelenmiştir.

Tablo 2.6.2.1 – Metodlar

2.6.3. Remove-Update

Bu script ile tüm güncelleştirmeler kaldırılır. “KBID” parametresi ile güncelleştirmeye ait olan ID değeri belirlenir ve o güncelleme silinir.

Resim 2.6.3.1 – Güncellemeler
Resim 2.6.3.2 –Remove-Update

2.6.7. Execution

Post-Exploitation aşamasında bazı durumlarda; uzak bir noktadan dosya çekerek komut çalıştırma veya farklı bir noktadan bağlantı alma gibi durumlar gerekebilir. Bu nedenle saldırgan, bir payload veya bir komut dosyası çalıştırma ihtiyacı hissedebilir. Bunun için Nishang komut çalıştırabilmek adına çeşitli yöntemler sunmaktadır. Bu yöntemler aşağıda açıklanmıştır.

2.7.1. Download-Execute-PS

Bu script kullanılarak, belirtilen bir URL adresi üzerinden, bir powershell scripti indirilir ve çalıştırılır. URL “ScriptURL” parametresi ile belirtilebilir. URL ile belirtilen script, “Arguments” parametresi ile belirlenen argümanlarla çalıştırılabilir. Eğer çalıştırılan script dosyasının kurban makinede kaydedilmesi istenmezse “Nodownload” parametresi kullanılır.

Resim 2.7.1.1 – Download-Execute-PS
Resim 2.7.1.2 – Meterpreter Shell

2.7.2. Download_Execute

Bu script ile metin dosyasına çevrilmiş olan çalıştırılabilir dosya, yeniden çalıştırılabilir bir uygulamaya dönüştürülerek çalıştırılır. Bu uygulama için kullanılan tek parametre “URL” parametresidir ve bu URL üzerinden dosya indirilerek çalıştırılır. Bir çalıştırılabilir dosyayı metin dosyasına dönüştürmek için Nishang içerisinde bulunan “exetotext.ps1” scripti kullanılabilir.

Resim 2.7.2.1 – ExetoText
Resim 2.7.2.2 – Download_Execute
Resim 2.7.2.3 – Meterpreter Shell

2.7.3. Execute-Command-MSSQL

Bu script ile uzak sunucuda çalışan MSSQL Server servisine ait yönetici hesabının kullanıcı adı ve parolası belirtilerek xp_cmdshell aktif edilir ve kurban makine üzerinden bir powershell shell, sql shell veya cmd shell elde edilebilir. Eğer MSSQL tarafından Windows Kimlik Doğrulama kullanılıyorsa Windows Kimlik Doğrulama yapılır ve bu yöntem için kullanıcı adı ve parola gerekmez. Bu script için kullanılan parametreler aşağıda açıklanmıştır.

  • ComputerName: MSSQL Server çalışan makinenin adı veya IP adresi
  • UserName: MSSQL yönetici kullanıcı adı
  • Password: Kullanıcı parolası
  • WindowsAuthentication: SQL ServerWindows Kimlik Doğrulaması’nı kullanmak için bu parametre kullanılır.
Resim 2.7.3.1 – Execute-Command-MSSQL

2.7.4. Execute-DNSTXT-Code

Bu script ile sistem üzerinde bulunan DNS sunucusunun TXT sorgularından yararlanılarak shell elde edilebilir. Script, saldırgan makinenin kurban makineye erişmesini sağlayan payload shell kodlarını DNS TXT kayıtlarından Base64 olarak alır, decode eder ve çalıştırır. Böylece bağlantı sağlanır. Shell kodların Base64 olarak TXT kayıtlarına yerleştirilmesi için Nishang “Out-DnsTxt” script kullanılabilir.

Script, çalışmak için minimum 3 parametreye ihtiyaç duyar: “shellcode32”, “shellcode64” ve “AuthNS”. Bu parametreler ile 32 bit ve 64 bit shell kodların Base64 olarak yerleştirildiği TXT kayıtlarının bulunduğu alan adları ve yetkili bir nameserver belirtilir.

Resim 2.7.4.1 – Out-DnsTxt
Resim 2.7.4.2 – Base64 Metin
Resim 2.7.4.3 – DNS TXT Kayıtları
Resim 2.7.4.4 – Execute-DNSTXT-Code
Resim 2.7.4.5 – Meterpreter Oturumu

2.7.5. Out-RundllCommand

Bu script kullanılarak rundll32.exe uygulamasının çalıştırabileceği komutlar oluşturulur. Kurban makinede rundll32.exe uygulamasının çalışması sonucu, bir powershell oturumu elde edilir. Bu script kurban makinede çalıştırıldıktan sonra, dinleme modu başlatılan saldırgan makinede, kurban makine üzerinden bir reverse powershell oturumu elde edilir. Bu script için parametreler aşağıdaki gibidir.

  • IPAddress: Saldırgan makinenin dinleme modu başlattığı makine
  • Port: Saldırgan makinenin açtığı dinleme portu
Resim 2.7.5.1 – Out-RundllCommand

Rundll32 komutu kurban makinede çalıştırıldığında powershell oturumu elde edilecektir.

Resim 2.7.5.2 – Netcat

2.8. Gather

Bir makine saldırgan tarafından ele geçirildikten sonra, post-exploitation aşamalarının gerçekleştirilmesi için saldırganın bilgi toplaması gerekecektir. Sistem üzerinde ilerleme kaydetmek için; host bilgisi, kimlik bilgileri vb. bilgiler toplamak gerekecektir. Nishang, bilgi toplamak amacıyla bazı yöntemler sunmaktadır. Bu yöntemler aşağıda açıklanmıştır.

2.8.1. Check-VM

Bu script kullanılarak, kayıt defterinin incelenmesi ile makinenin bulunduğu sanal ortam bilgisi alınır. Script, kayıt defteri anahtarları ve çalışan servisleri inceleyerek Hyper-V, VMWare, Sanal Bilgisayar, Sanal Kutu, Xen ve QEMU için kontrol yapar.

Resim 2.8.1.1 – Check-VM

2.8.2. Copy-VSS

Bu script kullanılarak, Windows sistemlerde kimlik bilgilerini tutmak amacıyla kullanılan SAM, NTDS.DIT veritabanlarının ve SYSTEM kovanının kopyası alınır. Bu dosyalar işletim sisteminin çalışmasıyla birlikte sürekli çalıştığı için açılamaz. Dolayısıyla bu script ile kopya alınarak incelenebilir.

Resim 2.8.2.1 – Copy-VSS
Resim 2.8.2.2 – SAM İçeriği

2.8.3. FireBuster

Bu script kullanılarak ağa hangi port üzerinden çıkılacağı tespit edilebilir. Script öncelikle, port taraması gerçekleştirir ve açık portları bulur. Daha sonra tüm paketleri, dinleme modu başlatan FireListener’a gönderir.

Resim 2.8.3.1 – FireBuster

2.8.4. FireListener

FireListener, FireBuster’ın paketleri gönderebileceği bir dinleme modu başlatır.

2.8.4. FireListener

2.8.5. Get-Information

Bu script hedeften bilgi almak için kullanılır. Kayıt defterinden ve bazı komutlar ile bilgileri ortaya çıkartır.

Resim 2.8.5.1 – Get-Information

2.8.6. Get-LSASecret

Windows sistemlerde; güvenlik politikalarını yönetmek, kullanıcı hesaplarını kontrol etmek, kullanıcı girişlerini kontrol etmek ve hesap parolalarını depolamak gibi işlemlerden LSA (Local Security Authority) sorumludur. Windows sistemlerde LSA ile ilgili gizlilikler, “HKLM:\SECURITY\Policy\Secrets” altında şifrelenmiş bir şekilde tutulur. Bu script kullanılarak LSA gizli bilgileri “HKLM:\SECURITY\Policy\Secrets” konumundan çekilir. Şifreli metnin çözülmesi için anahtarları çekmek adına Enable-TSDuplicateToken scripti kullanılabilir. Bu bilgiler 32 bit kayıt defterinde tutulduğundan dolayı, powershell 32 bit olarak çalıştırılmalıdır ve bu scriptler 32 bit powershell üzerinden çalıştırılmalıdır. Bu script HKLM:\SECURITY kayıtlarına erişeceği için SYSTEM hakları ile çalıştırılmalıdır.

Resim 2.8.6.1 – Get-LSASecret

2.8.7. Show-TargetScreen

Bu script ile MJPEG (Motion JPEG) kullanılarak kurban bilgisayarın masaüstü izlenebilir. Script çalıştırıldıktan sonra MJPEG destekli tarayıcılarda, kurban masaüstü gerçek zamanlı olarak görüntülenebilir. Bu script “Reverse” parametresi ile çalıştırılarak tarayıcı, bağlantıyı “IPAddress” ve “Port” parametreleri ile belirtilen makineye yönlendirebilir. Bu scripti çalıştırmak için istemci taraflı saldırı scriptlerinden yararlanmak gerekecektir. Bunun için bu scripte ait komut, Nishang’e ait istemci taraflı saldırı scriptlerinin bir argümanı olarak çalıştırılacaktır. Bağlantının yönlendirilmesi için bir dinleyici başlatmak gerekmektedir. Bunun için “powercat” kullanılabilir. Powercat ile bir dinleme modu başlatıldıktan sonra, istemci taraflı saldırı scriptinin çalıştırılmasıyla, powercat ile belirtilen TCP portuna kurban makinenin görüntüsü gelecektir. Böylece MJPEG destekleyen tarayıcı ile bu porta HTTP protokolü üzerinden bağlanılarak, gerçek zamanlı izleme yapılabilir.

Resim 2.8.7.1 – Powercat
Resim 2.8.7.2 – Show-TargetScreen

2.8.8. Get-PassHashes

Windows sistemlerde belirlenen kullanıcı parolaları LM ve NTLM hash algoritmaları ile karmaşıklaştırılır ve bu halleriyle SAM ve “Active Directory Domain Service” kurulu ise NTDS.DIT veritabanlarında tutulur. Bu script kullanılarak SAM ve NTDS.DIT veritabanlarından, kullanıcılara ait olan ID, LM ve NTLM hash bilgileri alınır. Bilgileri PSObject formatında almak için “PSObjectFormat” parametresi kullanılabilir.

Resim 2.8.8.1 – Get-Information

2.8.9. Get-PassHints

Windows sistemlerde parola belirleyen bir kullanıcı, parolasını hatırlatmak adına ilk yanlış denemede karşısına çıkacak olan bir ipucu belirleyebilir. Bu ipuçları, HKLM:\SAM kovanında saklanır. Bu ipuçlarını almak amacıyla Get-PassHints scripti kullanılır. Sonuçlar ekrana “<kullanıcı_adı>:<ipucu>” formatında basılır.

Resim 2.8.9.1 – Get-PassHints

2.8.10. Get-WLAN-Keys

Bu script ile kaydedilmiş WLAN anahtarları açık metin halinde alınabilir.

Resim 2.8.10.1 – Get-WLAN-Keys

2.8.11. Get-WebCredentials

Windows sistemlerde, Windows 7 işletim sisteminden itibaren “Credential Manager” getirilmiştir. Önceki sürümlerde parolalar daha sonra kolayca erişebilmek için sadece saklanırken, yeni sürümle beraber parolaların yedeklenmesi ve geri yüklenmesi özellikleri de getirildi. Bu işlemler sonucu kimlik bilgileri Credential Manager özelliğine ait saklama alanı olan “Windows Vault” üzerinde tutulur. Bu script ile Windows Vault üzerinde tutulan Web kimlik bilgileri alınabilir.

Resim 2.8.11.1 – Get-WebCredentials
Resim 2.8.11.2 – Windows Credential Manager

2.8.12. Invoke-CredentialPhish

Bu script powershell komut satırında çalıştırıldığında, bir kimlik doğrulama penceresi açılır ve doğru kimlik bilgileri girilene kadar bu pencere kaybolmaz. Böylece kullanıcıya ait kimlik bilgileri alınır.

Resim 2.8.12.1 – Invoke-CredentialsPhish
Resim 2.8.12.2 – Kimlik Kontrolü Yapan Kodlar

Resim 2.8.12.2’de görüldüğü üzere, kullanıcı kimlik bilgilerinin alınması ve doğrulama kontrolü yapılması, bir “while” döngüsü içerisinde gerçekleşmektedir. Eğer kimlik doğrulanırsa “break” ile kod bloğundan çıkılır. Aksi takdirde döngü sürekli devam edecektir.

2.8.13. Invoke-Mimikatz

Mimikatz, Benjamin Delpy tarafından geliştirilen; kimlik saklama alanlarından kimlik bilgilerini alma, sertifikaları alma ve kalıcılık sağlama (Örn: Pass-the-Ticket) gibi işlemler gerçekleştirmeye olanak sağlayan bir araçtır. Bu script, mimikatz aracını powershell ile belleğe yükler ve çalışmasını sağlar. Böylece sistem üzerinde mimikatz ile post-exploitation işlemleri gerçekleştirilebilir. Bu script için kullanılabilen parametreler aşağıdaki gibidir.

  • DumpCreds: LSASS adlı process üzerinden kimlik bilgilerini almak için kullanılır.
  • DumpCerts: Tüm özel sertifikaları almak için kullanılır.
  • Command: Mimikatz aracına ait özel komutlar bulunmaktadır. İsteğe bağlı olarak bir mimikatz komutu çalıştırmak için bu parametre kullanılır.
  • ComputerName: Komut dosyasını çalıştırmak için kullanılan bilgisayar adlarını belirler.
Resim 2.8.13.1 – LSASS Üzerinden Kimlikleri Alma
Resim 2.8.13.2 – Özel Komut

2.8.14. Invoke-MimikatzWDigestDowngrade

Windows 8.1 ve Windows Server 2012 R2 sürümleri ve sonraki işletim sistemi sürümlerinde oturum açmış kullanıcıların parolaları açık metin halinde tutulmaz. Bu script kullanılarak, kayıt defterinde bir kayıt açılır ve WDigest ile oturum açmış kullanıcı bilgilerinin kullanılması sağlanır. Böylece oturum açan kullanıcıların açık metin parolaları alınabilir. Bu script çalıştırıldıktan sonra “HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest”  içerisine, “UseLogonCredential” kaydı eklenir ve bu kayıt “1” değerini alır.

Bu script powershell üzerinde çalıştırıldıktan sonra kullanıcı oturumu kapanır. Kullanıcı tarafından tekrar giriş yapıldıktan sonra, “Invoke-Mimikatz” scriptinin çalıştırılmasıyla birlikte giriş yapan kullanıcıların açık metin parolaları elde edilir. Böylece mimikatz aracı ile Windows 8.1 ve Server 2012 R2 işletim sistemleri ve sonraki sürümler açık metin parolalar alınabilir. Eğer RDP anahtarı kullanılıyorsa, bu script RDP kullanıcılarını da hedefler. Bunun için “RDP” parametresi kullanılır.

Resim 2.8.14.1 – Açık Metin Parola

Yukarıdaki resimde görüldüğü üzere “Invoke-MimikatzWDigestDowngrade” komutu çalıştırıldı ve aktif hesapların oturumları kapandı. Giriş yapıldıktan sonra “Invoke-Mimikatz” komutunun çalıştırılmasıyla giriş yapan hesapların parolası açık metin halinde alındı.

2.8.15. Invoke-Mimikittenz

Bu script, bilgileri bellekten almak için kullanılır. Regex ile kurban makinenin belleğinden bilgileri almak için ReadProcessMemory() fonksiyonu çalışır.

2.8.16. Invoke-SSIDExfil

Bu script, kullanıcı kimlik bilgileri ile bir “Hosted Network” oluşturmak amacıyla kullanılmaktadır. Script çalıştırıldıktan sonra, kimlik bilgilerinin girilmesi için bir pencere açılır. Bu pencere kimlik doğrulanana kadar kapanmaz ve doğru kimlik bilgileri girmeyi mecburi kılar. Doğru kimlik bilgileri girildikten sonra kullanıcı adı ve parola açık metin halinde ROT13 ile encode edilir ve “ROT13(Domain):ROT13(kullanıcı_adı):ROT13(parola)” formatında bir SSID değeri almış ağ başlar. Böylece kullanıcıların kimlik bilgileri bu yöntem ile açık metin halinde ele geçirilebilir.

Resim 2.8.16.1 – Kimlik Girişi
Resim 2.8.16.2 – Ağ Oluşturma
Resim 2.8.16.3 – ROT13 Decode

2.8.17. Keylogger

Bu script, klavyeden girilen her bir karakteri, encode edilmiş bir şekilde %temp% dizininde oluşturulan “key.log” dosyasında saklar. Kaydedilen tuşlar; pastebin, google, tinypaste veya 3’üne birden belirtilen kullanıcı hesabına kaydedilebilir. Encode edilmiş bir biçimde kaydedilen tüm kayıtlar, Nishang içerisinde bulunan “Parse_Key” scripti ile decode edilebilir.

Scriptin çalıştırılması için iki adet parametre gerekmektedir: “CheckURL” ve “MagicString”. “CheckURL” parametresi ile bir web sayfasının linki belirtilir. “MagicString” parametresiyle de bu sayfa içerisinde bulunan bir metin belirtilir. Belirtilen metin sayfada varsa, keylogger sonlanacaktır. Bu nedenle “CheckURL” parametresine içeriği değiştirilebilecek bir link atanmalıdır.

Resim 2.8.17.1 – Keylogger
Resim 2.8.17.2 – “key.log” Dosyası

Yukarıdaki resimde görüldüğü üzere, “privia” metninin her bir karakteri ASCII ile encode edilmiş bir şekilde kaydedilmiştir.

Ek olarak bu script, “ExfilOption” parametresi ile çalıştırılırsa, basılan tuşlar belirtilen adrese sızdırılır.

Resim 2.8.17.3 – Verileri Sızdırma
Resim 2.8.17.4 – Belirtilen Adrese Veri Gönderme

2.9. MITM

2.9.1. Invoke-Interceptor

Bu script ile bir proxy sunucusu oluşturularak, HTTP(S) istekleri yakalanır ve bir dosyaya kaydedilir. Script çalıştırıldığında, eğer “ListenPort” parametresi ile bir port belirtilmediyse, varsayılan olarak 8081 portu ile bir dinleme modu başlar. Dinleme esnasında elde edilen veriler, “ProxyServer” ve “ProxyPort” parametreleri ile belirtilen proxy sunucusuna yönlendirilir. Ayrıca, dinleme işlemi sırasında yakalanan tüm istekler “LogFile” parametresi ile bir yol belirtilmedikçe, varsayılan olarak kurban bilgisayarın %temp% dizini içerisinde oluşturulan “interceptor.log” adlı dosyasına kaydedilir. Bu script ile ilgili diğer parametreler aşağıda açıklanmıştır:

  • HostCA: Bu parametre ile makinelerin Interceptor Root Certificate Authority ile bağlantı kurması sağlanır ve http://<Interceptor_IP>:8082/i.ceradresinden sertifika alınır ve kurulur.
  • AutoProxyConfig: Bu script, Interceptor üzerinden trafik yönlendirmek için otomatik olarak proxy ayarlarını değiştirir.
  • Cleanup: Bu parametre ile tüm yüklü sertifikalar kaldırılır.
  • SearchString: Bu parametre ile istekler üzerinde değiştirilmek istenen metin bulunur.
  • ReplaceString: Bu parametre kullanılarak, “SearchString” ile belirtilen metin, bu parametre ile belirtilen metin ile değiştirilir.
  • Tamper: “Cyber” kelimesini “Kittens” ile değiştirir.
  • Domains: Güvenilir sertifikalar oluşturmak için domainlerin bulunduğu listeyi belirtir.
Resim 2.9.1.1 – Invoke-Interceptor
Resim 2.9.1.2 – Proxy Sunucusu
Resim 2.9.1.3 – Gelen İstek

2.10. Misc

2.10.1. Speak

Bu script kullanılarak, “Sentence” parametresi ile belirtilen metin, MS Narrator tarafından seslendirilir.

Resim 2.10.1.1 – Speak

2.11. Pivot

Post exploitation aşamalarının en önemli aşamalarından biri, ağ üzerinde hareket edebilmektir. Saldırgan tüm sistemi ele geçirmek için, ele geçirdiği bir makinenin farklı bir ağda bulunan cihazlarla bağlantısı varsa, saldırgan ele geçirdiği makineyi kullanarak, o cihazlara erişmek isteyecektir. Nishang, bu durum için bazı yöntemler sunmaktadır. Bu yöntemler aşağıda açıklanmıştır.

2.11.1. Create-MultipleSessions

Bu script ile WinRM özelliğinden yararlanılarak, PSSessions aracılığıyla uzak sunucuya bağlanılabilir. Bu script “filename” parametresine, içerisinde bilgisayar adları veya IP adreslerinin bulunduğu bir dosyanın yolu atanarak çalıştırılabilir. Script bu şekilde çalıştığı zaman, çalışan powershell uygulaması hangi hesaba bağlı olarak açılmışsa, o hesabın kimlik bilgileri, dosya içerisinde adı veya IP adresi bulunan makineler üzerinde denenir.

Resim 2.11.1.1 – Create-MultipleSessions

Yukarıdaki resimde görüldüğü üzere, 3 makine üzerinde deneme yapılmış ve 192.168.228.150 IP adresine sahip makinede kimlik doğrulanmıştır. Bu işlem başka kimlik bilgileri ile “Windows Credential Editor (WCE)” kullanılarak denenebilir. WCE ile kimlik bilgileri kullanılarak, o kullanıcının hak ve yetkileri ile yeni bir powershell uygulaması çalıştırılabilir ve bu script yeni powershell uygulamasında çalıştırılabilir.

Resim 2.11.1.2 – Enter-PSSession

“CreateSessions” parametresi kullanılarak, kimlik doğrulama işlemi ile beraber, kimlik doğrulama işleminin başarılı olduğu makine üzerinde oturum başlatılır.

Resim 2.11.1.3 – CreateSessions
Resim 2.11.1.4 – Aktif Oturumlar

Bu script için diğer parametreler aşağıdaki gibidir:

  • Creds: Kullanıcı adı ve parola belirtmek amacıyla kullanılır.
  • VerboseErrors: Ayrıntılı hata mesajı almak için bu parametre kullanılır.

2.11.2. Invoke-NetworkRelay

Bir sisteme saldırı yapmak için o sistemin ağına dahil olmak her zaman için tüm makinelere direk erişim sağlamak anlamına gelmez. Örneğin bağlı olduğumuz ağda bir SQL sunucusuna erişim sağlayabilirken, DC (Domain Controller) makineye erişim sağlayamayabiliriz. Böyle bir durumda SQL sunucusuna sızıldığını varsayarsak, SQL sunucusu farklı bir ağ arabirimine sahip olduğu için Domain Controller ile iletişime geçebildiğinden dolayı, Domain Controller makineye erişmek için SQL sunucusunu aracı olarak kullanmak gerekecektir. “Invoke-NetworkRelay” kullanılarak sızılan aracı makine (Örn: SQL sunucusu) üzerinde bir port açılarak, Domain Controller makineye ait bir porta, “port yönlendirme” yapılabilir. Böylece saldırgan, farklı bir ağda bulunan Domain Controller’a port yönlendirme (port forwarding) yaparak, aracı makine üzerinden erişim sağlayabilir. Bu script için kullanılan parametreler aşağıda açıklanmıştır.

  • Relay: Bağlantı türünü belirtmek için kullanılır. (Varsayılan v4tov4. Diğer seçenekler: v4tov6, v6tov4, v6tov6)
  • ListenAddress: Portun yönlendirileceği makinenin adresini belirtir. (Varsayılan 0.0.0.0(IPv4))
  • ListenPort: Uzak makinenin portuna yönlendirme yapmak için kullanılan aracı makineye ait port. (Varsayılan 8888)
  • ConnectAddress: Port yönlendirme yapılacak olan uzak sunucunun adresini belirtir.
  • ConnectPort: Yönlendirme yapılacak olan port belirtilir.
  • ComputerName: Port yönlendirme için “netsh” komutunun çalıştırılacağı makineyi belirtir.
  • Username: “ComputerName” parametresi ile belirtilen makinede kimlik doğrulama yapmak için kullanılan kullanıcı adı.
  • Password: “ComputerName” parametresi ile belirtilen makinede kimlik doğrulama yapmak için kullanılan parola.
  • Delete: Bir röle bağlantısını silmek için kullanılır.
  • Show: Tüm röle bağlantılarını görüntülemek için kullanılır.
Resim 2.11.2.1 – Invoke-NetworkRelay
Resim 2.11.2.2 – Port Tarama

2.11.3. Run-EXEonRemote

Bu script, makine üzerinde komut çalıştırmak için kullanılmaktadır. Varsayılan olarak WCE (Windows Credential Editor) uygulamasını çalıştıran bu script “EXEArgs” parametresi ile WCE uygulamasına ait argümanları alabilir. Bu script başka makineler üzerinde “Invoke-Command” cmdlet kullanılarak çalıştırılabilir.

Resim 2.11.3.1 – Run-EXEonRemote
Resim 2.11.3.2 – Invoke-Command ve Run-EXEonRemote