JSON .NET SERIALIZE exploitation

发布时间 2023-12-11 21:57:10作者: lisenMiller

exploiting json serialization in .NET core

当使用特定的配置的时候,将在NewtonSoft JSON中会有json的反序列化漏洞。

更加具体化一些就是当 jsonserializationsettings 中的typenamehandling这个属性不是None的时候。

因为默认来说 typenamehandling 是设置成none的。

当配置文件(指的是typenamehandling)这个属性并非none的时候,一个新的属性将会同时被序列化。那就是$type属性。这个属性的value将会同时被序列化。

当被反序列化时,type属性也会被用来反序列化到指定的type类型。所以这是反序列化的入口

下面有四个typenamehandling的值

none array all auto

要实现这样的攻击的要求之一就是 将JSON反序列化为我们开发类型的派生类型或者泛型对象类型

寻找能够漏洞攻击的对象

不是所有的对象都能够进行json .net的反序列化。

这些对象需要有一个空的构造函数或者一个带参数的构造函数

payload

以下有一些手法能够用于默认的.net core应用存在json .net漏洞配置的情况

攻击者能够用以下的payload通过后台解析json格式来触发漏洞

生成要给只读文件

{
   "$type": "System.IO.FileInfo, System.IO.FileSystem",
   "fileName": "test.txt",
   "isReadOnly": true
}

修改文件属性

{
  "$type": "System.IO.FileInfo, System.IO.FileSystem",
  "fileName": "test.txt",
  "attributes": 2
}

执行命令

只存在于WPF框架

使用.net core web程序时,使用会抛出一个异常因为他找不到persentationframework依赖

 

 

当我们生成payload特和时候可以根据官方手册进行输入

TypeNameHandling setting (newtonsoft.com)

具体的输入value参数得根据具体的文件来