2016-09-19 8 views
5

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 के साथ serialized/deserialized अगर बाहरी स्रोत से JSON हानिकारक होगा? एक कामकाजी उदाहरण की सराहना की जाएगी।न्यूटॉन्सॉफ्ट जेसन

उत्तर

10

TypeNameHandling.All के साथ deserialize और बिना serialization बाइंडर जांच json.net जेएसओएन में मेटाडेटा के रूप में आता है कि एक प्रकार का एक इंस्टेंस बनाने की कोशिश करेगा।

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 एक धारावाहिक वर्ग है जिसका उद्देश्य अस्थायी फ़ाइलों की एक सूची बनाए रखना है जो संकलन प्रक्रिया के परिणामस्वरूप होते हैं और उन्हें अब आवश्यक होने पर हटा देते हैं। यह सुनिश्चित करने के लिए कि फाइलें हटा दी गई हैं, कक्षा एक फाइनलज़र लागू करती है जिसे कचरा कलेक्टर द्वारा ऑब्जेक्ट को साफ किया जा रहा है। एक हमलावर इस वर्ग के क्रमबद्ध संस्करण का निर्माण करने में सक्षम होगा जिसने पीड़ित प्रणाली पर किसी भी फाइल में अपने आंतरिक फ़ाइल संग्रह को इंगित किया है। यह deserialization आवेदन से किसी भी बातचीत के बिना deserialization के बाद किसी बिंदु पर हटा दिया जाएगा।

[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 
+0

अधिक के लिए, देखें (https://www.alphabot.com/security/blog/2017/net/How-to-configure-Json [एक संवेदनशील वेब एपीआई बनाने के लिए Json.NET को कैसे कॉन्फ़िगर करें] नेट-टू-बनाने-एक कमजोर-वेब-API.html)। – dbc

+0

और अलवरो मुनोज और ऑलेक्ज़ेंडर मिरोश का ब्लैकहाट पेपर https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz- शुक्र- The-13th-JSON-Attacks-wp.pdf – dbc

0

कुछ अतिरिक्त हमले गैजेट अलवारो Muñoz & ऑलेक्ज़ेंडर 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 - हमला वेक्टर: एक हमलावर नियंत्रित सर्वर से यूआरएल के साथ पेलोड भेजता है, इस सर्वर Xaml पेलोड और ContentType = application/xaml+xml और लक्ष्य सर्वर के साथ प्रतिक्रिया Xaml पेलोड के पार्स करने के दौरान स्थिर विधि वांछित निष्पादित होगा।

  • System.Windows.Data.ObjectDataProvider - अटैक वेक्टर: 1) अनारक्षित वस्तु के किसी भी तरीके को कॉल करें; 2) हम नियंत्रित पैरामीटर के साथ वांछित प्रकार के parametrized कन्स्ट्रक्टर को कॉल कर सकते हैं; 3) किसी भी सार्वजनिक विधि को नियंत्रित पैरामीटर के साथ स्थिर सहित कॉल करें।

  • System.Windows.Forms.BindingSource - अटैक वेक्टर: मनमानी गेटर कॉल।

  • Microsoft.Exchange.Management.SystemManager.WinForms.ExchangeSettingsProvider - अटैक वेक्टर: यह सेटर्स से नेस्टेड बाइनरीफॉर्मेटर deserialization में कूदने की अनुमति देता है।

संबंधित मुद्दे