在this链接,在备注部分提到“TypeNameHandling should be used with caution when your application deserializes JSON from an external source. Incoming types should be validated with a custom SerializationBinder when deserializing with a value other than TypeNameHandling.None.
”。如果使用TypeNameHandling.All
进行序列化/反序列化,那么外部源的JSON会有什么危害?一个工作示例将不胜感激。TypeNameHandling在Newtonsoft Json中谨慎
回答
当使用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
但攻击者可以发送您危险的类型存在于你的代码或框架。
即从hereSystem.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
一些额外的攻击工具已经在阿尔瓦罗·穆尼奥斯&阿列克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有效载荷时执行静态方法。攻击向量:攻击者向受控服务器发送带有URL的有效载荷,该服务器响应Xaml有效载荷和目标服务器在解析Xaml有效载荷期间执行期望的静态方法。 1)调用任何解组对象的方法; 2)调用任何解组对象的方法; 2)调用任何解组对象的方法; 2)调用任何解组对象的方法; 2)调用任何解组对象的方法; 2)我们可以用受控参数调用所需类型的参数化构造函数; 3)调用任何公共方法,包括具有受控参数的静态方法。System.Windows.Forms.BindingSource
- 攻击矢量:任意的getter调用。Microsoft.Exchange.Management.SystemManager.WinForms.ExchangeSettingsProvider
- 攻击矢量:它允许从setter跳转到嵌套的BinaryFormatter反序列化。
- 1. 运行写谨慎SQL查询中DataGrip
- 2. 应该谨慎使用FirebaseDatabase.getInstance()吗?
- 3. Logback不能使用谨慎模式
- 4. 在我的GAEJ应用程序中谨慎使用https
- 5. 使用谨慎标志和文件位置设置Logback RollingFileAppender
- 6. 什么时候应该谨慎使用.NET中的数据绑定?
- 7. 苹果公司+的文件(NSMethodSignature *)signatureWithObjCTypes在谨慎:(为const char *)类型
- 8. 'System.IO.FileLoadException'with newtonsoft-json
- 9. 使用newtonsoft JSON
- 10. 如何让泛型能够使用需要谨慎铸造的返回值?
- 11. 成为谨慎的Android开发人员。是否有多个手机需要?
- 12. 将typenameHandling转换为常规json
- 13. 处理与Newtonsoft JSON
- 14. Newtonsoft JSON分析器
- 15. c#json使用newtonsoft
- 16. Newtonsoft JSON - OutOfMemoryException异常
- 17. C#JSON newtonsoft转换
- 18. Json.NET TypeNameHandling以只读
- 19. 在Newtonsoft
- 20. JSON解析错误newtonsoft
- 21. 问题使用Newtonsoft JSON
- 22. C#解析JSON w/Newtonsoft
- 23. Newtonsoft JSON不包含“项目”
- 24. .Net Linq to JSON与Newtonsoft JSON库
- 25. Newtonsoft JSON - 如何反序列化JSON
- 26. 开关{case}中是否可以使用通配符或字符串“contains”?谨慎:罗嗦
- 27. b2RevoluteJoint严谨
- 28. Git中不慎犯下
- 29. 在Newtonsoft中反序列化C#中的JSON数组
- 30. 如何从json字符串中使用newtonsoft .json获取值c#
如需更多信息,请参见[如何配置Json.NET创建一个漏洞的Web API(https://www.alphabot.com/security/blog/2017/net/How-to-configure-Json .NET到创造 - 一个脆弱的web-API.html)。 – dbc
还有AlvaroMuñoz&Oleksandr Mirosh的黑帽纸https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf – dbc