| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> java安全——ysoserial工具URLDNS链分析 -> 正文阅读 |
|
[网络协议]java安全——ysoserial工具URLDNS链分析 |
本篇我们将学习ysoserial工具的URLDNS链,相对于前面学习的CC链来说,URLDNS链就比较简单了。 URLDNS是ysoserial工具用于检测是否存在Java反序列化漏洞的一个利用链,通过URLDNS利用链可以发起一次DNS查询请求,从而可以验证目标站点是否存在反序列化漏洞,并且该利用链任何不需要第三方依赖,也没有JDK版本的限制。 但是URLDNS利用链也只能用于发起DNS查询请求,也不能做其他事情,因此URLDNS链更多的是用于POC检测。 有了前面的基础,这里直接上URLDNS链的代码(URLDNS链环境为jdk1.8版本):
执行程序后,URLDNS链会发送一次DNS查询的请求操作,这样我们就可以通过DNSLog平台的回显的信息来判断目标是否存在反序列化漏洞 ?URLDNS链的入口是hashMap的readObject方法
hashMap调用readObject方法在反序列化时会先计算key的hash值,然后再调用putVal方法把键值对放入到hashMap中,还原对象。 hash方法内部会调用key的hashCode方法,这里的key值其实是URLDNS链中构造的url对象
key.hashCode操作实际上是调用了url对象的hashCode,判断url对象的hashCode值是否为-1,如果hashCode属性的值不为-1,说明hashCode其实已经有值了,那么会直接返回哈希值。
在构造URLDNS链的时候,我们通过反射将hashCode成员属性的值改回了-1
因此这里会继续往下执行,调用handler的hashCode方法(实际上是调用了URLStreamHandler类的hashCode方法)。 URLStreamHandler类的hashCode方法内部调用了一个getHostAddress方法获取url地址,这一步会触发DNS查询请求
我们继续跟进getHostAddress方法,可以看到内部调用了一个getByName方法,这个方法会根据url地址返回一个ip地址,也就是说getByName方法会发送一个DNS查询请求。 其实前面构造URLDNS链时,将url对象的hashCode属性的值改回-1的目的是为了调用InetAddress.getByName方法。 URLDNS利用链的调用过程如下 参考资料: https://xz.aliyun.com/t/9417 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 23:38:02- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |