告别脚本小子系列丨JAVA安全(8)——反序列化利用链(下)

news2024/11/17 3:41:47

0x01 前言

在前面的文章中介绍了基于CC链的反序列化利用方式,并且通过最终调用Runtime类的exec方法达到命令执行的效果。在CC链中还可以通过xalan来执行命令。

xalan是java操作xml的库,属于java内置的官方库之一,在CC链中主要用到的是com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl类。与上篇文章中提到的利用链不同,xalan最终是通过加载字节码来达到代码执行的效果,所以xalan更适合于执行语句的场景,利用xalan来植入内存马会比其他链更加方便。如果目标同时可以使用多条CC链,通常会更倾向于使用xalan相关的链。

往期推荐

1

告别脚本小子系列丨JAVA安全(1)——JAVA本地调试和远程调试技巧

2

告别脚本小子系列丨JAVA安全(2)——JAVA反编译技巧

3

告别脚本小子系列丨JAVA安全(3)——JAVA反射机制

4

告别脚本小子系列丨JAVA安全(4)——ClassLoader机制与冰蝎Webshell分析

5

告别脚本小子系列丨JAVA安全(5)——序列化与反序列化

6

告别脚本小子系列丨JAVA安全(6)——反序列化利用链(上)

7

告别脚本小子系列丨JAVA安全(7)——反序列化利用链(中)

0x02 Xalan链分析

java.lang.ClassLoader是java中负责类加载的抽象类,类中包含一个特别重要的方法defineClass,defineClass方法接受一组字节,然后将其具体化为一个Class类型实例,它一般从磁盘上加载一个文件,然后将文件的字节传递给JVM,通过JVM(native 方法)对于Class的定义,将其具体化,实例化为一个Class类型实例。目前流行的jsp的webshell冰歇和哥斯拉均是采用这种方式来传递的恶意代码。

在TemplatesImpl类的defineTransletClasses方法中,存在对defineClass方法的调用,如图2.1所示。并且传递的参数来源于类私有的属性_bytecodes。

图2.1 在defineTransletClasses方法中调用defineClass方法

除了通过defineClass来生成Class对象之外,还需要通过newInstance方法来生成类对应的实例。向上查找调用了defineTransletClasses方法的其他方法,如图2.2所示。

图2.2 在getTransletInstance方法中调用了目标方法,并进行实例化

由于getTransletInstance方法是private类型的方法,不利于在反序列化利用链中进行调用,继续向上查找调用了getTransletInstance方法的其他方法,如图2.3所示。

图2.3 通过newTransformer方法调用getTransletInstance方法

这里的newTransformer方法已经是一个public类型的方法了,可以直接在反序列化利用链中进行调用。但是在TemplatesImpl类中还存在对newTransformer方法调用的另外的方法,如图2.4所示。

图2.4 通过getOutputProperties方法调用newTransformer方法

在TemplatesImpl类中提供了通过defineClass动态加载字节码并进行实例化的方式,这是TemplatesImpl类能够在多种不同类型反序列化利用链中出现的根本原因。并且由于自身内部方法间相互调用的关系,可以总结只要满足下面表的条件之一,则可以达到通过TemplatesImpl类执行命令的效果。

表2.1 TemplatesImpl类提供的调用方式

在TemplatesImpl类中调用对应的方法,可以达到命令执行的效果,如图2.5所示。方法一和方法二均能达到一样的命令执行效果。

图2.5 通过TemplatesImpl来执行命令

0x03 基于Xalan的CC链

在CC3的利用链中最终是通过Xalan来执行命令,CC3的利用链和通过com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter类的构造方法来调用newTransformer方法,达到通过Xalan执行命令的效果,如图3.1所示。

图3.1 在TrAXFilter类的构造方法中调用newTransformer方法

下一步的关键是看如何调用TrAXFilter类的构造方法,ysoserial的作者并没有直接找TrAXFilter类的构造方法调用,而是通InstantiateTransformer类的transform方法中存在调用任意类的getConstructor方法来调用TrAXFilter类。如图3.2所示。

图3.2 在InstantiateTransformer类的transform方法中调用TrAXFilter类的构造方法 

剩下如何调用InstantiateTransformer类的transform方法与CC1利用链完全一致,如图3.3所示。这里不对其中完全一致的内容再做分析。

图3.3 CC3利用链和CC1利用链对比

除了CC3的链以外,还有CC2、CC4、CB链均与Xalan有关,Xalan提供了一种执行复杂语句的方式,掌握Xalan链有助于编写高级复杂的反序列化利用代码。

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

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

相关文章

论文研读|TNNLS 期刊近三年对话生成工作介绍(2篇)

前言:本篇博客记录TNNLS期刊近三年的对话生成相关工作中本人比较感兴趣的两篇工作。首先给大家分享一下论文精确查找的方式,然后对两篇工作的主要思想进行简要介绍。 目录 1. 论文精确查找方法2. 论文简介2.1 面向用户个性保持与回复多样性的两阶段对话生…

错误:No module named ‘osgeo’

from osgeo import gdal 报错:No module named ‘osgeo’ pip install gdal 会出错,也不知道什么原因。 解决方案: 下载whl,然后pip install .whl即可。 详细步骤如下: whl下载地址:https://www.lfd.uci.edu/~go…

基于java+servlet+mysql-图书商城

基于javaservletmysql-图书商城 一、系统介绍二、功能展示1.项目骨架2.首页3.图书详情4.我的订单5.我的购物车6、注册7、登录8、图书管理9、订单管理 四、其它1.其他系统实现五.获取源码 一、系统介绍 项目类型:Java web项目 项目名称:基于javaservlet…

浅谈企业能源监测管理系统的设计与应用

安科瑞 华楠 摘要: 针对企业目前能源监测现状, 结合企业信息化建设情况和发展需要, 介绍了能源监测管理信息系统, 提出了企业能源监测管理系统建设建议。 关键词:管理系统; 能源监测; 企业信息化 0 引言 节能降耗是缓解中国资源约束的根本出路, 也是提高企业自主创新能力的…

【机器学习】如何选择合适的假设函数

在前面的线性回归中,我们可以使用不同次数的多项式对数据集进行拟合,但是选择次数过低的多项式会导致欠拟合,选用次数过多的多项式会过拟合,那么如何选择合适的多项式呢?这就是本文需要解决的问题。 想要了解自己训练…

什么是α测试β测试和灰度测试?

吃软件测试这碗饭的,如果基础理论都不懂,谈何长久? 欢迎来学习本系列,基础理论比较枯燥,这也是为什么现在很少人掌握的主要原因。热饭尽量用浅显易懂 生动的例子 来帮助大家学习基础理论,所以请耐心看完此系…

纯JavaScript简单实现移动端网页的上拉加载、下拉刷新

公司要在安卓软件中,添加H5网页包,实现订单卡片列表,要求有上拉加载、下拉刷新的功能。 经过搜索资料后,实现如下: 创建一个类PullData class PullData() {/*** 类的构造函数,在new PullData({xx: xxx})时…

尚硅谷甄选--(暂时不更新,实习,后期有时间更)

文章目录 搭建后台管理系统模板项目的资源地址项目初始化2.1.1环境准备2.1.2初始化项目2.2项目配置一、eslint配置1.1vue3环境代码校验插件1.2修改.eslintrc.cjs配置文件1.3.eslintignore忽略文件1.4运行脚本 二、配置**prettier**2.1安装依赖包2.2.prettierrc.json添加规则2.3…

OpenCV——总结《车牌识别》

1.图片中的hsv hsv提取蓝色部分 # hsv提取蓝色部分 def hsv_color_find(img):img_copy img.copy()cv2.imshow(img_copy, img_copy)"""提取图中的蓝色部分 hsv范围可以自行优化cv2.inRange()参数介绍:第一个参数:hsv指的是原图第二个参…

阿里老员工吐槽:部门来了个“卷”王同事,我们都要跟着加班..

随着IT互联网热愈演愈烈,大批应届生选择毕业后进入IT圈,还有另一批打工人冲着高薪福利待遇转行IT行业,越来越多人涌入程序员大军中。加之互联网行业的火爆,催生了大量程序员岗位,门槛也较之前来说越来越低了&#xff0…

Python采集商品数据信息,看看一般怎样销量会多

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 环境使用: python 3.8 >>>>>> 运行代码 pycharm 2022.3 >>>>>> 辅助敲代码 模块使用: selenium >>> pip install selenium3.141.0 指定版本安装 <模拟人的行为去操…

《论文阅读07》Segment Anything in 3D with NeRFs

一、论文 研究领域&#xff1a;图像分割(3D)论文&#xff1a;Segment Anything in 3D with NeRFsSubmitted on 24 Apr 2023 (v1), last revised 1 Jun 2023 (this version, v3)Computer Vision and Pattern Recognition (cs.CV)nvos数据集论文链接 二、论文概要 三、全文翻译 …

通用vs垂直?热门AI大模型你更看好哪个?(附免费资源)

自ChatGPT发布以来&#xff0c;通用大模型就仿佛坐了火箭&#xff0c;短短几个月的时间&#xff0c;各大企业便争相发布自己的大模型&#xff0c;这其实也反应了目前人工智能发展的方向。 不过从长远来看&#xff0c;垂直领域大模型的发展会比通用大模型更具势头&#xff0c;一…

Java线程面试题

0. Java线程面试题 0.1 线程占用的内存 JDK1.4默认单个线程占用256KJDK1.5默认单个线程占用1M可以通过-Xss参数设定 0.2 为什么要使用线程池 手动创建线程池的缺点 不受风险控制&#xff1a;服务器CPU资源有限&#xff0c;如果每个人都显示手动创建线程&#xff0c;不知道哪…

Office远程代码执行漏洞(CVE-2017-11882)漏洞复现

Office远程代码执行漏洞&#xff08;CVE-2017-11882&#xff09;漏洞复现 1.漏洞原理2.在Kali平台查看漏洞利用文件3.登录目标靶机&#xff0c;打开FTP服务器4.登录Kali&#xff0c;利用FTP服务器上传payload-cale.doc文件5.登录目标靶机&#xff0c;触发doc文件&#xff0c;验…

虚函数,抽象基类

编译器处理虚函数的方法&#xff1a; 给每个对象添加一个隐藏成员&#xff0c;隐藏成员保存了一个指向函数地址的数组指针&#xff0c;数组被称为虚函数表&#xff0c;虚函数表存储了为类对象声明的虚函数的地址&#xff0c;比如基类包含一个指针&#xff0c;该指针指向基类中…

阿里巴巴变革,盒马“一马当先”

配图来自canva可画 随着数字经济成为当前经济社会发展的“新宠”&#xff0c;诸多数字企业也开始走上了发展的快车道。而作为国内互联网大厂的阿里巴巴集团&#xff0c;为了打造数字经济时代的商业、金融、物流、云计算和大数据等新一代商业基础设施&#xff0c;就于前不久启动…

Javawed第一章:Web前端的入门理论

目录 前言 一.wed &#x1f496;wed是什么&#xff1f; &#x1f496; wed的分类 二.HTML 和 CSS &#x1f496;HTML的介绍 HTML的标签 &#x1f496;CSS的介绍 常用基本标签 &#x1f496;实践 HTML结构标签特点 三.JavaScript &#x1f496;JavaScript的介绍 &…

SOLIDWORKS仿真数据清扫工具

我们来聊下SOLIDWORKS仿真数据清扫工具。与 SOLIDWORKS 软件一起安装的一个鲜为人知的工具是 Simulation Cleaning Utility。该实用工具可用于在 SOLIDWORKS 零件或装配文件中永远删除任何仿真数据&#xff0c;包括仿真设置和后处理信息。 SOLIDWORKS仿真数据清扫工具工具可以…

阻塞队列(消息队列)

1、阻塞队列 队列是一种先进先出的数据结构。而阻塞队列也是一种特殊的队列&#xff0c;也遵守”先进先出“的原则。 阻塞队列是一种线程安全的的数据结构&#xff0c;并且具有以下特性&#xff1a; 1、队列往进写元素是从队尾插入&#xff0c;队首取出 2、当插入元素的时候…