java_bean XMLDecoder

Posted 赛博少女

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java_bean XMLDecoder相关的知识,希望对你有一定的参考价值。

一、前言




上一篇跟完了java.io.ObjectInputStream的内部逻辑,今天来看下java.bean XMLDecoder。弱弱说,有点水,跟到后面懒得跟了23333333


二、准备




idea 起一个调试Demo,jdk 1.8.20


package xmldecoder;
import java.beans.XMLDecoder;import java.beans.XMLEncoder;import java.io.IOException;import java.io.StringBufferInputStream;import java.util.ArrayList;import java.util.HashMap;
/** * @auther Skay * @date 2021/1/24 15:23 * @description */public class Test { public static void main(String[] args) throws IOException, InterruptedException { String s = " " + " " class="java.lang.String" length="1"> " + " index="0">calc " + " " + " method="start"> " + " " + ""; StringBufferInputStream stringBufferInputStream = new StringBufferInputStream(s); XMLDecoder xmlDecoder = new XMLDecoder(stringBufferInputStream); Object o = xmlDecoder.readObject(); System.out.println(o);

}}


我懒,没有去跟writeobject,也就是一个对象怎么转化为xml文件的,所以断点直接下在java.beans.XMLDecoder#readObject,准备工作完成


三、调试




参阅了一些资料,跟漏洞主要相关的地方在com.sun.org.apache.xerces.internal.xni.parser.XMLDocumentScanner#scanDocument,之前的方法只放上调用栈


scanDocument:454, XMLDocumentFragmentScannerImpl (com.sun.org.apache.xerces.internal.impl)parse:848, XML11Configuration (com.sun.org.apache.xerces.internal.parsers)parse:777, XML11Configuration (com.sun.org.apache.xerces.internal.parsers)parse:141, XMLParser (com.sun.org.apache.xerces.internal.parsers)parse:1213, AbstractSAXParser (com.sun.org.apache.xerces.internal.parsers)parse:649, SAXParserImpl$JAXPSAXParser (com.sun.org.apache.xerces.internal.jaxp)parse:333, SAXParserImpl (com.sun.org.apache.xerces.internal.jaxp)run:375, DocumentHandler$1 (com.sun.beans.decoder)run:372, DocumentHandler$1 (com.sun.beans.decoder)doPrivileged:-1, AccessController (java.security)doIntersectionPrivilege:75, ProtectionDomain$1 (java.security)parse:372, DocumentHandler (com.sun.beans.decoder)run:201, XMLDecoder$1 (java.beans)run:199, XMLDecoder$1 (java.beans)doPrivileged:-1, AccessController (java.security)parsingComplete:199, XMLDecoder (java.beans)readObject:250, XMLDecoder (java.beans)main:27, Test (xmldecoder)


可以看到,这里整体是一个do while+switch结构

switch case结构中,核心处理是在next中,它会解析xml文件的每一行,然后调用事先初始化好的handler进行处理

java_bean XMLDecoder

handlers在com.sun.beans.decoder.DocumentHandler中初始化,保存在handlers这个HashMap集合中。每个handler以key value的形式存储,每个节点通过节点名称获取对应的handler

从next中的scanStartElement

java_bean XMLDecoder

到fDocumentHandler中的startElement

java_bean XMLDecoder

根据解析标签的不同,会调用不同的handler,解析,会调用ObjectElementHandler.

java_bean XMLDecoder

java_bean XMLDecoder


xmldecoder解析主要在于这些handler,包括weblogic cve漏洞的绕过方式也是基于某些handler继承的关系


有兴趣可以跟一下weblogic 关于xmldecoder的绕过及修复历史,干饭了,不想看了,而且weblogic搞得我脑子疼,不想再看它了,886


四、问题解答





五、参考链接



https://zhuanlan.zhihu.com/p/108754274


https://www.cnblogs.com/hetianlab/p/13534535.html


六、向列夫托尔斯泰学习


很累,想停止喜欢任何人任何事情,停止思考,停止劳动。

以上是关于java_bean XMLDecoder的主要内容,如果未能解决你的问题,请参考以下文章

JAVA漏洞重现:XMLDecoder反序列化漏洞

XMLDecoder反序列化漏洞检测思考

剖析xmlDecoder反序列化

(CVE-2017-10271 ) Weblogic XMLDecoder 反序列化

Weblogic XMLDecoder反序列化漏洞(CVE-2017-10271)

XMLDecoder反序列化漏洞