01阅读须知
此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他方面
02基本介绍
Sharp4FsiAnyCpu.exe 是另一款基于 F# 的交互式编译器工具,能够执行攻击负载,且因为该工具自带微软的签名,在渗透测试和红队活动中具有高度的隐蔽性。其通过绕过一些基于签名验证的安全防护措施,使得在安全防护体系下仍能成功执行任务。本文将对该工具的特点、使用方法、核心代码进行详细介绍。
03使用方法
通过 Sharp4FsiAnyCpu.exe,攻击者可以执行 .fsx 脚本文件。例如,通过执行以下命令,可以弹出计算器:
Sharp4fsiAnyCpu.exe Process.fsx
其中 Process.fsx 为包含 F# 脚本代码的文件,工具会通过交互式编译器解析并执行其中的指令。
04代码实现
Sharp4FsiAnyCpu.exe 核心代码包括处理命令行参数、设置影子复制和执行脚本的逻辑。以下是关键的代码片段
internal static int executeFsi(string[] argv, bool shadowCopyFiles)
{
if (shadowCopyFiles)
{
AppDomainSetup setupInformation = AppDomain.CurrentDomain.SetupInformation;
setupInformation.ShadowCopyFiles = "true";
return AppDomain.CreateDomain("FSI_Domain", null, setupInformation)
.ExecuteAssemblyByName(Assembly.GetExecutingAssembly().GetName(), Array.Empty<string>());
}
return Main.evaluateSession(argv);
}
代码中,工具会通过 AppDomainSetup 配置影子复制,并在新的应用程序域中执行当前程序集,当影子复制未启用时,程序将直接调用 evaluateSession 方法,解析并执行传入的命令行参数。
接下来,是evaluateSession方法处理脚本执行逻辑的部分,具体代码如下所示。
internal static int evaluateSession(string[] argv)
{
if (argv == null)
{
throw new ArgumentNullException("array");
}
bool flag = false;
int num = 0;
while (!flag && num < argv.Length)
{
flag = argv[num].Contains("fsi-server");
num++;
}
if (flag)
{
Console.InputEncoding = Encoding.UTF8;
Console.OutputEncoding = Encoding.UTF8;
}
}
工具首先对传入的命令行参数进行解析,判断是否包含 fsi-server 字符串,从而确定是否需要设置输入输出编码为 UTF-8。在后续逻辑中,工具会加载 F# 交互式编译器,并使用反射机制调用编译器进行脚本执行。
综上,Sharp4FsiAnyCpu.exe 是一款功能强大的工具,在红队活动中可以有效地绕过基于签名的安全防护措施,隐蔽执行攻击负载。
05.NET安全知识库
星球汇聚了各行业安全攻防技术大咖,并且每日分享.NET安全技术干货以及交流解答各类技术等问题。
星球文化20+个专题栏目涵盖了点、线、面、体等知识面!其中主题包括.NET Tricks、漏洞分析、内存马、代码审计、预编译、反序列化、webshell免杀、命令执行、C#工具库等等。