[Java安全]XMLDecoder反序列化漏洞解析流程分析

Posted Y4tacker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Java安全]XMLDecoder反序列化漏洞解析流程分析相关的知识,希望对你有一定的参考价值。

写在前面

调试了很多天大概是知道咋回事了,太难力,写给自己看

XMLDecoder反序列化漏洞解析流程分析

首先,XMLDecoder就是jdk中一个用于处理xml数据的类
首先创建一个xml文件

<java>
    <object class="java.lang.ProcessBuilder">
        <array class="java.lang.String" length="1">
            <void index="0">
                <string>calc</string>
            </void>
        </array>
        <void method="start"/>
    </object>
</java>

打上断点
在这里插入图片描述
进入了parsingComplete方法,跟进
在这里插入图片描述
继续跟进,其中使用parse方法,并且传入了我们输入的xml数据
在这里插入图片描述
继续跟进真个parse函数
在这里插入图片描述
is参数非空,继续跟进
在这里插入图片描述
调用了父类的parse方法

在这里插入图片描述
继续跟进parse
在这里插入图片描述
略过几步到达scanDocument
在这里插入图片描述
再跳过几步到达
在这里插入图片描述
跟进
在这里插入图片描述
继续
在这里插入图片描述
这里的handler是StringElementHandler,但是这个类没有重写endElement方法,所以调用的是父类ElementHandler的endElement方法,其中调用了getValueObject来获取标签中的value值,这里的标签是string标签,所以获取到的值是calc。在这里插入图片描述

然后将其添加到其父类标签VoidElementHandler的Argument属性中。

在这里插入图片描述
然后将handler指向其父类VoidElementHandler
在这里插入图片描述

继续解析到void标签,此时的handler就是VoidElementHandler,接着调用getValueObject。但是因为没有重写该方法,所以调用父类NewElementHandler的getValueObject。
在这里插入图片描述
继续跟进发现实现了反射调用invoke方法,也就是执行了set方法。接着再解析Array标签,按照上面的步骤解析,就完成了这一部分参数的解析

<array class="java.lang.String"length="1">
  <void index="0">
      <string>calc</string>
  </void>
</array>

那么再按照上面的步骤解析object标签,然后调用new 方法实例化 ProcessBuilder类。
在这里插入图片描述之后解析到void标签获取到start方法,然后通过调用start方法实现了命令执行,弹出计算器。

参考文章

https://paper.seebug.org/916/

以上是关于[Java安全]XMLDecoder反序列化漏洞解析流程分析的主要内容,如果未能解决你的问题,请参考以下文章

[Java安全]XMLDecoder反序列化学习

[Java安全]XMLDecoder反序列化学习

XMLDecoder反序列化漏洞

xmldecoder反序列化漏洞分析

XMLDecoder反序列化漏洞检测思考

WebLogic XMLDecoder反序列化漏洞复现