以前一直以为sudo命令就是以root权限执行命令,打了HACKSUDO: THOR靶场才发现原来sudo还可以有很多别的用法。
sudo的常用参数:
-u
:指定以特定用户的身份执行命令,格式为-u username
。-g
:指定以特定用户组的身份执行命令,格式为-g groupname
。-l
:列出当前用户可以执行的命令列表。-s
:以 shell 的环境执行命令。-b
:在后台执行命令,即使没有启动新的 shell。-H
:将 HOME 环境变量设置为目标用户的 HOME 目录。-n
:在需要密码时不要求输入密码,如果密码过期,该参数将不会起作用。-i
:以目标用户的环境变量执行命令,即保持环境变量不变。-k
:使sudo
忽略之前缓存的认证信息,强制要求重新输入密码。-V
:显示sudo
版本信息。-h
:显示帮助信息。
在HACKSUDO: THOR靶场中,我以www-data的身份执行了sudo -l 得到如下输出:
User www-data may run the following commands on HackSudoThor:(thor) NOPASSWD: /home/thor/./hammer.sh
由于之前习惯性地认为sudo -l 输出的一定是可以免密以root权限执行的程序或指令,所以不能理解为什么执行不了/home/thor/hammer.sh。
后面查看攻略才发现,原来这里给的是thor的权限,而sudo命令也不是只可以用来以root权限执行命令,用sudo -u username就可以以其他用户身份执行命令了。
所以这里使用:
sudo -u thor /home/thor/hammer.sh
就可以以thor的权限执行/home/thor/hammer.sh了,而这个程序实际上就是用thor的权限任意执行一条命令,于是再以thor的身份执行sudo -l 得到输出:
User thor may run the following commands on HackSudoThor:(root) NOPASSWD: /usr/bin/cat, /usr/sbin/service
这里可以看到,thor可以免密以root权限使用cat和service,而在GTFOBins查找后发现root 权限的service可以用来提权,即:
sudo service ../../bin/sh
执行后获得root权限。