免费黑客接单:.NET高档代码审计之XmlSerializer反序列化缝隙

访客5年前黑客文章496

在.NET 结构中的 XmlSerializer 类是一种很棒的东西,它是将高度结构化的 XML 数据映射为 .NET 目标。XmlSerializer类在程序中通过单个 API 调用来实行 XML 文档和目标之间的转化。转化的映射规矩在 .NET 类中通过元数据特点来表明,假设程序开发人员运用Type类的静require 'base64'态 *** 获取外界数据,并调用Deserialize反序列化xml数据就会触发反序列化缝隙侵犯(例如DotNetNuke 任意代码实行缝隙 CVE-2017-9822),本文笔者从原理和代码审计的视角做了相关脑图介绍和复现。

二、XmlSerializer序列化

.NET 结构中 System.Xml.Serialization 命名空间下的XmlSerializer类可以将 XML 文档绑定到 .NET 类的实例,有一点需求留意它只能把目标的公共特点和公共字段转化为XML元素或特点,并且由两个 *** 组成:Serialize() 用于从目标实例生成 XML;Deserialize() 用于将 XML 文档分析成目标图,被序列化的数据可以是数据、字段、数组、以及XmlElement和XmlAttribute目标格局的内嵌XML。具体看下面demo

XmlElement指定特点要序列化为元素,XmlAttribute指定特点要序列化为特性,XmlRoot特性指定类要序列化为根元素;通过特性类型的特点、影响要生成的称号、称号空间和类型。再创建一个TestClass类的实例填充其特点序列化为文件,XmlSerializer.Serialize *** 重载可以承受Stream、TextWrite、XmlWrite类,终究生成的XML文件列出了TestClass元素、Classname特性和其它存储为元素的特点:

三、XmlSerialize反序列化

反序列进程:将xml文件转化为目标是通过创建一个新目标的 *** 调用XmlSerializer.Deserialize *** 完结的,在序列化最要害的一环当属new XmlSerializer结构 *** 里所传的参数,这个参数来自System.Type类,通过这个类可以拜访好了,StartHearbeat()心跳函数我们就分析到这儿。关于任意数据类型的信息,指向任何给定类型的Type引证有以下三种 *** 。

3.1 typeof

实例化XmlSerializer传入的typeof(TestClass) 表明获取TestClass类的Type,typeof是C#中的运算符,所传的参数只能是类型的称号,而不能是实例化的目标,如下Demo

通过typeof获取到Type之后就能得到该类中一切的Methods、Members等信息。下图工作Debug时,弹出音讯对话框闪现其时成员Name的值。

3.2 object.Type

在.NET里一切的类终究都派生自System.Object,在Object类中界说了许多公有和受保护的成员 *** ,这些 *** 可用于自己界说的一切其他类中,GetType *** 就是其间的一个,该 *** 回来从System.Type派生的类的一个实例,因为可以供应目标成员所属类的信息,包含底子类型、 *** 、特点等,上述事例中实例化TestClass,再获取其时实例的Type,如下Demo

3.3 Type.GetType

第三种 *** 是Type类的静态 *** GetType,这个 *** 容许外界传入字符串,这是严重利好,只需求传入全限定名就可以调用该类中的 *** 、特点等

Type.GetType传入的参数也是反序列化发生的缝隙污染点,接下来就是要去寻觅可以被用来侵犯运用的类。

四、打造侵犯链

首要放上侵犯链打造成功后的完好Demo,这段Demo可以复用在任意当地(这儿不触及.NET Core、MVC),如下图

只需XmlSerializer存在反序列化缝隙就可用下面Demo中的内容,触及到三个首要的技术点,以下别离来介绍原理。

4.1 ObjectDataProvider

ObjectDataProvider类,它坐落System.Windows.Data命名空间下,可以调用任意被引证类中的 *** ,供应成员ObjectInstance用相似实例化类、成员MethodName 调用指定类型的 *** 的称号、成员MethodParameters表明传递给 *** 的参数,参阅下图

再给TestClass类界说一个ClassMethod *** ,代码完结调用System.Diagnostics.Process.Start发动新的进程弹出计算器。假设用XmlSerializer直接序列化会抛出反常,因为在序列化进程中ObjectInstance这个成员类型不知道,不过可以运用ExpandedWrapper扩展类在系统内部预先加载相关实体的查询来防止反常差错,改写Demo

生成data.xml内容如下:

侵犯链榜首步就算完结,但美中不足的是因笔者在检验环境下新建的TestClass类存在缝隙,但在出产情况下是非常复杂的,需求寻求Web程序中存在软弱的侵犯点,为了使侵犯本钱下降必定得调用系统类去到达指令实行,所以需求引进下面的常识。

4.2 ResourceDictionary

ResourceDictionary,也称为资源字典一般出现在WPF或UWP应用程序中用来在多个程序集间同享静态资源。既然是WPF程序,必定规划到前端UI规划言语XAML。 XAML全称Extensible Application Markup Language (可扩展应用程序符号言语) 根据XML的,且XAML是以一个树形结构作为全体,假设对XML了解的话,就能很快的掌握,例如看下面Demo

榜首个标签ResourceDictionary,xmlns:Runtime表明读取System.Diagnostics指令空间的称号起单个名为Runtime

第二个标签ObjectDataProvider指定了三个特点,x:key便于条件检索,含义不大但有必要得界说;ObjectType 用来获取或设置要创建其实例的目标的类型,并运用了XAML扩展;x:Type相当于C#中typeof运算符功用,这儿传递的值是System.Diagnostics.Process;MethodName用来获取或设置要调用的 *** 的称号,传递的值为System.Diagnost O: (~I0 I1) + (I0 ~I1)ics.Process.Start *** 用来发动一个进程。

第三个标签ObjectDataProvider.MethodParameters内嵌了两个 *** 参数标签,通过System:String别离指定了发动文件和发动时所带参数供Start *** 运用。

介绍完侵犯链中ResourceDictionary后,侵犯的Payload主体现已完结,接下来通过XamlReader这个系统类所供应的XML解析器来完结侵犯。

4.3 XamlReader

XamlReader坐落System.Windows.Markup空间下,望文生义就是用来读取XAML文件,它是默许的XAML读取器,通过Load读取Stream流中的XAML数据,并回来作为根目标,而别的一个Parse *** 读取指定字符串中的XAML输入,也相同回来作为根目标,天然Parse *** 是我们关怀和寻求的。

只需运用ObjectDataProvider的ObjectInstance *** 实例化XamlReader,再指定MethodName为Parse,并且给MethodParameters传递序列化之后的资源字典数据,这样就可以完结XmlSerializer反序列化侵犯链的打造。

五、代码审计视角

从代码审计的视点其实很简略找到缝隙的污染点,通过前面几个末节的常识能发现序列化需求满意一个要害条件Type.GetType,程序有必要通过Type类的静态 *** GetType,例如以下demo

首要创建XmlDocument目标载入xml,变量typeName通过Xpath获取到Item节点的type特点的值,并传给了Type.GetType,紧接着读取Item节点内的一切Xml数据,终究交给Deserialize *** 反序列化,这是一个近乎完美的使用点。再来看笔者在github上收集到的XmlSerializer反序列化类:XmlSer然后呢,我们看一下targetsializeUtil.cs

此处值参数类型为Type,代码自身没有问题,问题在于程序开发者可能会先界说一个字符串变量来承受传递的type值,通过Type.GetType(string)回来 Type目标再传递进DeserializeXml,在代码审计的进程中也需求重视此处type的来历。

六、事例复盘

最终再通过下面事例来复盘整个进程,全程展现在VS里调试里通过反序列化缝隙弹出计算器。

1.  输入http://localhost:5651/Default?node=root&value=ty模型加载速度pe 加载了长途的(192.168.231.135)1.xml文件

2. 通过xmlHelper.GetValue得到root节点下的一切XML数据

3.  这步最要害,得到root节点的type特点,并供应给GetType *** ,XmlSerializer目标实例化成功

4. XmlSerializer.Deserialize(xmlReader)成功调出计算器

最终附上动图

七、总结

因为XmlSerializer是系统默许的反序列类,所以在实践开发中运用率仍是比较高的,侵犯者发现污染点可控的时分,可以从两个维度去寻觅使用的点,榜首从Web应用程序中寻求可以实行指令或许写WebShell的类和 *** ;第二就是本文中所说的使用ObjectDataProvider、ResourceDictionary、XamlReader组成的侵犯链去实行指令或许反弹Shell ,最终.NET反序列化系列课程笔者会同步到 https://github.com/Ivan1ee/ 、https://ivan1ee.gitbook.io/ ,后续笔者将连续推出高质量的.NET反序列化缝隙文章,大致课程纲要如下图

欢迎大伙继续重视,沟通。

*本文作者:Ivan1ee@360云影实验室,转载请注明来自FreeBuf.COM

免费黑客接单:.NET高档代码审计之XmlSerializer反序列化缝隙

可以看出这是一个非常简略的弹出提示框的代码,只需5行代码。但麻雀虽小五脏俱全,通过一个小程序我们更简略了解程序的底子工作原理。global _startLazarus在工作C2服务器方面运用了不同的技术:既有购买的服务器也运用被黑的主机。研究人员发现了一些在恶意侵犯活动中看似合法的服务器。根据服务器影响header,研究人员发现这些服务器应该工作的是Microsoft Windows Server 2003的Internet Information Services (IIS) 6.0的有缝隙的实例。另一个Lazarus运用的C2服务器应该是从一家保管服务公司购买的,用来保存macOS和Windows payload。服务器的地理分布非常不同,从我国到欧盟国家都有。但是为什么运用两种不同类型的服务器呢?该组织的侵犯活动中有一个规矩(规矩)就是只在租赁的服务器上保存恶意软件,被黑的服务器只用于保存恶意软件通讯所需的C2脚本。· dwmapi.dll.NET高级代码审计之XmlSerializer反序列化漏洞

免费黑客接单msf exploit(multi/handler) exploit假设说恢复 *** 是为一般顾客规划的,那么DFU方规律只需专业的人员才会运用。此 *** 要求运用者有必要掌握Apple的各种底层操原理并熟知其间的各个功用,并且在实行每个进程时需求精确计时(否则设备将仅重启),最不幸的是,苹果也没有具体的向大众发布DFU *** 的运用阐明。因此,即使关于专家来说,要想进入DFU *** 也很困难。gdi32 = windll.gdi32[1][2][3]黑客接单网

当然我们也可以运用指令行来查询:Unnamed attack – 用卡车扫描仪发送指令或盗取数据图15免费黑客接单

sandboxed = no e.printStackTrace();该东西并不免费。 授权费用为995美元。 58590 Unique Instructions Executed

按照Rootkit技术水平可以分红裸奔自救技术、数据库级Rootkit技术、操作系统级Rootkit技术和内存级Rootkit技术。

POC存在缺陷,我将会谈论它,然而在它的原始 *** 下,它却设法绕过一切的微软的缝隙缓解。POC演示了怎样正确的抵消缝隙补丁中凌乱的反侵犯技术和并获得实行权限。CVE-2016-7200是指chakra.dll中的array.filter函数类型稠浊差错缝隙。在这个帖子里,它容许侵犯者确定在堆上创建的政策的地址。CVE-2016-7201是chakra.dll中的另一个类型稠浊差错缝隙,这一次是在JavascriptArray :: FillFromPrototypes傍边。它使侵犯者可以在任意内存上进行读/写。- (void)base64 NS_AVAILABLE(10_9, 7_0);.NET高级代码审计之XmlSerializer反序列化漏洞

免费黑客接单[2] 对政策函数进行 before、after 代码插桩,多用于操作(查看或批改)api的入参以及回来值。default-lease-time 60;freeing 0x9846008假设你的设备其时工作的是 Android 4.4 或 更低版别,那么你可以检验 “Forgot Pattern(遗忘方式)” 功用来重置锁屏暗码。当你逾越 5 次检验解锁失利后,你会看到一条提示信息,“请在 30 秒后重试”。这时你会看到屏幕底部有闪现 “Forgot Pattern(遗忘方式)” 的按钮,我们来点击该按钮。

$ ./tplmap.py -u 'http://www.target.com/app?id=*' 我们来看看这个研讨人员扫描这些FTP服务器的一些环境:-s 指定所运用的shell 对usersdd usermod都适用免费黑客接单

if(iSetAble== '0'){

2、无法联接电脑,或许有锁屏暗码(破解 *** ,可以检验安卓系统信任文件(公钥)和编造指纹破解手机指纹认证)

但是,有一些更快的通讯方式所必需的特别用例——例如,当解密较大的DRM保护的媒体文件时,为了保证顺利播放,需求运用尽量少的通讯消耗。 _In_ BOOL fSwap.NET高级代码审计之XmlSerializer反序列化漏洞

net start scsrvc5. 同享处理员账户Tor浏览器版别升至 5.5a6
本文标题:免费黑客接单:.NET高档代码审计之XmlSerializer反序列化缝隙

相关文章

金融注册公司取名大全(175个顺口名字)

好听两个字金融注册公司取名名字大全打分 勤杂金融注册公司   30.47分   定格金融注册公司   95.48分   林冠金融注册公司   27.57分   炒风金融注册公司   93.89分...

怎样盗取我女朋友微信聊天记录而不被他发现

2020是个特殊的春节,以为新型冠状病毒的影响不得不减少出门,每天在家的日子多少有点无聊。甚至很多人想提前结束假期。在家无聊的说说图片大全 在家待着无聊心情感言。友谊长存带来相关介绍。 在家无聊的说...

2020年网上最畅销的10种商品,十大暴利小商品推荐

网上购物更改了大家的买东西方法,大到家用电器、小到卫生纸都能够在网上订购。那麼你了解什么商品在网络上最好是卖吗? 雨果网从外国媒体近日的报导中掌握到, Forrester Resea...

股票涨停了卖出合适吗(股票涨停是不是不能买入)

为了更好地降低股市交易的投机性个人行为,要求每一个个股每一个买卖日的股票涨幅度,做到增涨限制力度的就叫股票涨停。那麼,股票涨停是否不可以买进?我告诉你。股票涨停就是指该股做到了上涨幅度限制,就中国股票...

在家创业项目好难找?看看这些可以从零开始的职业!

你是不是感觉辛苦工作的每一天全是反复的一天,干着一样的事儿,说着千篇一律得话,过着一眼望撞头的日子?你是不是隐隐约约感受到工作的瓶颈就需要来临了呢?自己创业又沒有本钱,想做一番事儿又迈不动步伐,这你是...