工具介绍
一个用于生成 .NET 序列化小工具的工具,可以在使用来自基于 JS/VBS/VBA 脚本的 BinaryFormatter 进行反序列化时触发 .NET 程序集加载/执行
说明 此工具用于生成 .NET 序列化 gadget,可在使用 BinaryFormatter 从 JS/VBS/VBA 脚本进行反序列化时触发 .NET 程序集加载/执行。 当使用 BinaryFormatter 从 jscript/vbscript/vba 脚本进行反序列化时,当前 gadget 会触发 Activator.CreateInstance() 调用,这意味着它可用于通过默认/公共构造函数触发所选 .NET 程序集的执行。 该工具主要是为了自动化 WSH 脚本的武器化,以用于 RT 交互(初始访问、横向移动、持久性),用于 PoC 的 shellcode 加载器已被删除,并由 TestAssembly 项目中实现的示例程序集所替代。
详细信息: - 绕过 AMSI,无需更新 AmsiEnable 注册表项或 Hijack loadlibrary (AMSI.dll)。 - 绕过 .NET 4.8+ 中新引入的用于阻止 "Assembly.Load" 和 ActivitySurrogateSelector 类型检查的控件。 - Gadget 支持针对 .NET Framework 3.5 到 4.8+ 环境的有效反序列化负载。 - 依赖 ActivitySurrogateSelector 来创建一个代理类,该类作为一个封装,用于反序列化以触发调用 "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)。 - 仅在反序列化期间使用代理来触发负载执行(Func>),这是 gadget 元素适当链接的要求。 - 序列化的 gadget 或流的长度在运行时计算,并自动填充到生成的 WSH 脚本中(不需要 VBA)。 - 生成基于注册不需要的 .NET 类型的 COM 组件的 VBS/VBA 和 JS/HTA 脚本。
使用与注意事项: 您可以使用 Release 文件夹中的二进制文件,也可以使用 VS2017 并将项目重新定位为 .NET 3.5 或 4.x 版本,以便从源代码中构建 G2JS。