JAVA反序列化漏洞-ysoserial-URLDNS链分析

一、前言

  对于进行反序列化漏洞原理的学习,URLDNS这条链比较好理解,对后续学习打个基础,URLDNS也是经常用于验证Java反序列化漏洞是否存在,验证服务主机是否出网等情况,为了后期进一步有效性的利用。让我们开始学习吧!

二、URLDNS利用链复现

2.1 利用链

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

2.2 利用过程

  java.util.HashMap实现了Serializable接口,重写了readObject, 在反序列化时会调用hash函数计算key的hashCode,而java.net.URL的hashCode在计算时会调用getHostAddress来解析域名, 从而发出DNS请求。

2.3 利用过程原理详解

  我们通过查看HashMap源码我们可以发现,继承Serializable,HashMap是可以进行序列化的,这先满足最基本的要求。

在这里插入图片描述
在这里插入图片描述

  HashMap重写了readObject方法,就可以深入看readObject方法调用了哪些可以利用的点。
在这里插入图片描述

  readObejct方法会调用putVal(hash(key)),hash传递key值,会执行key的hashCode()方法,所以如果这里传递的是URL对象,就会执行URL对象的hashCode方法。
在这里插入图片描述
在这里插入图片描述

  那我们来看看java.net.URL类的hashCode方法是怎么实现DNS解析的。URL的hashCode会调用getHostAddress,getHostAddress会一步步调用到getAddressesFromNameService方法,循环调用nameService的lookupAllHostAddr方法,直到找到地址,lookup就是进行DNS解析,这样当执行了URL的hashCode方法就会进行DNS请求,就是整个源码调用步骤。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.4 构造poc

import java.io.
  • 28
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值