在this链接上,在备注部分中提到:
当您的应用程序从外部源反序列化JSON时,应谨慎使用
TypeNameHandling
。在使用SerializationBinder
以外的值进行反序列化时,应使用自定义TypeNameHandling.None
验证传入类型。
在什么情况下,如果使用TypeNameHandling.All
序列化/反序列化,来自外部源的JSON会有害?一个工作的例子将不胜感激。
答案 0 :(得分:22)
使用TypeNameHandling.All
进行反序列化并且没有SerializationBinder检查时,json.net将尝试创建一个作为JSON中的元数据类型的实例。
public class Car
{
public string Maker { get; set; }
public string Model { get; set; }
}
{
"$type": "Car",
"Maker": "Ford",
"Model": "Explorer"
} //create a Car and set property values
但攻击者可能会向您发送代码或框架中存在的危险类型。
即。来自here System.CodeDom.Compiler.TempFileCollection
的是一个可序列化的类,其目的是维护一个由编译过程产生的临时文件列表,并在不再需要它们时将其删除。为了确保删除文件,该类实现了一个终结器,当垃圾收集器清理对象时将调用该终结器。攻击者可以构建此类的序列化版本,将其内部文件集合指向受害者系统上的任何文件。这将在反序列化后的某个时刻删除,而不会与反序列化应用程序进行任何交互。
[Serializable]
public class TempFileCollection
{
private Hashtable files;
// Other stuff...
~TempFileCollection()
{
if (KeepFiles) {return}
foreach (string file in files.Keys)
{
File.Delete(file);
}
}
}
{
"$type": "System.CodeDom.Compiler.TempFileCollection",
"BasePath": "%SYSTEMDRIVE",
"KeepFiles": "False",
"TempDir": "%SYSTEMROOT%"
} // or something like this, I just guessing but you got the idea
答案 1 :(得分:2)
AlvaroMuñoz& amp; amp; amp; amp; amp; amp; Al; Oleksandr Mirosh的黑帽纸https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf。这些是:
System.Configuration.Install.AssemblyInstaller
- 攻击向量:在程序集加载时执行有效负载。
System.Activities.Presentation.WorkflowDesigner
- 攻击向量:在解析Xaml有效载荷时执行静态方法。
System.Windows.ResourceDictionary
- 攻击媒介:攻击者将带有URL的有效负载发送到受控服务器,此服务器使用Xaml有效负载和ContentType = application/xaml+xml
进行响应,目标服务器将在解析Xaml有效负载期间执行所需的静态方法
System.Windows.Data.ObjectDataProvider
- 攻击向量:1)调用任何未编组对象的方法; 2)我们可以用受控参数调用所需类型的参数化构造函数; 3)调用任何公共方法,包括具有受控参数的静态方法。
System.Windows.Forms.BindingSource
- 攻击向量:任意的getter调用。
Microsoft.Exchange.Management.SystemManager.WinForms.ExchangeSettingsProvider
- 攻击向量:它允许从setter跳转到嵌套的BinaryFormatter反序列化。
但请注意,攻击小工具类型必须与要反序列化的预期类型兼容(可分配),才能使攻击成功。当预期类型为object
或dynamic
时,此值始终为true,在其他情况下可能为true。有关详细信息,请参阅 External json vulnerable because of Json.Net TypeNameHandling auto? 。