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

2024-11-02 14:22   广东  

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]

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


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

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

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


4.PictureBox反序列化SSRF点

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

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

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

下个断点:

这个方法里就发起请求了

5.InfiniteProgressPage反序列化SSRF点

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

Microsoft.ApplicationId.Framework.InfiniteProgressPage

其AnimatedPictureFile属性的set

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

Load方法

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

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

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

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

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

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

只要创造

C:\Windows\System32\cng.sys

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

HW专项行动小组
大师!教我打攻防
 最新文章