本文为2018年十大网络黑客技术题名文章,欢迎读者来读

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

这里是详细的动态图片

自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
点击收藏 | 2 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖