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

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.hqwc.cn/news/1710.html

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

相关文章

螺杆支撑座要怎么选?

螺杆支撑座是连接螺杆和电机的轴承固定座,使用螺杆支撑座可以获得高刚性、高精度的稳定的回转性能,这也是大部分厂商愿意使用的原因之一。 目前,市面上做螺杆支撑座的品牌还比较少,给大家选择的空间也不多,那么我们如何…

mysql 常见锁类型

表锁 & 行锁 在 MySQL 中锁的种类有很多,但是最基本的还是表锁和行锁:表锁指的是对一整张表加锁,一般是 DDL 处理时使用,也可以自己在 SQL 中指定;而行锁指的是锁定某一行数据或某几行,或行和行之间的…

Springboot使用pdfbox提取PDF图片

Springboot使用pdfbox提取PDF图片 PDFBox的介绍Springboot集成PDFBox一、提取pdf首页为图像1. 实现需求2. 项目代码3. 执行结果 二、将pdf内容全部转换为图像1. 实现需求2. 项目代码3. 执行结果4.注意事项1.优化项目代码2.提升Java heap size PDFBox的介绍 PDFBox是一个用于创…

网络安全系统教程+学习路线(自学笔记)

一、什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面…

使用ganymed-ssh2连接linux报错 Cannot negotiate, proposals do not match

ganymed-ssh2连接linux报错 背景报错信息解决方案:运行成功 背景 最近有个项目,需要在Linux下的服务器内写了一部分Python脚本,业务处理却是在Java内,那么就想能不能在Java里面,来远程执行Linux下的Python脚本&#x…

css用法总结

1. 块级元素合并时边框重叠问题的解决方案 设置边框2px 红色 如果不做处理,仅仅添加边框则会是这个样子 设置处理后的样式 代码展示 2. 拥有边框的div , hover时的展示效果 代码展示 3. img 和 文字环绕展示 代码展示 设置左浮动即可 4. text-align: center; 可…

Video-LLaMa:利用多模态增强对视频内容理解

在数字时代,视频已经成为一种主要的内容形式。但是理解和解释视频内容是一项复杂的任务,不仅需要视觉和听觉信号的整合,还需要处理上下文的时间序列的能力。本文将重点介绍称为video - llama的多模态框架。Video-LLaMA旨在使LLM能够理解视频中…

MySQL主从复制与读写分离

MySQL主从复制与读写分离 一、读写分离1、什么是读写分离2、为什么要读写分离3、什么时候要读写分离 二、主从复制1、主从复制与读写分离2、MySQL支持的复制类型3、主从复制的工作过程4、MySQL读写分离原理5、常见的MySQL读写分离5.1 基于程序代码内部实现5.2 基于中间代理层实…

推或拉? rabbitMQ 消费模式该如何选择

系列文章目录 消息队列选型——为什么选择RabbitMQ RabbitMQ 五种消息模型 RabbitMQ 能保证消息可靠性吗 文章目录 系列文章目录前言一、推拉两种模式的概念二、推模式的使用及优势1. 使用2. 优劣 三、拉模式的使用及优势1. 使用2. 优劣 四、消费端Ack模式与Qos1. Ack模式2. Q…

RobotFramework +appium实现Android自动化

环境准备 1、已安装python37版本(SDK、JDK均已安装完成,且环境变量都配置好了)。 2、已安装robotframework。 3、已安装安卓模拟器(本文使用夜神模拟器)。 4、安装appium(下载地址:http://6…

HOT19-螺旋矩阵

leetcode原题链接:螺旋矩阵 题目描述 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]示例…

NAPT之NAT地址池、NAPT之easy-ip、NAT-Server

NAPT之NAT地址池 拓扑 需求 实现企业内网主机(PC1-PC4)访问公网网站服务器(Server1) 配置步骤 第一步:给PC1-PC4/Server1配置接口IP地址,掩码,网关 第二步:R1配置默认路由 -边界…