在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. 如何在Git中謹慎推送新分支
- 6. Logback謹慎的文件appender與套接字appender
- 7. MATLAB:符號工具箱繪圖與謹慎繪圖
- 8. 組合這三個SELECT語句是否可能並謹慎?
- 9. 使用謹慎標誌和文件位置設置Logback RollingFileAppender
- 10. Newtonsoft JSON
- 11. 什麼時候應該謹慎使用.NET中的數據綁定?
- 12. 蘋果公司+的文件(NSMethodSignature *)signatureWithObjCTypes在謹慎:(爲const char *)類型
- 13. Newtonsoft json異常
- 14. 'System.IO.FileLoadException'with newtonsoft-json
- 15. 使用newtonsoft JSON
- 16. 如何讓泛型能夠使用需要謹慎鑄造的返回值?
- 17. 成爲謹慎的Android開發人員。是否有多個手機需要?
- 18. 我應該重構一下嗎?還是我的混亂導致謹慎?
- 19. Deserialise JSON與Newtonsoft Json.NET在C#
- 20. 將typenameHandling轉換爲常規json
- 21. c#json使用newtonsoft
- 22. C#JSON newtonsoft轉換
- 23. 處理與Newtonsoft JSON
- 24. 解析JSON與Newtonsoft
- 25. Newtonsoft JSON分析器
- 26. Newtonsoft JSON - OutOfMemoryException異常
- 27. 用newtonsoft解析JSON
- 28. 建設Json Newtonsoft Jarray
- 29. Json.NET TypeNameHandling以只讀
- 30. 在Newtonsoft
如需更多信息,請參見[如何配置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