hcTv1_0
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

前言
最近挖洞过程中,发现了一些反序列化的问题,然后然后呢。。。发现貌似智慧挖掘反序列化的漏洞,并不太清楚底层代码的原理是什么样子的,这样在和甲方大大battle的时候很被动呢!!!磕磕绊绊、一知半解的回答,甲方大大并不认可技术水平,那么为了刚入门的老铁们不要遇到和我一样的尴尬情况,就整理一篇可供基础入门或者深挖原理的小伙伴们观看吧。。。
实话实说,抓包分析原理这篇文真的快把我搞木得了。。。还是太菜了。。。
还是那句话,如果哪位大佬看到这篇文章,欢迎批评指正。非常欢迎大佬来指导!!!
WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271)
漏洞利用说明:
攻击者可利用weblogic WLS LS组件的远程代码执行漏洞CVE-2017-10271,对企业服务器发起大范围远程攻击,对大量其要求的服务器造成了严重威胁。近期发现此漏洞的利用方式未传播挖矿程序。。。
受影响版本:
10.3.6.0.0, 12.1.3.0.0, 12.2.1.1.0, 12.2.1.2.0
CVE-2017-10271就是CVE-2017-3506的黑名单绕过操作,CVE-2017-3506本来可以执行对<Object>标签也进行反序列化命令执行,后来Oracle发布了关于CVE-2017-3506的补丁就是将<Object>加入黑名单。。。这种补丁防御对于java的相关防御是非常不安全的。所以就没有彻底修复这个XMLDecoder反序列化漏洞。。。
原理分析:
CVE-2017-10271漏洞主要是由Weblogic Server WLS组件远程命令执行漏洞,主要由wls-wsat.war触发该漏洞,Weblogic组件使用了自带的webservices处理程序来处理SOAP请求。通过WLLServletAdapter类进行处理,在WorkContentServerTube类中处理POST数据包中传递的XML数据.
即漏洞引发的原因是Weblogic“wls-wsat”组件在反序列化操作时使用了Oracle官方的JDK组件中“XMLDecoder”类进行XML反序列化操作引发了代码执行。也就说XMLDecoder类在解析XML文件的时候出现了反序列化问题。。。
其中,XMLDecoder类是用于读取使用XMLEncoder创建的XML文档。
XMLDecoder全过程分析
1.调用readObject()函数将xml文件进行反序列化
readObject()方法根据parsingComplete()方法来决定返回值是array数组中的元素还是null
ParsingComplete()方法读取的xml文件内容的字节流是否为空,如果为空返回false;
判断存储object属性的数组是否为空,如果为空,判断AccessControlContext对象是否为空且是否系统安全管理也为空,如果均为空则抛出异常,提示”AccessControlContext对象没有建立”。。。
如果if语句均不满足,则返回True
。。。代码调用层比较深入。。。。
这前面的复杂的步骤,我们可以看成是XMLDecoder反序列化xml文件的准备步骤,其中有一点值得注意的是这准备步骤中是没有权限限制的。。。
- 调用startElement()方法
如上图代码所示,就已经读取到了xml文件的第一个标签<java>
接下来就是利用addAttribute()方法为将读取到的标签的所有属性赋予读取到的值喽。。。
经过上面的代码调用就读取到了第一个开始标签<java>的属性及属性值
读取完第一个开始标签<java>后,接下来仍然是调用startElement()方法来读取第二个标签<Object>(SAX模式读取xml文件就是将先利用startElement()读取所有开始标签,然后再调用endElement()读取所有结束标签)
读取结束标签是用endElement()方法
endElement方法中将调用getValueObject方法获取每一个标签所产生的对象对应的ValueObject实例
以上代码就是XMLDecoder()调用readObject()方法反序列化获取student对象的较详细的过程了。。。
那么,根据对上面代码的分析,我们可以发现在准备阶段java给这类反序列化过程赋予了无限制权限,并且在利用endElement()方法读取闭合结束标签的时候,利用getValueObject()方法获取了每对标签中定义的valueObject实例即读取了student对象的属性值,就完成了反序列化的过程。。。
那么DocumentHandler都可以读取哪些类型的标签呢?在其构造方法中已经写的明明白白:
漏洞复现过程
环境搭建成功!!!
初步判断
访问http://ip:7001/wls-wsat/CoordinatorPortType,存在下图则说明存在漏洞:
尝试抓取数据包,并向其中插入XML文档(test.txt)--构造POST数据包
将Content-Type修改为:text/xml, 并添加Cache-Control为no-cache
再写入text.txt文件的xml内容
3.构造POST包进行测试,写入txt
访问txt,页面显示如下,说明确实存在该weblogic XMLDecoder漏洞
总结
感谢飞速发展的互联网。。。让我在参考了各路大佬的文章后,总结出这么一篇自己觉得还能看的文章出来。。。参考的文章比较丰富,就不一一感谢了!!哈哈哈哈哈哈
好了,这篇关于weblogic反序列化漏洞原理分析和挖掘方式就分享到这里。。。大家下去记得做实验哦,如果实验搭建过程中遇到什么问题也可以交流哦。。。总之,还是一定要亲自动手去看实验现象,这样才能真正的理解原理。。加油,大佬们!!!
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)