真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SoapFormatter反序列化漏洞示例分析

SoapFormatter反序列化漏洞示例分析,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

繁峙ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

一、前言

NetDataContractSerializer和DataContractSerializer一樣用于序列化和反序列化Windows Communication Foundation (WCF) 消息中發(fā)送的數(shù)據(jù)。兩者之間存在一個(gè)重要區(qū)別:NetDataContractSerializer 包含了CLR,通過CLR類型添加額外信息并保存引用來支持類型精確,而DataContractSerializer 則不包含。 因此,只有在序列化和反序列化端使用相同的 CLR 類型時(shí),才能使用 NetDataContractSerializer。若要序列化對象使用 WriteObject或者Serialize方法, 若要反序列化 XML流使用 ReadObject或者Deserialize方法。在某些場景下讀取了惡意的XML流就會造成反序列化漏洞,從而實(shí)現(xiàn)遠(yuǎn)程RCE攻擊,本文筆者從原理和代碼審計(jì)的視角做了相關(guān)介紹和復(fù)現(xiàn)。   

二、SoapFormatter序列化

SoapFormatter類實(shí)現(xiàn)的IFormatter接口中定義了核心的Serialize方法可以非常方便的實(shí)現(xiàn).NET對象與SOAP流之間的轉(zhuǎn)換,可以將數(shù)據(jù)保存為XML文件,官方提供了兩個(gè)構(gòu)造方法。    

SoapFormatter反序列化漏洞示例分析

下面還是用老案例來說明問題,首先定義TestClass對象    

定義了三個(gè)成員,并實(shí)現(xiàn)了一個(gè)靜態(tài)方法ClassMethod啟動進(jìn)程。 序列化通過創(chuàng)建對象實(shí)例分別給成員賦值     

SoapFormatter反序列化漏洞示例分析

常規(guī)下使用Serialize得到序列化后的SOAP流,通過使用XML命名空間來持久化原始程序集,例如下圖TestClass類的開始元素使用生成的xmlns進(jìn)行限定,關(guān)注a1 命名空間







360

Ivan1ee

18






三、SoapFormatter反序列化

3.1 反序列化原理和用法

SoapFormatter類反序列化過程是將SOAP消息流轉(zhuǎn)換為對象,通過創(chuàng)建一個(gè)新對象的方式調(diào)用Deserialize多個(gè)重載方法實(shí)現(xiàn)的,查看定義得知實(shí)現(xiàn)了IRemotingFormatter、IFormatter接口,

SoapFormatter反序列化漏洞示例分析

查看IRemotingFormatter接口定義得知也是繼承了IFormatter    

SoapFormatter反序列化漏洞示例分析

筆者通過創(chuàng)建新對象的方式調(diào)用Deserialize方法實(shí)現(xiàn)的具體實(shí)現(xiàn)代碼可參考以下

SoapFormatter反序列化漏洞示例分析

反序列化后得到TestClass類的成員Name的值。

SoapFormatter反序列化漏洞示例分析

3.2 攻擊向量—ActivitySurrogateSelector

在SoapFormatter類的定義中除了構(gòu)造函數(shù)外,還有一個(gè)SurrogateSelector屬性,SurrogateSelector便是代理選擇器,序列化代理的好處在于一旦格式化器要對現(xiàn)有類型的實(shí)例進(jìn)行反序列化,就調(diào)用由代理對象自定義的方法。查看得知實(shí)現(xiàn)了ISurrogateSelector接口,定義如下    

SoapFormatter反序列化漏洞示例分析

因?yàn)樾蛄谢眍愋捅仨殞?shí)現(xiàn)System.Runtime.Serialization.ISerializationSurrogate接口,ISerializationSurrogate在Framework ClassLibrary里的定義如下:    

SoapFormatter反序列化漏洞示例分析

SoapFormatter反序列化漏洞示例分析

SoapFormatter反序列化漏洞示例分析

代碼中判斷類型解析器IsSerializable屬性是否可用,如果可用直接基類返回,如果不可用就獲取派生類System.Workflow.ComponentModel.Serialization.ActivitySurrogateSelector的類型,然后交給Activator創(chuàng)建實(shí)例,再回到GetObjectData方法體內(nèi),另外為了對序列化數(shù)據(jù)進(jìn)行完全控制,就需要實(shí)現(xiàn)Serialization.ISeralizable接口,定義如下:

SoapFormatter反序列化漏洞示例分析

有關(guān)更多的介紹請參考《.NET高級代碼審計(jì)第二課 Json.Net反序列化漏洞》,在實(shí)現(xiàn)自定義反序列類的時(shí)通過構(gòu)造方法讀取攻擊者提供的PocClass類    

SoapFormatter反序列化漏洞示例分析

下圖定義了PayloadClass類實(shí)現(xiàn)ISerializable接口,然后在GetObjectData方法里又聲明泛型List集合接收byte類型的數(shù)據(jù)    

SoapFormatter反序列化漏洞示例分析

將PocClass對象添加到List集合,聲明泛型使用IEnumerable集合map_type接收程序集反射得到的Type并返回IEnumerable類型,最后用Activator.CreateInstance創(chuàng)建實(shí)例保存到e3此時(shí)是一個(gè)枚舉集合的迭代器。    

SoapFormatter反序列化漏洞示例分析上圖將變量e3填充到了分頁控件數(shù)據(jù)源,查看PageDataSource類定義一目了然,    

SoapFormatter反序列化漏洞示例分析

除此之外System.Runtime.Remoting.Channels.AggregateDictionary返回的類型支持IDictionary,然后實(shí)例化對象DesignerVerb并隨意賦值,此類主要為了配合填充MenuCommand類properties屬性的值,最后為哈希表中的符合條件的buckets賦值。     
   

SoapFormatter反序列化漏洞示例分析

接下來用集合添加數(shù)據(jù)源DataSet,DataSet和DataTable對象繼承自System.ComponentModel.MarshalByValueComponent類,可序列化數(shù)據(jù)并支持遠(yuǎn)程處理ISerializable接口,這是ADO.NET對象中僅有支持遠(yuǎn)程處理的對象,并以二進(jìn)制格式進(jìn)行持久化。

SoapFormatter反序列化漏洞示例分析

更改屬性DataSet.RemotingFormat值為SerializationFormat.Binary,更改屬性DataSet.CaseSensitive為false等,再調(diào)用BinaryFormatter序列化List集合,如下圖。

SoapFormatter反序列化漏洞示例分析

因?yàn)橹付薘emotingFormat屬性為Binary,所以引入了BinaryFormatter格式化器并指定屬性SurrogateSelector代理器為自定義的MySurrogateSelector類。序列化后得到SOAP-XML,再利用SoapFormatter對象的Deserialize方法解析讀取文件內(nèi)容的流數(shù)據(jù),成功彈出計(jì)算器

SoapFormatter反序列化漏洞示例分析

SoapFormatter反序列化漏洞示例分析SoapFormatter反序列化漏洞示例分析

3.3 攻擊向量—PSObject

由于筆者的Windows主機(jī)打過了CVE-2017-8565(Windows PowerShell遠(yuǎn)程代碼執(zhí)行漏洞)的補(bǔ)丁,利用不成功,所以在這里不做深入探討,有興趣的朋友可以自行研究。有關(guān)于補(bǔ)丁的詳細(xì)信息參考:https://support.microsoft.com/zh-cn/help/4025872/windows-powershell-remote-code-execution-vulnerability

四、代碼審計(jì)

4.1 XML載入

從代碼審計(jì)的角度找到漏洞的EntryPoint,傳入XML,就可以被反序列化,這種方式也是很常見的,需要關(guān)注一下,LoadXml直接載入xml數(shù)據(jù),這個(gè)點(diǎn)也可以造成XXE漏洞。例如這段代碼:    

SoapFormatter反序列化漏洞示例分析

這種污染點(diǎn)漏洞攻擊成本很低,攻擊者只需要控制傳入字符串參數(shù)source便可輕松實(shí)現(xiàn)反序列化漏洞攻擊,彈出計(jì)算器。

SoapFormatter反序列化漏洞示例分析

4.2 File讀取

SoapFormatter反序列化漏洞示例分析

這段是摘自某個(gè)應(yīng)用的代碼片段,在審計(jì)的時(shí)候只需要關(guān)注DeserializeSOAP方法中傳入的path變量是否可控。

關(guān)于SoapFormatter反序列化漏洞示例分析問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。


新聞標(biāo)題:SoapFormatter反序列化漏洞示例分析
文章網(wǎng)址:http://weahome.cn/article/ggcdoo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部