Java安全之URLDNS链

Java安全之URLDNS链0x00前言在学习Java的反序列化漏洞的时候,就不得不学习他的一个利用链。很多刚刚入门的对于利用链这个词可能比较陌生。那么这里先来了解一下Java反序列化和反序列化

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

Java安全之URLDNS链

0x00 前言

在学习Java的反序列化漏洞的时候,就不得不学习他的一个利用链。很多刚刚入门的对于利用链这个词可能比较陌生。那么这里先来了解一下Java反序列化和反序列化漏洞的一个产生。

文章首发:Java安全之URLDNS链

0x01 Java反序列化

Java提供了一种对象序列化的机制,用一个字节序列表示一个对象,该字节包含对象的数据、对象的类型、对象的存储属性。字节序列写出到文件后,相当于可以持久报错了一个对象信息,这过程叫做序列化。序列化对象会通过ObjectOutputStream writeObject方法将一个对象写入到文件中。

而反序列化是使用了readObject 方法进行读取并还原成在序列化前的一个类。

这一步骤并没有什么安全问题,但是如果反序列化的数据是可控的情况下,那么我们就可以从某个输入点,输入恶意代码,再去查找在哪个点,我们的输入会被一层一层的带去到我们的触发点去,而这一步叫做寻找利用链的步骤。

0x02 动态调试ysoserial

至于ysoserial就不多叙述了,自行百度。

ysoserial项目地址:ysoserial

拉取项目源码,导入到IDEA中。

Java安全之URLDNS链

看到pom.xml知道该项目是个maven的项目,点击pom.xml 进行刷新,将缺少的依赖给下载下来

Java安全之URLDNS链

下载完成,直到不爆红了后,就可以开始调试ysoserial了。

先来查找一下该程序的入口点,点开pom.xml搜索mainclass就可以找到入口点的类

Java安全之URLDNS链

ctrl+左键点击跟踪进去,运行测试一下。

Java安全之URLDNS链

Java安全之URLDNS链

运行发现爆了一些错误,这里是因为我们并没有去传入值。

Java安全之URLDNS链

点击Edit configurations,设置参数

Java安全之URLDNS链

再次运行就可以看到成功执行了。

Java安全之URLDNS链

这样我们就获取到了一个序列化的数据。

我们的ysoserial就能在idea里面去运行了。

0x03 URLDNS链分析

URLDNS是ysoserial里面就简单的一条利用链,但URLDNS的利用效果是只能触发一次dns请求,而不能去执行命令。比较适用于漏洞验证这一块,而且URLDNS这条利用链并不依赖于第三方的类,而是JDK中内置的一些类和方法。

在一些漏洞利用没有回显的时候,我们也可以使用到该链来验证漏洞是否存在,比如shiro反序列化就是使用dnslog来验证漏洞是否存在,(盲猜的,并没有去分析过,后面可以去分析一下)。

下面先来使用ysoserial的URLDNS

 java -jar .\ysoserial.jar URLDNS "http://2mdw9p.dnslog.cn"

Java安全之URLDNS链

得到序列化后的数据,如果需要执行,我们需要对其进行反序列化,这里先不执行。先来看看在ysoserial中,该数据是怎么获取的。

打开ysoserial/payloads/URLDNS.java的源码

Java安全之URLDNS链

上面的注释也写明白了他的调用链

Java安全之URLDNS链

具体怎么执行的我们还得去debug看。

触发点在hashmap的put方法,我们在put地方打一个断点

Java安全之URLDNS链

来到hashmap的readobject中看到

Java安全之URLDNS链

这里使用了hash方法对key的值进行了处理,我们来跟踪一下hash这个方法看看他具体的实现

Java安全之URLDNS链

这里的key的是java.net.URL的实例对象调用了key的hashcode。再跟进一下他的hashcode方法。

Java安全之URLDNS链

Java安全之URLDNS链

在hashcode方法中还调用了handler的hashcode。先来跟踪一下hanler

Java安全之URLDNS链

调用 URLStreamHandler 的hashcode。进行跟踪URLStreamHandler.hashcode。

Java安全之URLDNS链

跟进一下getProtocol方法

Java安全之URLDNS链

在jdk的api文档里面写着该方法是用来获取协议的名称的

Java安全之URLDNS链

回到刚刚的地方

Java安全之URLDNS链

再来跟踪一下getHostAddress

Java安全之URLDNS链

来到这里后,可以发现会调用getHostgetByName这两个方法。

JDKapi文档查看 InetAddress.getByName方法

Java安全之URLDNS链

该方法会使用远程请求,进行获取主机的ip,那么这时候就会触发一次请求,到了这里我们的dnslog平台,就可以收到响应了。这就是这个URLDNS链的一个触发点。

调用链:

HashMap.readObject() ->  HashMap.putVal() -> HashMap.hash() 
-> URL.hashCode()->URLStreamHandler.hashCode().getHostAddress
->URLStreamHandler.hashCode().getHostAddress
->URLStreamHandler.hashCode().getHostAddress.InetAddress.getByName

下面来测试一下

import java.io.*;

public class main {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        FileInputStream fis = new FileInputStream("out.bin");
        ObjectInputStream bit = new ObjectInputStream(fis);
        bit.readObject();
    }
}

执行后再看我们的dnslog平台

Java安全之URLDNS链

在URLDNS里面其实导致反序列化的根本原因是因为hashmap重写了readobject反序列化方法,而重写后的readobject方法调用了putVal导致的一个利用链

参考文章

https://www.cnblogs.com/kuaile1314/p/13690210.html
https://www.cnblogs.com/ph4nt0mer/p/11994384.html
https://www.cnblogs.com/v1ntlyn/p/13549991.html
https://zhuanlan.zhihu.com/p/30045174
https://www.cnblogs.com/litlife/p/12596286.html

0x04 结尾

其实调试URLDNS这条链相对来说是比较简单的,虽然前面也花了不少时间去摸索,参考了大量的文章。但是等明白了后,发现其实URLDNS链还是比较简单的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/119911.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Eclipse颜色主题插件:Eclipse Color Theme建议收藏

    一个很赞的eclipse插件,可以简单方便地实现eclipse下的代码配色。另外插件作者还专门为此插件做了一个eclipse配色网站,配色多达728个,开发者们也可以在此网站分享自己的配色方案。插件设

    2021年12月20日
  • 可重入锁详解(什么是可重入)

    可重入锁详解(什么是可重入)可重入锁详解概述什么是“可重入”,可重入就是说某个线程已经获得某个锁,可以再次获取锁而不会出现死锁。例如packagecom.test.reen;//演示可重入锁是什么意思,可重入,就是可以重复获取相同的锁,synchronized和ReentrantLock都是可重入的//可重入降低了编程复杂性publicclassWhatReentrant{ publicsta…

  • 安卓手机转移数据到iOS_如何把旧电脑的资料转移到新电脑

    安卓手机转移数据到iOS_如何把旧电脑的资料转移到新电脑很多小白对“转移到iOS”应用程序不是非常熟悉,当购买了新iPhone之后不清楚如何从旧Android转移数据,那么一般来说分为几个步骤呢?现在从Android智能手机转移到iPhone比以前容易多了,这要归功于苹果早前发布的“转移到iOS”应用程序。下面小编带来如何把旧Android数据转移到iOS上,把旧Android数据转移到iOS教程。一起来看看吧!前期准备1、首先,…

  • 不一样的春节思维导图的内容_电学思维导图

    不一样的春节思维导图的内容_电学思维导图春节是我国四大传统节日之一,可以算是历史之悠久。但随着社会的发展,春节期间的年味渐渐的没那么浓烈了,以前大家聚在一起守岁、放鞭炮等,而现在大多数人都是抱着电子产品谁也不搭理谁。以往的习俗简而又简,后出

  • 伽马校正和颜色空间

    伽马校正和颜色空间一、伽马校正所谓gamma校正,实际上是一个颜色的非线性曲线变换。下面来解释这个曲线存在的原因。1.1人眼的非线性视觉效应为什么要有gamma校正了。一言以蔽之,人眼的生理效应。如下图所示,第一行是人眼感受到的线性亮度变化,第二行是真实的非线性亮度变化。可以得出结论,首尾两端是一致的,但是中间值变化不一致;真实的中间亮度值必须更大,才能得到人眼感知的线性亮度变化。我们的目的是让人眼感受到线性的亮度变化曲线,因此输入亮度必须是第二行这种非线性的亮度变化曲线。第二行的亮度变化曲线,就是伽马校正曲线

  • pycharm永久激活码2021_最新在线免费激活

    (pycharm永久激活码2021)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~S32PGH0SQB-eyJsaWNlbnNlSWQiOi…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号