一个用于生成 .NET 序列化 gadget 的工具,当从 JS/VBS/VBA 脚本使用 BinaryFormatter 反序列化时,可触发 .NET 程序集加载/执行。
当前的 gadget 在通过 jscript/vbscript/vba 使用 BinaryFormatter 反序列化时会触发对 Activator.CreateInstance() 的调用,这意味着它可以通过默认/公共构造函数触发你选择的 .NET 程序集的执行。
该工具主要用于自动化红队行动(初始访问、横向移动、持久化)中的 WSH 脚本武器化,用于 PoC 的 shellcode 加载器已移除,取而代之的是在 TestAssembly 项目中实现的一个示例程序集。
你可以使用 Release 文件夹中的二进制文件,或使用 VS2017 并将项目重新定向到 .NET 3.5 或 4.x 版本,以便从源代码构建 G2JS。
使用 G2JS 的 .NET 3.5 版本来:
使用 G2JS 的 .NET 4.x 版本来:
C# 源代码 payload 应放在你类的默认公共构造函数中。(从 jscript 运行 Mimikatz 的示例;https://gist.github.com/med0x2e/cc10d42b1f581507013e801da2651c74)
测试在最新的 Windows 10 Enterprise 1909 版本和安装了不同 .NET framework 版本的 Windows 7 上进行。
使用 GadgetToJScript.exe 生成 WSH 脚本时,请确保 Windows Defender 已关闭,脚本生成后可以重新打开。
使用 G2JS 的 .NET 3.5 版本生成 WSH 免注册 JScript/HTA 脚本,这些脚本仍然可以绕过 .NET framework 4.8+ 的类型检查,而无需使用第一个 TextFormattingRunProperties 阶段 gadget 来禁用此类缓解措施。将其视为针对 .NET 4.8+ 环境执行免注册 JScript/HTA payload 的 更好/更干净 的绕过方式,因为它不需要:
Shell 对象COMPLUS_Version 环境变量。-> 更少的 IOC + 面向 3.5 < .NET < 4.x 环境。
该工具基于以下出色的研究/工作:
GadgetToJScript 仅应用于授权的红队行动和/或非营利性教育目的。 任何滥用此软件的行为均不由作者负责。 请在你自己的网络和/或获得网络所有者许可的情况下使用。
-w, --scriptType=js | 设置为 js、vbs、vba 或 hta |
-a, --assembly=TestAssembly.dll | .NET 程序集,示例:-a C:\Users\userX\Desktop\shellcode_loader.dll/exe,或者你可以使用 -c 命令行开关改为指定一个 c# 源文件。 |
-c, --csfile=TestAssembly.cs | C# 源代码文件,示例:-c C:\Users\userX\Desktop\shellcode_loader.cs,请确保将你的代码放在类的默认构造函数中,并使用 -d 命令行开关指定任何必需的依赖项。 |
-d, --references=Example.dll | 引用程序集,示例:-d System.Window- s.Forms.dll, System.dll |
-b, --bypass | 绕过 .NET 4.8+ 版本中引入的类型检查控制,默认设置为 false,在为 .NET 版本 > 4.8+ 的环境生成 WSH 脚本时设置为 true(--bypass/-b)。此选项应仅与 .NET 4.x G2JS 可执行文件一起使用。 |
-e, --encodeType=b64 | VBA gadget 编码:b64 或 hex(默认设置为 b64) |
-o, --output=output | 生成的 payload 输出文件,示例:-o C:\Users\userX\Desktop\output(无扩展名) |
-r, --regfree | 基于 .NET 的 COM 组件的免注册激活,仅适用于 JS/HTA 脚本。 |
-h, --help | 显示帮助 |