• 安研


    有回显报错检测

    增加一个key-value

    一、Jackson的基本用法

    import com.fasterxml.jackson.databind.ObjectMapper;
    
    import java.io.IOException;
    
    public class Hello {
    
        public static void main(String args[]) throws IOException {
            Person p = new Person();
            p.age = 1;
            p.name = "Econ";
    
            ObjectMapper mapper = new ObjectMapper();
            String json = mapper.writeValueAsString(p);
            System.out.println(json);
    //        {"age":1,"name":"Econ"}
            Person p2 = mapper.readValue(json, Person.class);
            System.out.println(p2);
    //        Person.age=1, Person.name=Econ
        }
    }
    
    class Person {
        public int age;
        public String name;
    
        @Override
        public String toString() {
            return String.format("Person.age=%d, Person.name=%s", age, name);
        }
    }

    二、基于DefaultTyping的序列化与反序列化

    属性:

    JAVA_LANG_OBJECT
    OBJECT_AND_NON_CONCRETE
    NON_CONCRETE_AND_ARRAYS
    NON_FINAL

    序列化:

    import com.fasterxml.jackson.databind.ObjectMapper;
    
    import java.io.IOException;
    
    public class Hello {
    
        public static void main(String args[]) throws IOException {
            Person p = new Person();
            p.age = 1;
            p.name = "Econ";
            p.object = new Dna();
    
            ObjectMapper mapper = new ObjectMapper();
            mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.JAVA_LANG_OBJECT);
            String json = mapper.writeValueAsString(p);
            System.out.println(json);
    //        {"age":1,"name":"Econ","object":["Dna",{"length":1}]}
            Person p2 = mapper.readValue(json, Person.class);
            System.out.println(p2);
    //        Person.age=1, Person.name=Econ
        }
    }
    
    class Person {
        public int age;
        public String name;
        public Object object;
    
        @Override
        public String toString() {
    
            return String.format("Person.age=%d, Person.name=%s", age, name, object == null ? "null" : object);
        }
    }
    
    class Dna {
        public int length = 1;
            }

    反序列化:

    import com.fasterxml.jackson.databind.ObjectMapper;
    
    import java.io.IOException;
    
    public class Hello {
    
        public static void main(String args[]) throws IOException {
            Jacksonunserialize();
    
        }
    
        public static void Jacksonunserialize() throws IOException {
            String json = "{"age":1, "name":"econ"}";
            ObjectMapper mapper = new ObjectMapper();
            mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_CONCRETE_AND_ARRAYS);
            Person person = mapper.readValue(json, Person.class);
            System.out.println(person);
            //  Person.age=1, Person.name=econ
        }
    }
    
    class Person {
        public int age;
        public String name;
    
        @Override
        public String toString() {
    
            return String.format("Person.age=%d, Person.name=%s", age, name);
        }
    }

    反序列化调用栈分析

    1.NativeConstructorAccessorImpl (sun.reflect)

    2.DelegatingConstructorAccessorImpl (sun.reflect)
    3.Constructor (java.lang.reflect)
    4.AnnotatedConstructor (com.fasterxml.jackson.databind.introspect)
    5.createUsingDefault, StdValueInstantiator (com.fasterxml.jackson.databind.deser.std)
    6.vanillaDeserialize, BeanDeserializer (com.fasterxml.jackson.databind.deser)
    7.BeanDeserializer(com.fasterxml.jackson.databind.deser)
    8.AsArrayTypeDeserializer (com.fasterxml.jackson.databind.jsontype.impl)
    9.deserializeTypedFromObject, AsArrayTypeDeserializer (com.fasterxml.jackson.databind.jsontype.impl)
    10.deserializeWithType, BeanDeserializerBase (com.fasterxml.jackson.databind.deser)
    11.deserialize,TypeWrappedDeserializer (com.fasterxml.jackson.databind.deser.impl)
    12._readMapAndClose, ObjectMapper (com.fasterxml.jackson.databind)
    13.readValue, ObjectMapper (com.fasterxml.jackson.databind)

    gadget类构造

    class Dna {
        String cmd;
    
        Dna() {
            System.out.println("Dna.init()");
        }
    
        public void setCmd(String cmd) throws IOException {
            this.cmd = "calc.exe";
            System.out.println(String.format("Dna.setCmd(%s)", cmd));
            Runtime.getRuntime().exec(cmd);
        }
    }

    三、基于JsonTypeInfo的序列化与反序列化

    四、 绕过历史

    CVE-2020-10673

    父类ResourceGroupConfig中setLookupName方法进行赋值,调用writeValueAsString方法进行序列化,触发get方法

    影响范围:

    jackson-databind < 2.9.10.4

    JDK < 6u201、7u191、8u182、11.0.1(LDAP)

     

    com.caucho.config.types.ResourceRef  ()

    调用栈:

    1.ObjectMapper.class 

     2.DeserializationConfig.class

    3.ParserMinimalBase.class

    4.ReaderBasedJsonParser.class

    5.JsonReadContext.class

    6.JsonStreamContext.class

    7.DefaultDeserializationContext.class

    8.DeserializationContext.class

    9.DatabindContext.class

    10.MapperConfigBase.class

    11.JavaType.class

    12.DeserializerCache.class

    13.SimpleType.class

    14.Modifier.class

    15.BasicClassIntrospector.class

    16.BasicBeanDescription.class

    17.BeanDescription.class

    18.POJOPropertiesCollector.class

    19.MapperConfig.class

    20.MapperFeature.class

    21.BaseSettings.class

    22.JacksonAnnotationIntrospector.class

    23.AnnotationIntrospector.class

    24.AnnotatedClass.class

    25.AnnotationCollector.class

    26.LRUMap.class

    27.BaseicDeserializerFactory.class

    28.StdDeserializer.class

    29.UntypedObjectDeserializer.class

    30.TypeFactory.class

    31.ClassUtil.class

    32.UntypedObjectDeserializer.class

    33.LinkedNode.class

    34.ConfigOverrides.class

     

  • 相关阅读:
    Git常用操作命令
    android快速入门
    使用Jsoup 抓取页面的数据
    js面向对象组件
    js事件详解
    图解TCP-IP协议
    error: linking with `cc` failed: exit code: 1
    git——'fatal: cannot do a partial commit during a merge'
    git add 而未 commit 的文件丢失后找回
    为rust配置国内/科大源
  • 原文地址:https://www.cnblogs.com/AtesetEnginner/p/12833657.html
Copyright © 2020-2023  润新知