.NET高级代码审计(第十一课) LosFormatter反序列化漏洞

栏目: ASP.NET · 发布时间: 7年前

内容简介:LosFormatter一般也是用于序列化和反序列化Web窗体页的视图状态(ViewState),如果要把ViewState 通过数据库或其他持久化设备来维持,则需要采用特定的 LosFormatter 类来序列化/反序列化。它封装在System.Web.dll中,位于命名空间System.Web.UI下,微软官方的阐述是有限的对象序列化(LOS)格式专门为高度精简的ASCII格式序列化,此类支持序列化的任何对象图。但是使用反序列化不受信任的二进制文件会导致反序列化漏洞从而实现远程RCE攻击,本文笔者从原理

0x00 前言

LosFormatter一般也是用于序列化和反序列化Web窗体页的视图状态(ViewState),如果要把ViewState 通过数据库或其他持久化设备来维持,则需要采用特定的 LosFormatter 类来序列化/反序列化。它封装在System.Web.dll中,位于命名空间System.Web.UI下,微软官方的阐述是有限的对象序列化(LOS)格式专门为高度精简的ASCII格式序列化,此类支持序列化的任何对象图。但是使用反序列化不受信任的二进制文件会导致反序列化漏洞从而实现远程RCE攻击,本文笔者从原理和代码审计的视角做了相关介绍和复现。

0x01 LosFormatter序列化

LosFormatter类通常用于对ViewState页面状态视图的序列化,看下面实例来说明问题,首先定义TestClass对象

.NET高级代码审计(第十一课) LosFormatter反序列化漏洞

定义了三个成员,并实现了一个静态方法ClassMethod启动进程。 序列化通过创建对象实例分别给成员赋值

.NET高级代码审计(第十一课) LosFormatter反序列化漏洞

常规下使用 Serialize 得到序列化后 的 文件内容是 B ase64 编码的

.NET高级代码审计(第十一课) LosFormatter反序列化漏洞

0x02 LosFormatter反序列化

2.1、反序列化用法

反序列过程是将Base64编码数据转换为对象,通过创建一个新对象的方式调用Deserialize方法实现的,查看定义如下

.NET高级代码审计(第十一课) LosFormatter反序列化漏洞

笔者通过创建新对象的方式调用Deserialize方法实现的具体实现代码可参考以下

.NET高级代码审计(第十一课) LosFormatter反序列化漏洞

反序列化后得到TestClass类的成员Name的值。

.NET高级代码审计(第十一课) LosFormatter反序列化漏洞

2.2、攻击向量—ActivitySurrogateSelector

由于之前已经介绍了漏洞的原理,所以本篇就不再冗余的叙述,没有看的朋友请参考《.NET高级代码审计(第八课) SoapFormatter反序列化漏洞》,不同之处是用了LosFormatter类序列化数据,同样也是通过重写ISerializationSurrogate 调用自定义代码得到序列化后的数据

.NET高级代码审计(第十一课) LosFormatter反序列化漏洞

按照惯例用LosFormatter类的Deserialize方法反序列化就可以成功触发计算器。

.NET高级代码审计(第十一课) LosFormatter反序列化漏洞

.NET高级代码审计(第十一课) LosFormatter反序列化漏洞

2.3、攻击向量—PSObject

由于笔者的windows主机打过了CVE-2017-8565(Windows PowerShell远程代码执行漏洞)的补丁,利用不成功,所以在这里不做深入探讨,有兴趣的朋友可以自行研究。有关于补丁的详细信息参考:

https://support.microsoft.com/zh-cn/help/4025872/windows-powershell-remote-code-execution-vulnerability

2.4、攻击向量—MulticastDelegate

由于之前已经介绍了漏洞的原理,所以本篇就不再冗余的叙述,没有看的朋友请参考《.NET高级代码审计(第七课)NetDataContractSerializer反序列化漏洞》

0x03 代码审计视角

3.1、Deserialize

从代码审计的角度找到漏洞的EntryPoint,Deserialize有两个重载分别可反序列化Stream和字符串数据,其中字符串可以是原始的Raw也可以是文档中说的Base64字符串,两者在实际的反序列化都可以成功。

.NET高级代码审计(第十一课) LosFormatter反序列化漏洞

下面是不安全的代码:

.NET高级代码审计(第十一课) LosFormatter反序列化漏洞

攻击者只需要控制传入字符串参数Content便可轻松实现反序列化漏洞攻击,完整的Poc如下

.NET高级代码审计(第十一课) LosFormatter反序列化漏洞

最后附上动态图效果

.NET高级代码审计(第十一课) LosFormatter反序列化漏洞

0x04 总结

实际开发中LosFormatter 通常用在处理ViewState状态视图,同ObjectStateFormatter一样在反序列化二进制文件时要注意数据本身的安全性,否则就会产生反序列化漏洞。最后.NET反序列化系列课程笔者会同步到 https://github.com/Ivan1ee/ 、 https://ivan1ee.gitbook.io/ ,更多的.NET安全和技巧可关注笔者的github。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

Algorithms on Strings, Trees and Sequences

Algorithms on Strings, Trees and Sequences

Dan Gusfield / Cambridge University Press / 1997-5-28 / USD 99.99

String algorithms are a traditional area of study in computer science. In recent years their importance has grown dramatically with the huge increase of electronically stored text and of molecular seq......一起来看看 《Algorithms on Strings, Trees and Sequences》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器