Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
GadgetToJScript — 一款用于生成 .NET 序列化 gadget 的工具,当使用 BinaryFormatter 从基于 JS/VBS/VBA 的脚本进行反序列化时,这些 gadget 可触发 .NET 程序集的加载/执行。 | Kitploit
工具/GitHubGitHub/med0x2e/gadgettojscript
Payload生成持久化机制漏洞利用横向移动后渗透利用红队Payload 开发对抗性攻击
GitHubmed0x2e/gadgettojscript

GadgetToJScript

一款用于生成 .NET 序列化 gadget 的工具,当使用 BinaryFormatter 从基于 JS/VBS/VBA 的脚本进行反序列化时,这些 gadget 可触发 .NET 程序集的加载/执行。

查看仓库
1.1k17875年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

描述

一个用于生成 .NET 序列化 gadget 的工具,当从 JS/VBS/VBA 脚本使用 BinaryFormatter 反序列化时,可触发 .NET 程序集加载/执行。
当前的 gadget 在通过 jscript/vbscript/vba 使用 BinaryFormatter 反序列化时会触发对 Activator.CreateInstance() 的调用,这意味着它可以通过默认/公共构造函数触发你选择的 .NET 程序集的执行。

该工具主要用于自动化红队行动(初始访问、横向移动、持久化)中的 WSH 脚本武器化,用于 PoC 的 shellcode 加载器已移除,取而代之的是在 TestAssembly 项目中实现的一个示例程序集。

详细信息:

  • 无需更新 AmsiEnable 注册表项或劫持 loadlibrary(AMSI.dll)即可绕过 AMSI。
  • 绕过 .NET 4.8+ 新引入的用于阻止“Assembly.Load”和 ActivitySurrogateSelector 类型检查的控制机制。
  • Gadget 支持对目标为 .NET Framework 3.5 至 4.8+ 环境的 payload 进行正确的反序列化。
  • 依赖 ActivitySurrogateSelector 创建一个 Surrogate 类,作为包装器来反序列化一个以触发对“Activator.CreateInstance(Assembly.Load(your_assembly_bytes).GetType())”调用方式构建的 gadget。
  • 利用基于 TextFormattingRunProperties 的 gadget 作为第一个反序列化阶段,以禁用 ActivitySurrogateSelector 类型检查,从而绕过最近在(.NET Framework 4.8+)中引入的修复。
  • 不主要依赖公开基于 .NET 的 COM 对象,因此无需调用 d.DynamicInvoke(al.ToArray()).CreateInstance(entry_class)
  • 委托仅用于在反序列化期间触发 payload 执行(Func<Assembly, IEnumerable>),这是正确链接 gadget 元素的要求。
  • 序列化 gadget 或 Stream 的长度在运行时计算,并自动填充到生成的 WSH 脚本中(VBA 不需要)。
  • 生成依赖基于 .NET 的 COM 组件免注册激活的 VBS/VBA 和 JS/HTA 脚本

用法与注意事项:

你可以使用 Release 文件夹中的二进制文件,或使用 VS2017 并将项目重新定向到 .NET 3.5 或 4.x 版本,以便从源代码构建 G2JS。

  • 使用 G2JS 的 .NET 3.5 版本来:

    • 生成面向 .NET Framework 4.x 不可用或低于 4.8 的环境运行的 WSH 脚本。(3.5 是最低要求的 .NET Framework 版本),这需要使用 .NET framework <= 3.5 构建你的 C# payload 或 .NET 程序集。
  • 使用 G2JS 的 .NET 4.x 版本来:

    • 生成面向 .NET Framework 4.x 可用环境的 WSH 脚本。(包括 4.8+)
    • 使用 “--bypass” 选项为 .NET 4.8+ 环境生成 WSH 脚本以绕过类型检查。
  • C# 源代码 payload 应放在你类的默认公共构造函数中。(从 jscript 运行 Mimikatz 的示例;https://gist.github.com/med0x2e/cc10d42b1f581507013e801da2651c74)

  • 测试在最新的 Windows 10 Enterprise 1909 版本和安装了不同 .NET framework 版本的 Windows 7 上进行。

  • 使用 GadgetToJScript.exe 生成 WSH 脚本时,请确保 Windows Defender 已关闭,脚本生成后可以重新打开。

OPSEC 提示:

使用 G2JS 的 .NET 3.5 版本生成 WSH 免注册 JScript/HTA 脚本,这些脚本仍然可以绕过 .NET framework 4.8+ 的类型检查,而无需使用第一个 TextFormattingRunProperties 阶段 gadget 来禁用此类缓解措施。将其视为针对 .NET 4.8+ 环境执行免注册 JScript/HTA payload 的 更好/更干净 的绕过方式,因为它不需要:

  • 第一阶段 gadget
  • 创建 Shell 对象
  • 从注册表读取当前 .NET framework 版本
  • 设置 COMPLUS_Version 环境变量。

-> 更少的 IOC + 面向 3.5 < .NET < 4.x 环境。

致谢与参考

该工具基于以下出色的研究/工作:

  • @tyranid https://googleprojectzero.blogspot.com/2017/04/ => 使不可序列化的类能够进行序列化/反序列化成为可能)
  • @pwntester yoserial.net 项目 https://github.com/pwntester/ysoserial.net
  • @olekmirosh https://community.microfocus.com/t5/Security-Research-Blog/New-NET-deserialization-gadget-for-compact-payload-When-size/ba-p/1763282
  • @monoxgas https://silentbreaksecurity.com/re-animating-activitysurrogateselector/
  • @zcgonvh http://www.zcgonvh.com/post/weaponizing_CVE-2020-0688_and_about_dotnet_deserialize_vulnerability.html

免责声明

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.csC# 源代码文件,示例:-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=b64VBA gadget 编码:b64 或 hex(默认设置为 b64)
-o, --output=output生成的 payload 输出文件,示例:-o C:\Users\userX\Desktop\output(无扩展名)
-r, --regfree基于 .NET 的 COM 组件的免注册激活,仅适用于 JS/HTA 脚本。
-h, --help显示帮助