首頁  >  文章  >  運維  >  如何利用Build Events特性執行程式碼復現

如何利用Build Events特性執行程式碼復現

WBOY
WBOY轉載
2023-05-25 20:41:001106瀏覽


TAG安全部門披露了一起利用推特等社交媒體針對不同公司和組織從事漏洞研究和開發的安全研究人員的社會工程學攻擊事件,經綠盟科技伏影實驗室分析,確認此事件為Lazarus組織針對網路安全產業的一次針對性網路攻擊,並猜測其可能有更深層的攻擊意圖和行動。綠盟科技攻擊對抗技術研究團隊M01N
Team也針對此次事件展開了全面的分析研判,認定本次事件是一個典型的「明修棧道、暗渡陳倉」社會工程學攻擊事件,也將在文中揭秘此事件中Lazarus組織所使用的一種新型間接命令執行攻擊技術。

Lazarus組織是一支來自朝鮮半島的APT組織。該組織自2007年就開始活躍,長期對韓國、中國、美國、印度等國家進行攻擊活動。根據國外安全公司的調查顯示,Lazarus組織與2014年索尼影業遭駭客攻擊事件,2016
年孟加拉國銀行資料外洩事件,2017年美國國防承包商、美國能源部門及英國、韓國等比特幣交易所被攻擊等事件有關。 2017年席捲全球的最臭名昭著的安全事件「Wannacry」勒索病毒也被懷疑是該組織所為。

具體的攻擊手法是」養號“,然後誘騙安全研究人員下載他們帶有惡意程式碼的POC,在編譯的時候會觸發的惡意命令和程式碼。

Lazarus組織的攻擊者偽裝成安全研究人員建立了一個研究部落格和多個Twitter帳號,這些偽裝帳號大都打上了Web開發、瀏覽器漏洞挖掘、Windows核心安全甚至CTF選手等一些身分標籤,並會發布一些安全研究動態,同時相互評論轉發來擴大影響力。

如何利用Build Events特性执行代码复现

另外他們的部落格(https://blog.br0vvnn[.]
io)發表了多個已公開披露的漏洞分析文章,還包含一些不知情安全研究人員的來訪評論,以圖在安全研究人員中建立更高的信任度。
如何利用Build Events特性执行代码复现

在建立了一定的研究影響力後,攻擊者會主動尋找目標安全研究人員進行交流,並表達希望在漏洞研究方面進行更深入合作和交流的想法。此後攻擊者便會向安全研究人員分享了一個Visual
Studio的專案工程文件,該專案文件明為一些漏洞的POC程式碼,暗則包含了等待目標研究員編譯執行來觸發的惡意命令和程式碼。

綠盟科技
https://mp.weixin.qq.com/s/7RwH5_h2rGn3MxGIngal6A

從綠盟科技的文章中我們可以知道事件的背景和一些資訊。

我們從公開的報告中可以知道Lazarus組織的利用編譯事件(Build Events)的攻擊方法,接下來我們一起復現一下這個手法吧。

我們先來看看在微軟文件中關於編譯事件(Build Events)的資料

By specifying a custom build event, you can automatically run commands
before a build starts or after it finishes. For example, you can run a
.bat file before a build starts or copy new files to a folder after
the build is complete. Builullydif runder after
the build is complete。 reaches those points in the build process.

https://docs.microsoft.com/en-us/visualstudio/ide/specifying-custom-build-events-in-visual-studio?view=vs-2019

微軟文檔中說“通過指定自定義構建事件,我們可以在構建開始之前或構建完成之後自動運行命令,僅當構建成功達到構建過程中的那些點時,建置事件才會運行”,例如:

可以在建置開始之前運行.bat文件,或在建置完成後將新文件複製到資料夾中。

這個不難理解。

我們繼續看微軟文件中的資料可以知道Build Events有3種事件,分別為:

1.Pre-build event command line 預先產生事件;在編譯前執行自訂任務

指定在构建开始之前要执行的所有命令,如果项目是最新的并且未触发任何构建,则预构建事件不会运行。

2.Post-build event command line 預連結事件;在連結前執行自訂任務

指定在构建结束后要执行的所有命令

3.Run the post-build event 後期產生事件;編譯完成後執行自訂任務

在这个中具有以下参数:
选项                                结果
总是                            无论构建是否成功,都会运行构建后事件。
成功构建                            如果构建成功,则将运行构建后事件。因此,只要构建成功,该事件甚至将针对最新的项目运行。
当构建更新项目输出时     仅当编译器的输出文件(.exe或.dll)不同于先前的编译器输出文件时,才会运行构建后事件。因此,如果项目是最新的,则不会运行构建后事件。
https://docs.microsoft.com/en-us/visualstudio/ide/reference/build-events-page-project-designer-csharp?view=vs-2019

其中在微軟文件中也給出了對應的XML 元素,有興趣的同學可以自行看看

如何利用Build Events特性执行代码复现

在Lazarus組織中是利用Visual Studio來利用的,那我們來複現一下利用手法:

#1.開啟Visual Studio
2.新建一個專案
3.進入專案的屬性

就可以看到了,正如上面看到的具有3種事件

如何利用Build Events特性执行代码复现

#我們來利用第一種事件看看

第一种可以直接执行命令行也可以执行宏代码:

如何利用Build Events特性执行代码复现

这里简单复现一下,就不讨论宏代码的一个情况了。

在cobalt strike种直接生成powershell的恶意脚本。

如何利用Build Events特性执行代码复现

把命令放在visual studio中

如何利用Build Events特性执行代码复现

应用然后编译

如何利用Build Events特性执行代码复现

可以看到直接上线。

接着是第二种情况,我的电脑性能较差,因此我没有使用cobalt strike上线,我们使用弹计算器来验证可利用性

如何利用Build Events特性执行代码复现

编译

如何利用Build Events特性执行代码复现

同理,第3种也是

如何利用Build Events特性执行代码复现

我们也可以在项目文件中直接添加我们需要执行的命令

打开项目目录可以看到

如何利用Build Events特性执行代码复现

其中以.vcxproj结尾的文件就是我们需要利用的文件。

*.vcxproj:VS2010以及VS2010之后版本的VS工程文件

这里使用notepad++打开,这个文件其实也是一个xml文件。

ok 我们直接查找PreBuildEvent,PreLinkEvent,PostBuildEvent这3个xml元素

这里以PreBuildEvent进行利用

如何利用Build Events特性执行代码复现

可以看到在PreBuildEvent 具有参数,这里就是可以执行命令的地方,

如何利用Build Events特性执行代码复现

保存一下然后导进vs中进行编译

如何利用Build Events特性执行代码复现

这里再分享一个手法吧 我看到网上的分析文章都是说PreBuildEvent,PreLinkEvent,PostBuildEvent这三个利用点,都是其实还有一个的地方可以给我们利用

我们可以回看到.vcxproj文件,然后全局查找一下Command可以发现具有4个Command参数,

如何利用Build Events特性执行代码复现

除了3个我们说过的之外,还有一个在中

添加我们需要执行的命令

如何利用Build Events特性执行代码复现

保存然后编译一下,但是发现并不能成功利用,通过查看微软文档知道我们还需要构建一个输出叁数。

如何利用Build Events特性执行代码复现

然后编译,弹出计算机

如何利用Build Events特性执行代码复现

图形化的利用在

如何利用Build Events特性执行代码复现

理论上所有的IDE都能这样利用,我们可以看一下在Microsoft Visual中的利用过程吧

打开vc然后新建一个工程,在上面的工具栏找到工程然后是设置

如何利用Build Events特性执行代码复现

如何利用Build Events特性执行代码复现

在命令中填入我们需要执行的命令

我这里就弹计算机吧 然后编译成exe

如何利用Build Events特性执行代码复现

在编译的时就会执行我们的命令。

如何利用Build Events特性执行代码复现

当然这个也有3种:

1.自定义构建
2.pre-link步骤
3.Post-bulid步骤

在自定义步骤中的参数有2个
分别是命令和输出

命令可以放我们的shellcode 输出的话都可以的

如何利用Build Events特性执行代码复现

同样也是可以执行我们的命令的

如何利用Build Events特性执行代码复现

同理 post-bulid也是可以执行命令的
如何利用Build Events特性执行代码复现

在后面翻资料的时候发现了一个有意思的文章

在前面的Visual Studio中我复现了这个APT的手法,我们可以再一次看微软文档发现在Visual Studio存在一个引擎--Microsoft Build Engine

The Microsoft Build Engine is a platform for building applications.
This engine, which is also known as MSBuild, provides an XML schema
for a project file that controls how the build platform processes and
builds software. Visual Studio uses MSBuild, but MSBuild doesn't
depend on Visual Studio. By invoking msbuild.exe on your project or
solution file, you can orchestrate and build products in environments
where Visual Studio isn't installed.

Visual Studio uses MSBuild to load and build managed projects. The
project files in Visual Studio (.csproj, .vbproj, .vcxproj, and
others) contain MSBuild XML code that executes when you build a
project by using the IDE. Visual Studio projects import all the
necessary settings and build processes to do typical development work,
but you can extend or modify them from within Visual Studio or by
using an XML editor.

不难理解,MSBuild可以在未安装Visual Studio的环境中编排和构建产品(可以简单理解为执行可以代码),而且Visual Studio使用MSBuild加载和生成托管项目。比如说,像在Visual Studio中,存在一些项目文件,像是.csproj、.vbproj、.vcxproj等等

在.NET Framework 4.0中支持了一项新功能”Inline Tasks”,被包含在元素UsingTask中,可用来在xml文件中执行c#代码

这里是不是看着很眼熟?哈哈哈

没错,前面我们在复现这个APT组织的手法中知道了我们那个利用点就是.vcxproj文件,那么我们可以脱离VS来进行利用。

我们去微软中下载msbuild.exe 当然在.net中我们也能查找到

如何利用Build Events特性执行代码复现

利用起来也不难 在MSF中可以直接生成利用代码

我们使用Microsoft
VisualStudio创建以MSBuild格式保存的、带有*.csproj后缀的C#代码,以便可以使用MSBuild平台将其编译为可执行程序。借助于一个恶意的构建的过程,我们可以获得受害者计算机的反向shell。接下来,我们要生成file.csproj文件,为此,首先需要通过msfvenom生成一个基于C#的shellcode。之后,将该shellcode放入我们的file.csproj中,具体如下所示。

具体的利用手法前辈们总结好了

https://www.cnblogs.com/backlion/p/10490573.html

这里补充一些利用手法吧

执行powershell命令

这里参考3gstudent和Casey的手法,但是Casey给出的POC挂了,所以我们可以使用3gstudent的POC来进行利用

https://github.com/3gstudent/msbuild-inline-task/blob/master/executes%20PowerShellCommands.xml

以上是如何利用Build Events特性執行程式碼復現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除