java_bean XMLDecoder

admin 2022年4月13日22:53:24评论51 views字数 2534阅读8分26秒阅读模式

一、前言




上一篇跟完了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 = "n" + " " class="java.lang.String" length="1">n" + " index="0">calcn" + " n" + " method="start">n" + " n" + ""; 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结构

java_bean XMLDecoder

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


四、问题解答




java_bean XMLDecoder


五、参考链接



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


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


六、向列夫托尔斯泰学习


java_bean XMLDecoder

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

原文始发于微信公众号(赛博少女):java_bean XMLDecoder

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月13日22:53:24
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   java_bean XMLDecoderhttp://cn-sec.com/archives/880081.html

发表评论

匿名网友 填写信息