01阅读须知
此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他方面
02基本介绍
在红队实战和渗透测试中,经常会面临绕过安全监控的需求,特别是在执行恶意代码时。常规的工具和技术往往会被安全防护措施检测到。Sharp4Rundll32.exe 正是这样一款可以绕过安全防护监控的工具。它的功能类似于 Windows 系统中的 rundll32.exe,可以从命令行执行指定的 .NET DLL 方法。
03使用方法
工具的执行流程可以简单总结为以下几个步骤,用户通过命令行输入工具和参数,格式如下:
Sharp4Rundll32.exe Sharp4Library.dll,Sharp4Library,Class1,Run "cmd.exe,/c calc"
工具会加载指定路径下的 DLL 文件,通过反射机制获取 DLL 中的类型、类和方法信息,工具根据输入的命名空间、类名、方法名,查找并执行该方法。参数会被传递给目标方法,从而实现功能执行。
04原理解析
Sharp4Rundll32.exe 的核心功能是通过反射动态加载一个指定的 DLL 文件,并执行该 DLL 文件中指定的类和方法。通过反射,可以绕过一些常见的安全监控,因为它不需要显式地调用已知的 API,而是直接从代码中动态加载和执行,具体代码如下所示。
namespaceName = array[1];
className = array[2];
methodName = array[3];
string[] array2 = new string[0];
if (2 == list2.Count)
{
array2 = list2.Skip(1).Take(list2.Count - 1).ToArray<string>().First<string>().Split(new char[]
{
','
});
}
namespaceName, className, methodName:这些变量存储了从命令行获取的 DLL 信息,包括命名空间、类名和方法名。
Program.StdLoad(fullPath, namespaceName, className, methodName, array2);
try
{
assembly = Assembly.LoadFile(Path.GetFullPath(path));
string[] array = (from t in assembly.GetTypes()
select t.Namespace).Distinct<string>().ToArray<string>();
foreach (string text in array)
{
if (!(text != nameSpace))
{
try
{
Type type = assembly.GetType(text + "." + className);
MethodInfo method2 = type.GetMethod(method);
Console.WriteLine((string)method2.Invoke(null, arguments));
}
catch (Exception ex2)
{
Console.WriteLine(ex2.Message);
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
通过assembly = Assembly.LoadFile(Path.GetFullPath(path)):加载指定路径的 Sharp4Library.dll 的 DLL 文件。该文件包含一个名为 Class1 的类,该类有一个静态方法 Run,该方法接受一个字符串参数并执行。这将会调用 Sharp4Library.dll 中的 Class1.Run 方法,传入 "cmd.exe,/c calc" 作为参数,最终在目标系统上启动计算器(calc)。
综上,Sharp4Rundll32.exe 是一款非常有用的工具,它能够在红队渗透测试中绕过许多传统的安全防护措施。通过命令行,红队成员可以灵活地执行目标计算机上的 .NET DLL 方法,完成各种攻击操作。
05.NET安全知识库
星球文化20+个专题栏目涵盖了点、线、面、体等知识面!其中主题包括.NET Tricks、漏洞分析、内存马、代码审计、预编译、反序列化、webshell免杀、命令执行、C#工具库等等。