具体的攻击手法是”养号“,然后诱骗安全研究人员下载他们带有恶意代码的POC,在编译的时候会触发的恶意命令和代码。

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

从绿盟科技的文章中我们可以知道事件的背景和一些信息。

我们从公开的报告中可以知道Lazarus组织的利用编译事件(Build Events)的攻击方法,接下来我们一起复现一下这个手法吧。

我们先来查看一下在微软文档中关于编译事件(Build Events)的资料

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特性执行代码复现-LMLPHP

在Lazarus组织中是利用Visual Studio进行利用的,那么我们来复现一下利用手法:

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

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

我们来利用一下第一种事件看看

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

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

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

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

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

把命令放在visual studio中

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

应用然后编译

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

可以看到直接上线。

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

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

编译

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

同理,第3种也是

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

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

打开项目目录可以看到

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

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

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

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

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

这里以PreBuildEvent进行利用

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

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

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

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

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

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

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

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

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

添加我们需要执行的命令

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

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

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

然后编译,弹出计算机

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

图形化的利用在

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

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

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

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

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

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

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

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

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

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

当然这个也有3种:

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

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

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

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

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

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

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

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

不难理解,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特性执行代码复现-LMLPHP

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

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

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特性执行代码复现的详细内容,更多请关注Work网其它相关文章!

09-15 21:36