.NET反序列化漏洞类型以及案例分析(1)-LosFormatter

admin 2024年9月9日12:15:17评论64 views字数 1769阅读5分53秒阅读模式

前言

笔者之前在学习.net代码审计时,看到了有许多种反序列化漏洞类型,但发现市面上爆出的.net反序列化相关的漏洞相较于java却少之又少,漏洞后利用工具和学习案例也是及其的难找,本系列文章会对国内.net技术栈大型通用系统爆出的反序列化漏洞进行逐一分析,旨在加强学习以及找出反序列化漏洞种类多却发现漏洞较少的成因。

正文

.net反序列化漏洞整理

目前在网上能找到的.net反序列化学习资料较全的是360 天眼云影实验室2019年发布的一系列文章,整理如下:

LosFormatter(很火的ViewState反序列化本质)

BinaryFormatter

SoapFormatter

XmlSerializer

json.net

JavaScriptSerializer

DataContractSerializer

在目前国内的安全研究中发现七成net反序列化都是LosFormatter,本系列第一篇文章就以自己挖掘到的某通用系统0day为例,学习一下该漏洞。

对于闭源代码获取有多种方式,最简单的就是扫描备份文件,这里笔者通过自写poc 扫描资产收集到源码

.NET反序列化漏洞类型以及案例分析(1)-LosFormatter

ViewState 是使用LosFormatter进行序列化与反序列化的,市面上常见的LosFormatter反序列化是由于配置错误禁用 了MAC 签名或者获得到machineKey从而导致的,这次是由于开发者自己重写LosFormatter中的方法,未进行过滤,从而导致了反序列化漏洞。

sink(触发点)

在源码里面搜索LosFormatter关键字

.NET反序列化漏洞类型以及案例分析(1)-LosFormatter

两个类new了LosFormatter对象(由名字可以看到一个为英文版本分析其中一个即可)

可以看到该类继承了Page类并且重写了SavePageStateToPersistenceMedium方法

.NET反序列化漏洞类型以及案例分析(1)-LosFormatter

该方法用于序列化传入的state对象并且通过ScriptManager.RegisterHiddenField注册隐藏字段

该类还重写了LoadPageStateFromPersistenceMedium方法

.NET反序列化漏洞类型以及案例分析(1)-LosFormatter

从请求的表单数据中获取隐藏字段 _MyViewState 的值,这个值包含了之前保存的页面状态,然后对其反序列化(反序列化内容可控,_source_),最终返回反序列化后的状态对象,以供页面恢复其状态

输入源

 四个页面继承VsZipPage类

.NET反序列化漏洞类型以及案例分析(1)-LosFormatter

Page 类继承了 IHttpHandler 接口,负责处理 HTTP 请求。当页面首次被请求时,会执行 ProcessRequestMain 方法。此方法的主要功能是处理整个 HTTP 请求的生命周期。在处理请求的过程中,ProcessRequestMain 方法会调用 LoadAllState() 方法来加载页面的所有状态信息。

.NET反序列化漏洞类型以及案例分析(1)-LosFormatter

LoadAllState()方法调用了LoadPageStateToPersistenceMedium方法处理状态信息

.NET反序列化漏洞类型以及案例分析(1)-LosFormatter

而LoadPageStateToPersistenceMedium方法被重写,会反序列化我们输入的_MyViewState的值,未进行任何的过滤,从而导致了任意代码执行。

由于是在post请求时就调用了该方法,所以和权限验证等代码逻辑不相关(后台也可以调用到漏洞点)

.NET反序列化漏洞类型以及案例分析(1)-LosFormatter

exp生成

https://github.com/pwntester/ysoserial.net

使用ActivitySurrogateSelectorFromFile攻击向量

ysoserial.exe -g ActivitySurrogateSelectorFromFile -f losformatter -c exp.cs;System.Web.dll;System.dll >o.dat

exp.cs为自己想要执行的代码 如下

.NET反序列化漏洞类型以及案例分析(1)-LosFormatter

构造请求包,成功rce!

.NET反序列化漏洞类型以及案例分析(1)-LosFormatter

文末

本文分析了LosFormatter反序列化漏洞,该漏洞限制条件较少,并且有ViewState这种.net技术栈常用的功能也使用了LosFormatter进行序列化与反序列化,所以爆出的漏洞相较于其他种类的反序列化 较多包括万户ezEIP爆出来的反序列化漏洞也是LosFormatter,有兴趣的师傅可以自行去分析,下篇分析.net技术栈漏洞之王BinaryFormatter相关的问题。

原文始发于微信公众号(梅苑安全):.NET反序列化漏洞类型以及案例分析(1)-LosFormatter

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月9日12:15:17
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   .NET反序列化漏洞类型以及案例分析(1)-LosFormatterhttps://cn-sec.com/archives/3142641.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息