16.whitepaper-net-deser补充学习(Json.Net后篇)

admin 2024年11月3日00:22:55评论6 views字数 1750阅读5分50秒阅读模式

1.前言

前面学习了和Json.Net有关的几个链子,比如:

SecurityExceptionSettingsPropertyValueGetterCompilerResultsBaseActivationFactory

这些链子有一个特性,就是他们内部都有一些特殊属性,在set时设置payload,在get时触发恶意操作。因此我们先通过set方法设置payload,再通过一些能触发get的set行为去实现攻击。

当然还学习了XamlImageInfo相关链子,利用起来比较简单。

上述这些姿势其实都出自:

https://github.com/thezdi/presentations/blob/main/2023_Hexacon/whitepaper-net-deser.pdf

除了上面提到的这些东西,这篇文章里还介绍了一些姿势,本文给补齐来。

2.使用特性设置TypeNameHandling时对攻击造成的影响

我们前面使用TypeNameHandling的时候,基本都是把它通过DeserializeObject()传入的。这里还介绍了一种情况就是用下面的特性去传入

[JsonProperty]

16.whitepaper-net-deser补充学习(Json.Net后篇)

这和我们使用DeserializeObject()传入有什么不同呢?答案是这会直接使反序列化链不生效,因为此时TypeNameHandling.All只对第一个反序列化对象有效,后续还是TypeNameHandling.None。比方说我们用PropertyGrid+SettingsPropertyValue构造反序列化链子,从payload上来看就是PropertyGrid里面套一个SettingsPropertyValue,然而只有PropertyGrid能够按All的规则反序列化成功,SettingsPropertyValue走的是None,自然会被影响。

3.不借助ObjectDataProvider进行任意函数调用的Xaml写法

16.whitepaper-net-deser补充学习(Json.Net后篇)

这样一个超简单的payload,通过FactoryMethod可以调用目标类的几乎任何方法,因此不需要ObjectDataProvider也依然可以用Process.Start()执行系统命令

16.whitepaper-net-deser补充学习(Json.Net后篇)

如果目标对ObjectDataProvider做了匹配和拦截,可以考虑用这个姿势去绕过。

4.PictureBox反序列化SSRF点

一个无回显的SSRF点,但支持smb,在内网里有可能用来触发NTLM Realy

这个点发生在PictureBox的ImageLocation属性的set,其中调用了Load()方法

16.whitepaper-net-deser补充学习(Json.Net后篇)

这里会对传入的路径做判断,如果是远程路径,那么调用OpenRead()方法

16.whitepaper-net-deser补充学习(Json.Net后篇)

下个断点:

16.whitepaper-net-deser补充学习(Json.Net后篇)

这个方法里就发起请求了

16.whitepaper-net-deser补充学习(Json.Net后篇)

16.whitepaper-net-deser补充学习(Json.Net后篇)

16.whitepaper-net-deser补充学习(Json.Net后篇)

5.InfiniteProgressPage反序列化SSRF点

16.whitepaper-net-deser补充学习(Json.Net后篇)

问题主要发生在下面这个类

Microsoft.ApplicationId.Framework.InfiniteProgressPage

其AnimatedPictureFile属性的set

注意到这里有一个Load方法的调用

16.whitepaper-net-deser补充学习(Json.Net后篇)

Load方法

16.whitepaper-net-deser补充学习(Json.Net后篇)

这里实际上是调用PictureBox的Load()方法,上文我们已经分析过了

16.whitepaper-net-deser补充学习(Json.Net后篇)

6.FileLogTraceListener反序列化创建目录(DOS)

16.whitepaper-net-deser补充学习(Json.Net后篇)

16.whitepaper-net-deser补充学习(Json.Net后篇)

这个CustomLocation的set中会对传入的目录进行判断,如果不存在那么会进行一个创建。有部分漏洞的利用可能需要我们创建目录,比方说Mysql的UDF提权,再比如说部分解析漏洞需要依靠特殊的文件夹名字。或许可以用这个姿势组合,不过实战中估计比较难打出来。

16.whitepaper-net-deser补充学习(Json.Net后篇)

运行上述代码,成功创建目录

16.whitepaper-net-deser补充学习(Json.Net后篇)

此外Windows下的任意目录创建是可以导致DOS问题的,参考这篇文章:

https://www.zerodayinitiative.com/blog/2022/3/16/abusing-arbitrary-file-deletes-to-escalate-privilege-and-other-great-tricks

16.whitepaper-net-deser补充学习(Json.Net后篇)

只要创造

C:WindowsSystem32cng.sys

这样一个文件夹,就会造成DOS问题。

原文始发于微信公众号(HW专项行动小组):16.whitepaper-net-deser补充学习(Json.Net后篇)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月3日00:22:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   16.whitepaper-net-deser补充学习(Json.Net后篇)https://cn-sec.com/archives/3348034.html

发表评论

匿名网友 填写信息