一、Linux提权
1、SUID提权
SUID(设置用户ID)是赋予文件的一种权限,它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。
为可执行文件添加suid权限的目的是简化操作流程,让普通用户也能做一些高权限才能做的的工作。但是如果某些现有的二进制文件和实用程序具有SUID权限的话,就可以在执行时将权限提升为root
命令:find / -perm -4000 -type f 2>/dev/null find / -perm -u=s
-perm -4000:查找权限为“4000”的文件,其中“4000”是表示suid权限的数字。
-type f:查找类型为文件的结果,而不是目录或其他类型的文件。
2>/dev/null:这个部分是重定向操作。2> 表示重定向标准错误(stderr),/dev/null 是一个特殊的设备文件,它丢弃所有写入其中的数据。因此,2>/dev/null 的作用是将 find 命令产生的任何错误消息丢弃,不在终端显示。
详细的核心原理:
SUID提权的原理与Linux进程的UID有关,进程在运行的时候有以下三个UID:
(A)Real UID:执行该进程的用户的UID。Real UID只用于标识用户,不用于权限检查。
(B)Effective UID(EUID):进程执行时生效的UID。在对访问目标进行操作时,系统会检查EUID是否有权限。一般情况下,Real UID与EUID相同,但在运行设置了SUID权限的程序时,进程的EUID会被设置为程序文件属主的UID。
(C)Saved UID:在高权限用户降权后,保留的UID。
如果某个设置了SUID权限的程序运行后创建了shell,那么shell进程的EUID也会是这个程序文件属主的UID,如果属主为root,便是一个root shell。root shell中运行的程序的EUID也都是0,具备超级权限,于是便实现了提权。
2、sudo
/etc/sudoers文件是sudo权限的配置文件,其中储存了一些用户或组可以以root权限使用的命令,如果可以写这个文件,就可以赋予普通用户sudo权限,然后就可以借助其他命令提权
可以利用sudo提权的命令如下:
wget、find、cat、apt、zip、xxd、time、taskset、git、sed、pip、ed、tmux、scp、perl、bash、less、vi
sudo find提权
find 命令用来在指定目录下查找文件,这里使用“exec”来执行/bin/bash,以访问root shell
sudo find /home -exec /bin/bash \;
其他的详细的命令:Linux提权——SUDO_sudo提权-CSDN博客
3、/etc/passwd 提权
这个需要对passwd有写入权限,正常root用户的uid为0,如果自己写进去一个用户把它的uid改为0的话,用这个用户登录,系统就会切到root用户了
4、内核提权漏洞
利用内核漏洞提取一般三个环节:
第一步:对目标系统进行信息收集,获取系统内核信息及版本信息【uname -a】
第二步,根据内核版本获取对应的漏洞以及exp
第三步,使用exp对目标进行攻击,完成提权
例子:
脏牛内核漏洞提权的原理:
在Linux内核的内存子系统处理私有只读内存映射的写时复制损坏的方式中出现了一种竞争状况,一个低权限的本地用户可以利用此漏洞获取对只读存储器映射的写访问权,所以有可能进一步导致提权漏洞。
5、Crontab定时任务提权
crontab 文件是计划任务的配置,此文件只有 root 可写,但是我们不需要去修改 crontab,只查看里面的有哪些任务,比如定时执行了哪些脚本,再查看对应脚本的权限,若可写,则将提权的代码写入这些脚本。
非 root 权限的用户是不可以列出 root 用户的计划任务的。但是 /etc/ 内系统的计划任务可以被列出,并且默认这些程序以 root 权限执行
cat /etc/crontab
6、docker 组提权
docker组用户提权,目的是利用docker组的用户来提权,因为docker组用户在容器下为root权限,通过挂载方式在容器下给本机添加sudo权限的用户,从而可以利用sudo命令。如果没有拥有sudo权限的用户,是无法执行sudo命令,在kali下会提示用户不在sudoers等提示。
7、环境变量劫持
PATH指定了存储可执行程序的所有bin和sbin目录。当用户在终端上执行任何命令时,它会通过PATH变量指定的路径去搜寻可执行文件
使用echo命令显示当前PATH环境变量:
echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
如果普通用户登陆上去之后,他的path目录下有可以执行的二进制文件,并且这个文件里面里面还有高权限的命令的时候,这时候我们执行这个命令就能获得高权限。
例子:如果可执行目录下面有下面这种代码,里面有危险函数
那么你执行他的话就能获得高权限。