1.3 XMLDecoder 反序列化漏洞 在idea上创建一个新的java项目。 而后早com/test下创建一个Test类,读取XML文档以创建XMLDecoder类的实例化对象a,而后再使用readObject()方法触发反序列化漏洞,代码如下: packagecom.test;importjava.beans.XMLDecoder;importjava.io.BufferedInputStream;importjava.io.FileInputStream;import...
XMLDecoder导致漏洞的原因就在于处理节点的时候,信任了外部输入的XML指定节点类型信息(class类型节点),同时在进行节点Expression动态实例化的时候(通过invoke实现set()方法),允许节点属性由XML任意控制(本例中是new java.lang.ProcessBuilder、和new String[]{"/System/Applications/Calculator.app/Contents/MacOS/Calculator"...
然后对其反序列化即可执行命令弹出计算器。 现在我们知道了如果使用XMLDecoder去反序列化xml数据,数据中包含的命令会被执行。接下来就对其进行分析一下。 XMLDecoder反序列化漏洞成因 一、XML数据解析前的函数处理 在readObject处打上断点开始debug 进入了parsingComplete方法,跟进。 其中使用XMLDecoder的handler属性DocumentHa...
然后对其反序列化即可执行命令弹出计算器。 现在我们知道了如果使用XMLDecoder去反序列化xml数据,数据中包含的命令会被执行。接下来就对其进行分析一下。 XMLDecoder反序列化漏洞成因 一、XML数据解析前的函数处理 在readObject处打上断点开始debug 进入了parsingComplete方法,跟进。 其中使用XMLDecoder的handler属性DocumentHa...
XMLDecoder反序列化漏洞成因 一、XML数据解析前的函数处理 在readObject处打上断点开始debug 进入了parsingComplete方法,跟进。 其中使用XMLDecoder的handler属性DocumentHandler的parse方法,并且传入了我们输入的xml数据,跟进。 这里调用了SAXParserImpl类的parse方法。
最终在receive方法中调用xmlDecoder.readObject触发漏洞.receive的调用栈如下: 关于XmlDecoder如何解析xml并触发漏洞的可以参考XMLDecoder反序列化漏洞源码分析. 整个漏洞原理执行流程图如下: 修复和绕过 CVE-2017-3506的修复 这次是在如下创建XmlDecoder时. 加入过滤方法validate.源码如下: ...
XMLDecoder反序列化流程分析 进入XMLDecoder类的readObject方法后,先是调用了XMLDecoder类的parsingComplete方法跟进parsingComplete方法,发现其调用了DocumentHandler类的parse方法跟进此方法,看到他创建了一个SAXParser类的实例,调用了该实例的parse方法 进入SAXParserImpl类的parse方法接...
XMLDecoder反序列化漏洞 下面来看一个解析xml导致反序列化命令执行的demo: packageghtwf01.demo;importjava.beans.XMLDecoder;importjava.io.BufferedInputStream;importjava.io.FileInputStream;importjava.io.FileNotFoundException;publicclassXmlDecoder{publicstaticvoidmain(String[]args)throwsFileNotFoundException{XMLDeco...
进入readObject方法中 这里对文档进行了解析,而XMLDecoder.this.handler其实就是 DocumentHandler 这个handler很重要,所有反序列化的操作都是在这个类中进行的 之类通过SAXParserFactory实例化了一个SAXParser的实例,并且调用了其中的parse方法 复现过java XXE漏洞的师傅应该看见过SAXParser的用法,它允许用户...
所以最终我们的payload会调用进行readobject反序列化 然而这个readobject确实XMLDecoder的一个方法,而这个XMLDecoder却不是weblogic特有的类而是java的一个通用类 所以很容易就能发现这洞本质并不是weblogic的问题,但是weblogic确实对其进行了修补,方法很粗暴 privatevoidvalidate(InputStreamis){WebLogicSAXParserFactoryfactory=...