【Java安全】ysoserial-URLDNS链分析

前言

Java安全中经常会提到反序列化,一个将Java对象转换为字节序列传输(或保存)并在接收字节序列后反序列化为Java对象的机制,在传输(或保存)的过程中,恶意攻击者能够将传输的字节序列替换为恶意代码进而触发反序列化漏洞。其中最经典的反序列化漏洞利用工具——ysoserial,下面就分析学习一下ysoserial中的URLDNS链,以便更好地理解反序列化漏洞。

ysoserial简单分析

下载ysoserialhttps://github.com/frohoff/ysoserial项目源码,导入IDEA,并在pom.xml中搜索mainclass,寻找程序的入口点
在这里插入图片描述在程序运行之前,先设置两个参数(URLDNS “http://xxxx.dnslog.cn”),否则运行IDEA会报错。
在这里插入图片描述简单分析一下 GeneratePayload 的main方法,首先会判断是否传入两个参数, 如果不是则打印帮助信息 ,是的话则对两个参数依次赋值为payloadType和command。接着实例化一个payloadClass对象,跟进一下getPayloadClass方法在这里插入图片描述
getPayloadClass会返回一个反射的class对象,该class对象为GeneratePayload的class对象的包名+字符串“payloads”+我们传入的第一个参数className(也就是payloadType)
在这里插入图片描述对应ysoserial中写好的URLDNS脚本,也就是说,我们传入的第一个参数是找到ysoerial的payload脚本。
在这里插入图片描述后续会实例化payloadClass,并调用getObject方法,传入我们传入的第二个参数command。跟进getObject方法中,分析传入command后,程序是如何处理的。

在这里插入图片描述

发现最终会跳转到URLDNS中
在这里插入图片描述

那么以上操作就是根据传入的参数,定位到利用链的类文件中,调用该类的 getObject方法,生成并返回paylaod。
URLDNS类我们先放到一边,继续分析 GeneratePayload 中的main方法。
在这里插入图片描述之后会调用 serialize方法,将URLDNS类中返回的值(生成的payload)序列化并打印输出。
在这里插入图片描述

URLDNS链分析

URLDNS为Java的原生类,利用效果只是触发一次DNS请求,并不会命令执行,适用于验证是否存在反序列化漏洞。
在URLDNS.java中,作者已经给出了Gadget chain
在这里插入图片描述我们先看第53行代码,首先声明了一个URLStreamHandler类,因为URLStreamHandler是个抽象类,不能够被实例化,因此创建了个URLStreamHandler的子类SilentURLStreamHandler。并实现父类URLStreamHandler的抽象方法openConnection。
在这里插入图片描述但为什么要重写getHostAddress方法呢,其实我们运用最简单粗暴的方法,将重写方法注释掉,对比没注释之前,有啥区别:区别在于,重写getHostAddress,在我们使用ysoserial生成payload时,不会触发payload,DNSLOG接收不到请求。即因为方法直接返回为Null,不会请求我们的hostAddress
在这里插入图片描述而且在URL.java中,handler被transient关键字修饰,在序列化对象的时候,handler属性不会被序列化。意味着重写的方法并不会带进我们的payload中,这样我们在触发反序列化漏洞时,getHostAddress并没有被重写,能够正常请求我们的网址。这也是我觉得很精妙的一个地方,写ysoserial的人真是个天才!太牛*了!
在这里插入图片描述然后查看HashMap类,发现HashMap实现了Serializable序列化接口
在这里插入图片描述重写了readObject方法
在这里插入图片描述在重写的readObject方法中,有调用putVal方法进行一个hash计算
在这里插入图片描述调试,跟进putVal方法, 参数key和value都为输入的dnslog地址

在这里插入图片描述继续跟进,这里注意(标重点),调用的是key.hashCode(),即HashMap的参数u,顺利的从HashMap.hash()跳转到URL.hashCode()。
在这里插入图片描述
这里hashCode()方法会对hashCode属性重新赋值
在这里插入图片描述这里调用了 URLStreamHandler 类的hashCode方法,参数(URL)u为传入的DNSLOG地址
在这里插入图片描述通过getProtocol方法,获取 协议类型——http
在这里插入图片描述接下来这里进行一个if判断,h的值会加上portocal的hashCode()方法的返回值,跟进protocol.hashCode()方法
在这里插入图片描述继续往下调试
在这里插入图片描述最后将(String)http的hash值经过一系列的运算赋值给h。
在这里插入图片描述继续跟进,调用了getHostAdress方法
在这里插入图片描述查看getHostAdress,先后调用getHost()、getByName()两个方法,最终是通过getByName(getHost())去发送dnslog请求
在这里插入图片描述 分析到这里,dnslog就接收到了请求信息

结论

因为HashMap实现了Serializable接口,重写了readObject方法,导致在接下来调用hashCode时,能够成功通过hashCode()方法,一步一步调用URL.getHostAddress,进而发起远程请求触发dnslog。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ideal打包,如何访问项目根目录的libs中的jar包

参考&#xff1a;idea maven 导入lib中jar 并打包_maven引入lib中的jar包-CSDN博客 解决办法&#xff0c;只需要在pom文件中加入 <includeSystemScope>true</includeSystemScope> <build><!-- <includeSystemScope>true</includeSystemScope&g…

Matlab数据快速处理指南

文章目录 Excel文件转Mat或工作区从Excel文件读取数据并转换为.mat文件从Excel文件读取数据并加载到工作区 Mat文件转ExcelExcel快速实现万行级填充各种数据类型的操作创建结构体访问结构体字段修改结构体字段的值添加新字段删除字段遍历结构体字段 Excel文件转Mat或工作区 在…

Java中JVM常用参数配置(提供配置示例)

目录 前言一、内存参数配置二、垃圾收集器配置三、GC策略配置3.1、基础通用配置3.2、Parallel 和 Parallel Old 常用参数配置3.3、CMS 常用参数配置3.4、G1 常用参数配置 四、GC日志配置五、dump 日志参数配置5.1、OutOfMemory异常时生成dump文件5.2、发生Full GC时生成dump文件…

《Git 简易速速上手小册》第1章:Git 基础(2024 最新版)

文章目录 1.1 Git 简介&#xff1a;版本控制的演变1.1.1 基础知识讲解1.1.2 重点案例&#xff1a;协作开发流程优化案例&#xff1a;功能开发与分支策略 1.1.3 拓展案例 1&#xff1a;代码审查与合并1.1.4 拓展案例 2&#xff1a;冲突解决 1.2 安装和配置 Git&#xff1a;首次设…

WebSocket基础详解

文章目录 前言由来简介优缺点适用场景兼容性 API介绍构造函数实例方法send()close() 实例属性ws.readyState&#xff08;只读&#xff09;ws.bufferedAmount&#xff08;只读&#xff09;ws.binaryTypeextensions&#xff08;只读&#xff09;protocol&#xff08;只读&#xf…

React+Antd实现表格自动向上滚动

1、效果 2、环境 1、react18 2、antd 4 3、代码实现 原理&#xff1a;创建一个定时器&#xff0c;修改表格ant-table-body的scrollTop属性实现滚动&#xff0c;监听表层的元素div的鼠标移入和移出实现实现鼠标进入元素滚动暂停&#xff0c;移出元素的时候表格滚动继续。 一…

VXLAN网关技术及应用实例详解

1.特性概述 VXLAN是VLAN扩展方案草案&#xff0c;是NVo3中的一种网络虚拟化技术。采用MAC in UDP封装方式&#xff0c;将二层报文用三层协议进行封装&#xff0c;可对二层网络在三层范围进行扩展&#xff0c;同时支持24bits的VNIID ( 16M租户能力&#xff09;&#xff0c;满足…

项目02《游戏-09-开发》Unity3D

基于 项目02《游戏-08-开发》Unity3D &#xff0c; 本次任务是做抽卡界面&#xff0c;获取的卡片增添在背包中&#xff0c;并在背包中可以删除卡片&#xff0c; 首先在Canvas下创建一个空物体&#xff0c;命名为LotteryPanel&#xff0c;作为抽卡界面&#xff0c; …

华视 CVR-100UC 身份证读取 html二次开发模板

python读卡&#xff1a;python读卡 最近小唐应要求要开发一个前端的身份证读卡界面&#xff0c;结果华视CVR-100UC 的读取界面是在是有点&#xff0c;而且怎么调试连官方最基本的启动程序都执行不了。CertReader.ocx 已成功&#xff0c;后面在问询一系列前辈之后&#xff0c;大…

探索设计模式的魅力:设计之美-揭秘设计模式、原则与UML的魔法

设计模式专栏&#xff1a;http://t.csdnimg.cn/U54zu 目录 一、引言 二、设计模式与设计原则 设计模式 设计原则 三、面向对象设计原则 四、UML&#xff08;统一建模语言&#xff09; 4.1 UML是什么 UML是一种语言 UML是一种建模语言 UML是一种图形化语言 4.2 UML有什么 4.…

使用 git 上传文件时,运行 命令 git pull origin 时未成功,出现报错信息

项目场景&#xff1a; 背景&#xff1a; 使用 git 上传文件时&#xff0c;运行 命令 git pull origin 时未成功&#xff0c;出现报错信息 问题描述 问题&#xff1a; $ git pull origin print --allow-unrelated-histories error: Pulling is not possible because you hav…

蓝桥杯刷题day08——完全日期

1、题目描述 如果一个日期中年月日的各位数字之和是完全平方数&#xff0c;则称为一个完全日期。 例如&#xff1a;2021年6月5日的各位数字之和为20216516&#xff0c;而16是一个完全平方数&#xff0c;它是4的平方。所以2021年6月5日是一个完全日期。 请问&#xff0c;从200…

Maven详细配置整理

Maven的作用 在Javaweb开发中&#xff0c;需要使用大量的jar包&#xff0c;需要手动去导入&#xff0c;Maven能够自动帮我们导入和配置这个jar包。 对于新手Maven就是用来方便导入jar包的&#xff01; Maven的核心思想&#xff1a;约定大于配置 有约束&#xff0c;不要去违…

51 -25 Scene as Occupancy 3D占用作为场景表示 论文精读

本文阅读的文章是Scene as Occupancy&#xff0c;介绍了一种将物体表示为3D occupancy的新方法&#xff0c;以描述三维场景&#xff0c;并用于检测、分割和规划。 文章提出了OccNet和OpenOcc两个核心概念。 OccNet 3D占用网络是一种以多视图视觉为中心的方法&#xff0c;通过…

【TCP】高频面试题

前言 在IT行业的求职过程中&#xff0c;传输控制协议&#xff08;TCP&#xff09;作为网络通信的核心协议之一&#xff0c;其相关面试题常常出现在各大公司面试中。TCP的稳定性和可靠性是支撑互联网数据传输的基石&#xff0c;因此&#xff0c;对TCP有深入理解不仅能够帮助求职…

【自然语言处理-工具篇】spaCy<1>--介绍及安装指南

目录 前言 安装指南 pip conda spaCy升级 总结 前言 spaCy是一个开源的自然语言处理库,用于处理和分析文本数据。它提供了许多功能,包括分词、词性标注

机器学习系列——(十三)多项式回归

引言 在机器学习领域&#xff0c;线性回归是一种常见且简单的模型。然而&#xff0c;在某些情况下&#xff0c;变量之间的关系并不是线性的&#xff0c;这时候我们就需要使用多项式回归来建模非线性关系。多项式回归通过引入高次项来扩展线性回归模型&#xff0c;从而更好地拟…

6-3、T型加减速单片机程序【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;根据前两节内容&#xff0c;已完成所有计算工作&#xff0c;本节内容介绍具体单片机程序流程及代码 一、程序流程图 根据前两节文章内容可知&#xff0c;T型加减速的关键内容是运动类型的判断以及定时…

网络空间内生安全数学基础(2)——编码信道数学模型

目录 &#xff08;零&#xff09;这篇博客在干什么&#xff08;一&#xff09;内生安全与香农信道编码定理&#xff08;二&#xff09;基本定义&#xff08;三&#xff09;编码信道存在定理&#xff08;三.壹&#xff09;编码信道存在第一定理&#xff08;三.贰&#xff09;编码…

用例图(Use Case Diagram)

一、定义 用例图是从用户角度描述系统功能&#xff0c;是用户所能观察到的系统功能的模型图。 用例图是描述参与者与用例、用例与用例间关系的图。 用例图多用于 静态建模 阶段(主要是业务建模和需求建模)。 二、用例图构成 参与者(Actor)用例(Use Case)关联关系(Associatio…