在这链接中,备注部分提到:
当应用程序从外部源反序列化JSON时,应该谨慎地使用
TypeNameHandling
。当使用SerializationBinder
以外的值反序列化时,应使用自定义TypeNameHandling.None
验证传入类型。
在什么情况下,如果用TypeNameHandling.All
序列化/反序列化,来自外部源的JSON将是有害的?请举例说明。
发布于 2016-09-21 02:54:20
当使用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
但是,攻击者可能会将代码或框架中存在的危险类型发送给您。
也就是说,这里 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
发布于 2018-02-28 17:16:28
在Alvaro Mu oz& 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
-攻击向量:它允许从设置器跳到嵌套BinaryFormatter反序列化。但是,请注意,攻击小工具类型必须与正在反序列化的预期类型兼容(可分配到),才能使攻击成功。当预期的类型是object
或dynamic
时,这种情况总是正确的,在其他情况下也可能是这样。详情请参见https://stackoverflow.com/q/49038055/3744182。
https://stackoverflow.com/questions/39565954
复制相似问题