GadgetToJScript应用剖析 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

GadgetToJScript应用剖析

申博_安全防护 申博 99次浏览 未收录 0个评论

sunbet下载

sunbet下载是最具影响力的一家新闻门户网站。sunbet下载二十四小时发布新闻要点,涵盖金融、教育、房产、旅游、问政、要闻、县区等多个领域的新闻热点,汇集新闻资讯热点、便民生活查询、上情下达领域的服务功能。是居民应用率最高的新闻助手,做您最贴心的德州生活伴侣,海量资讯、保质保量,随心所欲感受身边事。

,

0x00 媒介

GadgetToJScrip能够将.Net顺序封装在js或vbs剧本中,比拟于James Forshaw开源的DotNetToJScript,修正了反序列化挪用链,能够绕过AMSI,增加了绕过.Net 4.8+阻挠Assembly.Load的功用。

本文用来纪录研讨细节,剖析应用思绪,扼要修正原工程,更便于测试Payload,分享同SILENTTRINITY连系的要领。

0x01 简介

本文将要引见以下内容:

· GadgetToJScript的代码剖析和完成逻辑

· 为了便于测试Payload的修正要领

· 应用剖析

· 同SILENTTRINITY连系的要领

0x02 GadgetToJScript的代码剖析和完成逻辑

1.代码剖析

(1)templates文件夹

保留有js、vbs和hta的模板。

模板文件同DotNetToJScript基础雷同,区分以下:

1、增加了一些对.Net版本的推断,读取注册表HKLM\\SOFTWARE\\Microsoft\\.NETFramework\\v4.0.30319\\,假如胜利,版本为4.0.30319,否则为2.0.50727。

2、做了两次反序列化,第一次是禁用ActivitySurrogateSelector范例搜检,用来绕过.Net 4.8+阻挠Assembly.Load的功用,第二次用来加载.Net顺序。

(2)Program.cs

主顺序,替代模板中的变量,计算长度,天生终究的js、vbs和hta剧本。

(3)TestAssemblyLoader.cs

Payload以字符串的情势保留,运用CompileAssemblyFromSource对其举行动态编译,编译效果保留在内存(results.CompiledAssembly)中。

症结函数:CompileAssemblyFromSource。

个中,GenerateInMemory属性默以为true,示意把编译天生的顺序集保留在内存中,经由过程CompilerResults实例的CompiledAssembly能够猎取,假如设置为false,能够将编译天生的顺序集保留在当地硬盘。

参考资料:

https://docs.microsoft.com/en-us/dotnet/api/system.codedom.compiler.codedomprovider.compileassemblyfromsource?view=netframework-4.8

(4)_ASurrogateGadgetGenerator.cs

构建一个链来映照字节数组以建立类的实例:

byte[] -> Assembly.Load -> Assembly -> Assembly.GetType -> Type[] -> Activator.CreateInstance -> Win!

该段代码应当来自于:https://github.com/pwntester/ysoserial.net/blob/master/ysoserial/Generators/ActivitySurrogateSelectorGenerator.cs#L50

能够理解为TestAssemblyLoader.cs完成将编译效果保留在内存(results.CompiledAssembly)中,_ASurrogateGadgetGenerator.cs用来读取这段内存并完成对.Net顺序的挪用。

(5)_DisableTypeCheckGadgetGenerator.cs

用来绕过.Net 4.8+阻挠Assembly.Load的功用。

细致细节可参考:

Re-Animating ActivitySurrogateSelector

UNIX 联合创始人BSD密码被破解

UNIX联合创始人Ken Thompson 39年前使用的基于BSD的系统login密码最终被破解,BSD是UNIX的原始版本,有许多计算机科学领域的先锋都使用该系统。 2014年,开发者Leah Neukirchen在 BSD v3的/etc/passwd文件中找到了20多个Unix先驱的哈希密码。 因为所有的密码都是用基于DES的 crypt(3) 算法保护的,且最多8个字符。Neukirchen决定暴力破解并用密码破解工具成功破解了几乎所有人的密码。 他没有成功破解的有 Ken Thompson和其他5个构建Unix系统的开发贡献人员,其中就包括Bill Joy,Bill Joy在1986年还合伙创建了Sun Microsystems,并设计了Java编程语言。 Leah Neukirchen意识到与其他的密码哈希方案(如N

(6)_SurrogateSelector.cs

建立Surrogate类,该类充任包装器。

该段代码应当来自于:https://github.com/pwntester/ysoserial.net/blob/bb695b8162bdc1d191c32f6a234a8fff5665ab9b/ysoserial/Generators/ActivitySurrogateSelectorGenerator.cs#L15

2.完成逻辑

1、实行TestAssemblyLoader.cs,将字符串情势的Payload举行动态编译,编译效果保留在内存(results.CompiledAssembly)中

2、实行_ASurrogateGadgetGenerator.cs,读取1中的内存并完成.Net顺序的挪用

3、实行_DisableTypeCheckGadgetGenerator.cs,完成绕过.Net 4.8+阻挠Assembly.Load的功用

4、实行Program.cs,替代模板文件的两个变量,计算长度,天生终究的js、vbs和hta剧本

0x03 为了便于测试Payload的修正要领

检察文件TestAssemblyLoader.cs,Payload以字符串的情势举行保留,部分内容以下:

           string _testClass = @"
                    
                using System;
                using System.Runtime.InteropServices;
                    public class TestClass
                    {
                        " + "[DllImport(\"User32.dll\", CharSet = CharSet.Unicode)]" +
                        @"public static extern int MessageBox(IntPtr h, string m, string c, int t);
                        public TestClass(){
                            " + "MessageBox((IntPtr)0, \"Test .NET Assembly Constructor Called.\", \"Coolio\", 0);" +
                        @"}
                    }           
            ";

我们能够看到,Payload以字符串的情势举行保留时,须要斟酌转义字符,这会影响Payload的开辟效力,也不是很直观。

这里给出我的一个解决要领:将CompileAssemblyFromSource换成CompileAssemblyFromFile。

如许能够从文件中读取Payload,也就不再须要斟酌转义字符。

我修正过的版本已上传至github,地点以下:

https://github.com/3gstudent/GadgetToJScript

我的版本修正了TestAssemblyLoader.cs,症结代码以下:

CompilerResults results = provider.CompileAssemblyFromFile(parameters, "payload.txt");

从牢固文件payload.txt中读取Payload。

假如想要完成同原工程雷同的功用,payload.txt的内容以下:

using System;
using System.Runtime.InteropServices;
public class TestClass
{
	[DllImport("User32.dll", CharSet = CharSet.Unicode)]public static extern int MessageBox(IntPtr h, string m, string c, int t);
	public TestClass()
	{
		MessageBox((IntPtr)0, "Test .NET Assembly Constructor Called.", "Coolio", 0);
        }
}

Payload看起来越发直观,也更易于开辟。

0x04 应用剖析

GadgetToJScript应当算是对James Forshaw开源的DotNetToJScript的进一步应用,增加的反序列化挪用链不须要挪用d.DynamicInvoke(al.ToArray()).CreateInstance(entry_class),能够绕过一些杀毒软件对特定代码的检测,可尝试以此为模板做进一步的开辟。

关于Payload的进一步应用,须要更换成csharp的花样,这让我想到了SILENTTRINITY。

0x05 同SILENTTRINITY连系的要领

关于SILENTTRINITY,我在之前的文章《SILENTTRINITY应用剖析》做过剖析

注:SILENTTRINITY正在延续更新中,增加了更多功用,我文章的内容有能够不再正确。

搭建好SILENTTRINITY后,挑选天生csharp花样的stager,敕令以下:

stagers
list
use csharp
generate http

提取stager.cs中的代码,填入payload.txt,终究示例代码已上传至github,地点以下:https://github.com/3gstudent/GadgetToJScript/blob/master/payload.txt

编译我修正过的GadgetToJScript,将payload.txt保留在同级目次,天生js剧本的敕令以下:

GadgetToJScript.exe -w js -o 1

天生1.js

实行1.js后,SILENTTRINITY取得上线信息,历程名称为wscript,以下图:

GadgetToJScript应用剖析

测试胜利。

0x06 小结

本文引见了GadgetToJScript的代码细节和完成流程,扼要修正原工程,更便于测试Payload,剖析应用思绪,分享同SILENTTRINITY连系的要领。

原文地点: https://www.4hou.com/technology/20820.html


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明GadgetToJScript应用剖析
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址