|
|
|
联系客服020-83701501

Use MSBuild To Do More(渗透中MSBuild的应用技巧)

联系在线客服,可以获得免费在线咨询服务。 QQ咨询 我要预约
Use MSBuild To Do More(浸透中MSBuild的垄断伎俩)

近来Casey Smith@subTee更新了一系列对于”MSBuild”的研究进展,对我有很大劝导。

本文将基于他黝黑的POC,并紧凑我的研究心得,介绍以下MSBuild的垄断伎俩:

Execute PowerShell Commands

Execute PE file

Execute Shellcode

VisualStudio Persistence

0x01 简介

MSBuild是Microsoft Build Engine的缩写,代表Microsoft和Visual Studio的新的天生平台

MSBuild可在未弃置Visual Studio的状况中编译.net的工程文件

MSBuild可编译特定式子的xml文件

更多根蒂常识可参照以下链接:

https://msdn.microsoft.com/en-us/library/dd393574.aspx

0x02 惯例用法

1. 编译xml文件并履行代码

Default
123456 <?xml version="1.0" encoding="utf-8" ?><Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  <Target Name="PrintCurrentDateTime">    <Message Text="The current date and time is: $(&#91;System.DateTime&#93;::Now)." />  </Target></Project>

生活为test.csproj

cmd下履行:

Default
1 C:\Windows\Microsoft.Net\Framework\v4.0.30319\msbuild.exe test.csproj

在cmd下会输出表示当前光阴,如图

1

2. 编译xml文件天生exe

Default
12345678 using?System;class?Test{????static?void?Main()????{????????Console.WriteLine("Hello?world");????}}

生活为hello.cs

Default
12345 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">    <Target Name="Compile">        <CSC Sources="hello.cs" OutputAssembly="hello.exe" />    </Target></Project>

生活为hello.csproj

hello.cs和hello.csproj放于同一目次

cmd下履行:

Default
1 C:\Windows\Microsoft.Net\Framework\v4.0.30319\msbuild.exe hello.csproj

能够编译天生hello.exe,如图

2

注:编译文件惬意xml文件式子就可,后缀名方便

0x03 扩展用法

在.NET Framework 4.0中否决了一项新从命”Inline Tasks”,被搜罗在元素UsingTask中,可用来在xml文件中履行c#代码

详细介绍可参考以下链接:

https://msdn.microsoft.com/en-us/library/dd722601.aspx?f=255&MSPPError=-2147217396

1. HelloWorld示例

以下代码生活为helloworld:

Default
12345678910111213141516171819 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  <Target Name="Hello">   <HelloWorld />  </Target>  <UsingTask    TaskName="HelloWorld"    TaskFactory="CodeTaskFactory"    AssemblyFile="C:\Windows\Microsoft.Net\Framework\v4.0.30319\Microsoft.Build.Tasks.v4.0.dll" >    <ParameterGroup/>    <Task>      <Using Namespace="System" />        <Code Type="Fragment" Language="cs">        <![CDATA[                Console.WriteLine("Hello World");               ]]>      </Code>    </Task>    </UsingTask></Project>

注:生活的文件名方便

cmd下履行:

Default
1 C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe helloworld

cmd输出helloworld,如图

3

2. 履行powershell号令

可参照Casey分享的POC,地点以下:

https://gist.github.com/subTee/6b236083da2fd6ddff216e434f257614

该POC已将c#代码转换成xml文件的式子,编写须要把稳的全副以下:

4

标志1TaskName可修正,但两个位置的名称须要对应

标志2为固定式子:TaskFactory=”CodeTaskFactory”

标志3的路径在分歧零碎大要会有鉴别,粗略的为:

Default
1 "$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll"

零碎默认弃置路径为:

Default
1 "C:\Windows\Microsoft.Net\Framework\v4.0.30319\Microsoft.Build.Tasks.v4.0.dll"

标志4为一个繁杂的输出helloworld实例

5

标志5为固定式子,定义为public class ClassExample : Task, ITask

理论测试POC如图,战败履行powershell号令

6

3. 履行PE文件

Casey分享的POC地点以下:

https://gist.github.com/subTee/ca477b4d19c885bec05ce238cbad6371

可是上传的文件被截断,导致全副代码无奈检查,因此尝试巨匠实现

紧凑之前研究过的代码,地点以下:

https://gist.github.com/subTee/00cdac8990584bd2c2fe

比力上文提到的xml式子,编写代码实现在Inline Tasks中内存加载64位的mimikatz.exe,实今世码的下载地点为:

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

cmd下履行:

Default
1 C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe aa

报错,如图

7

打点方法:

须要换用64位的.net Framework,原代码无需修正,只须要应用64位的.net Framework加载就好

cmd下履行:

Default
1 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe aa

加载战败,如图

8

4. 履行shellcode

参考自https://gist.github.com/subTee/a06d4ae23e2517566c52

应用msf天生32位shellcode:

Default
1234 use windows/execset CMD calc.exeset EXITFUNC threadgenerate -t csharp

异样紧凑上文提到的xml式子,编写代码实现在Inline Tasks中履行shellcode,实今世码的下载地点为:

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

生活为SimpleTasks.csproj,在cmd下履行:

Default
1 C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe SimpleTasks.csproj

如图,战败履行shellcode弹出计较器

9

在64位零碎下,先将shellcode改造为64位,今后换用64位的.net Framework履行就可,代码下载地点为:

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

如图,战败履行64位shellcode

10

5. VisualStudio Persistence

在 《Pay close attention to your download code——Visual Studio trick to run code when building》中介绍过垄断VisualStudio的.csproj文件实现的代码履行,异样Inline Tasks也可用到此处,实今世码已上传,地点为:

https://github.com/3gstudent/msbuild-inline-task/blob/master/executes%20shellcode%20when%20visual%20studio%20is%20afterBuild.csproj

修正vs工程中的.csproj文件,削减之述代码,能够或许实现在vs工程编译过程中履行shellcode,如图

11

0x04 小结

垄断MSBuild实现的代码履行,有以下特性:

1、可绕过垄断法度模范白名单

2、提供一种直接履行shellcode的方法

3、在内存中履行PE文件

4、紧凑VisualStudio实现的钓鱼和后门

所以倡始对零碎中的msbuild.exe中止更多的监控和制约。

注:?文中关系POC代码已上传至github,地点为:?https://github.com/3gstudent/msbuild-inline-task

【via?三好高足@坦然客】

PS:用一个月的光阴终究完成为了存案,保举本身扫这边二维码存眷咱们微信公众号,网站新静态都邑及时推送。

数安新闻+更多

证书相关+更多