浅谈SharePoint漏洞之ToolShell完结篇

admin 2025-12-22 04:22:22 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文分析了SharePoint的ToolShell漏洞,使用gemini-cli工具辅助分析dll文件,发现CVE-2025-49704/CVE-2025-53770是CVE-2020-1147的绕过,通过System.Collections.Generic.List绕过XmlValidator限制。作者改进了漏洞利用方式,避免了落地文件问题,通过反序列化获取SharePoint的machineKey数据,实现了更隐蔽的持久化技术。文章展示了AI工具在漏洞分析中的应用价值。 综合评分: 85 文章分类: 漏洞分析,WEB安全,代码审计,AI安全,安全工具


cover_image

浅谈SharePoint漏洞之ToolShell完结篇

原创

MG

不吃猹的瓜

2025年8月4日 21:59 日本

前两篇的分析都是从现象推出原因,虽然偷懒快乐但错过了很多细节。所以这一篇,笔者会从正向入手,本来笔者都已经摩拳擦掌地准备单步调试了,但想了想在这个时代这种技术很明显不再实用,不如尝试点有意思的事情。但还是那句话,由于笔者知识水平有限,此篇仅仅只是抛砖引玉,希望能够引发读者新的思考,其中难免会存在有误的地方,欢迎各位读者留言讨论。

漏洞分析

这个公众号的老读者都知道,笔者的前一个系列都是在讲大模型辅助漏洞挖掘,但是基本上讲的都是废话文学,这一篇不如就来实操一下。笔者摒弃了在前个系列中提到的使用AI IDE作为审计工具,而是选择了gemini-cli。想让大模型认识dll文件,必然是要借助第三方工具的,无非就两种方式:MCPtools。这两种方式本质上都是一样的,且gemini-cli都支持,有兴趣的读者可以参考相关文档。笔者实在是懒得写MCP那一套东西了,所以就直接选择了使用tools:通过cmd命令调用dnspy.console。运行以后的效果如下所示:

接下来就是让它自己研究了,最后得出如下结论:

gemini-cli的分析已经涵盖了漏洞的原理和利用方式,接下来需要做的就是分析如何触发访问ExcelDataSetDataTable属性。在上一篇中提到了MSOTlPn_DWP,在遍历CodeBase的过程中不难发现该参数表示的是个WebPart,可以构造恶意的序列化数据触发ExcelDataSetDataTableget方法,具体不展开分析了,只简单提一下两个笔者踩过的坑:

  • 在构造反序列化链时,不能使用XamlReader.Load作为最后的触发点,因为IIS对所有匿名身份验证请求使用IUSR账户,该账户对注册表的访问权限有限,所以在最后反序列化时会抛出以下异常从而导致反序列化失败
There is an error in the XML document. ---> System.TypeInitializationException: The type initializer for 'MS.Utility.EventTrace' threw an exception. ---> System.Security.SecurityException: Requested registry access is not allowed.
  • CVE-2025-49704/CVE-2025-53770CVE-2020-1147的绕过,微软修改CVE-2020-1147的方法是引入了XmlValidator进行限制,但CVE-2025-49704/CVE-2025-53770通过System.Collections.Generic.List绕过了该限制
漏洞复现

漏洞利用

正如上篇最后所说,笔者认为漏洞本身并没有太大的意义,真正重要的是漏洞利用。一般来说,Web应用常见的持久化技术无非就是Webshell。近年来由于攻防对抗强度的提升,又演变出了各种更高级,更隐蔽的持久化方式,比如内存马。

关注过此漏洞的读者都知道,此漏洞的在野利用方式都是通过反序列化漏洞在layouts目录下写入了一个aspx文件,而该aspx文件并不是传统意义上的Webshell,因为它没有提供任何'shell'的功能,它的目的是仅仅是获取SharePointmachineKey相关的数据,machineKey的作用已经老生常谈了,这里就不讲了,感兴趣的读者可以看看[1]。这种手法十分巧妙,避免了Webshell需要免杀的问题,但是还有一点不够优雅:存在落地文件。于是,笔者参考前人的智慧,简单修改了下,避免了落地文件这个问题,具体如下:

后记

ToolShell系列到此就结束了,有很多细节并未展开,比如如何扩展gemini-cli,不展开讲的原因有很多,最主要的原因当然还是笔者太懒了,不想写太长的文章,笔者也很讨厌阅读长文章。最后,希望读者通过这个系列的文章都能够有所收获,能尝试去扩展gemini-cli或者其他工具构建属于自己的漏洞分析工作流。

Ref

  1. https://www.claranet.com/us/blog/2019-06-13-exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserialnet

查看原文:《浅谈SharePoint漏洞之ToolShell完结篇》

评论:0   参与:  3