msbuild
首页
文章
漏洞
SRC导航
内容精选
输入关键词搜索
APP 登录| 注册
【技术分享】Use MSBuild To Do More(渗透中MSBuild的应用技巧)
阅读量 41273 | 稿费 500
分享到: QQ空间 新浪微博 微信 QQ facebook twitter
发布时间:2016-09-20 18:05:55
作者:三好学生
稿费:500RMB(不服你也来投稿啊!)
投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿
https://p5.ssl.qhimg.com/t01587c6dc736b8f906.jpg
0x00 前言
最近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文件并执行代码
保存为test.csproj
cmd下执行:
C:WindowsMicrosoft.NetFrameworkv4.0.30319msbuild.exe test.csproj
在cmd下会输出显示当前时间,如图
https://p5.ssl.qhimg.com/t016b939828d2809106.jpg
2. 编译xml文件生成exe
using System;
class Test
{
static void Main()
{
Console.WriteLine("Hello world");
}
}
保存为hello.cs
保存为hello.csproj
hello.cs和hello.csproj放于同一目录
cmd下执行:
C:WindowsMicrosoft.NetFrameworkv4.0.30319msbuild.exe hello.csproj
可以编译生成hello.exe,如图
注:编译文件满足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:
注:保存的文件名任意
cmd下执行:
C:WindowsMicrosoft.NETFrameworkv4.0.30319msbuild.exe helloworld
cmd输出helloworld,如图
2. 执行powershell命令
可参照Casey分享的POC,地址如下:
https://gist.github.com/subTee/6b236083da2fd6ddff216e434f257614
该POC已将c#代码转换成xml文件的格式,编写需要注意的部分如下:
标记1TaskName可修改,但两个位置的名称需要对应
标记2为固定格式:TaskFactory="CodeTaskFactory"
标记3的路径在不同系统可能会有区别,准确的为:
"$(MSBuildToolsPath)Microsoft.Build.Tasks.v4.0.dll"
系统默认安装路径为:
"C:WindowsMicrosoft.NetFrameworkv4.0.30319Microsoft.Build.Tasks.v4.0.dll"
标记4为一个简单的输出helloworld实例
标记5为固定格式,定义为public class ClassExample : Task, ITask
实际测试POC如图,成功执行powershell命令
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下执行:
C:WindowsMicrosoft.NETFrameworkv4.0.30319msbuild.exe aa
报错,如图
解决方法:
需要换用64位的.net Framework,原代码无需修改,只需要使用64位的.net Framework加载就好
cmd下执行:
C:WindowsMicrosoft.NETFramework64v4.0.30319msbuild.exe aa
加载成功,如图
4. 执行shellcode
参考自https://gist.github.com/subTee/a06d4ae23e2517566c52
使用msf生成32位shellcode:
use windows/exec
set CMD calc.exe
set EXITFUNC thread
generate -t csharp
同样结合上文提到的xml格式,编写代码实现在Inline Tasks中执行shellcode,实现代码的下载地址为:
https://github.com/3gstudent/msbuild-inline-task/blob/master/executes%20shellcode.xml
保存为SimpleTasks.csproj,在cmd下执行:
C:WindowsMicrosoft.NETFrameworkv4.0.30319msbuild.exe SimpleTasks.csproj
如图,成功执行shellcode弹出计算器
在64位系统下,先将shellcode替换为64位,然后换用64位的.net Framework执行即可,代码下载地址为:
https://github.com/3gstudent/msbuild-inline-task/blob/master/executes%20×64%20shellcode.xml
如图,成功执行64位shellcode
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,如图
0x04 小结
利用MSBuild实现的代码执行,有如下特点:
1、可绕过应用程序白名单
2、提供一种直接执行shellcode的方法
3、在内存中执行PE文件
4、结合VisualStudio实现的钓鱼和后门
所以建议对系统中的msbuild.exe进行更多的监控和限制。
注: 文中相关POC代码已上传至github,地址为: https://github.com/3gstudent/msbuild-inline-task
本文由安全客原创发布
转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/84597
安全客 - 有思想的安全新媒体
安全知识
安全客 官方小编 分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
2018安恒杯11月赛-Web&Crypto题解
2018-11-26 10:02:02
U2F安全协议分析
2018-11-24 10:00:48
二十年重回首——CIH病毒源码分析
2018-11-23 15:20:19
Cookie Maker:隐藏在Google Docs中的恶意网络
2018-11-23 14:30:40
|发表评论
发表你的评论吧
昵称
妇科圣手
换一个
|评论列表
还没有评论呢,快去抢个沙发吧~
安全客
有思想的安全新媒体
文章
1119
粉丝
47
TA的文章
微软11月补丁日回顾 | 在野与0day的纷纷扰扰
2018-11-14 11:04:48
乌镇大会现场发布年度领先科技成果 360安全大脑获评
2018-11-08 10:13:14
VirtualBox E1000 0day 虚拟机逃逸漏洞(全文已更新)
2018-11-07 10:48:21
假面马斯克在线发币 28个比特币花落谁家
2018-11-06 16:08:50
漏洞预警 | Gogs/Gitea 远程代码执行漏洞(CVE-2018-18925/6)
2018-11-05 17:32:17
输入关键字搜索内容
相关文章
360 | 数字货币钱包APP安全威胁概况
以太坊智能合约安全入门了解一下(下)
对恶意勒索软件Samsam多个变种的深入分析
360 | 数字货币钱包安全白皮书
Json Web Token历险记
揪出底层的幽灵:深挖寄生灵Ⅱ
简单五步教你如何绕过安全狗
热门推荐
安全客Logo
安全客
安全客
关于我们
加入我们
联系我们
用户协议
商务合作
合作内容
联系方式
友情链接
内容须知
投稿须知
转载须知
合作单位
安全客
安全客
Copyright © 360网络攻防实验室 All Rights Reserved 京ICP备08010314号-66
Loading...0daybank
文章评论