前言
记录一下linux提权系列的Crontab计划任务提权的学习过程。
crontab 命令
crontab命令用来定期执行程序。
-e 编辑当前的crontab文件,默认保存在/var/spool/cron/用户名下
-r 删除目前的时程表
-l 列出目前的时程表
语法格式
分 时 日 月 周 需要执行的命令
分:0~59
时:0~23
日:1~31
月:1~12
周:0~6 #0代表周日
*:(星号)代表取值范围中的每一个数字
-:(减号)连续区间表达式,想要代表1~7,则需要写成1-7
/:(斜杠)表示每x个。例如想在每10分钟执行一次,则在分的位置写:*/10
,:(逗号)表示多个取值。如果想在1点,3点,5点执行一次,则在时的位置写:1,3,5
如:
*/2 * * * * echo `date` >> /tmp/stu01
表示每两分钟输出时间到/tmp/stu01文件。

/var/spool/cron/user 用来区分每个用户自己的执行计划
而 /etc/crontab 表示系统执行计划,需要在五个*后面加上用户
如编辑/etc/crontab 文件

如添加
*/1 * * * * root ls />> /tmp/cron
表示每分钟执行ls命令并输出到/tmp/cron 文件。
其余关于计划任务的文件
/etc/cron.deny 表示只拒绝哪些用户不能他用crontab,默认存在空文件
/etc/cron.allow 表示只允许哪些用户使用crontab
漏洞介绍
Crontab通常以root权限运行。如果可以成功篡改在定时任务执行的任何脚本或二进制文件,那么我们可以使用root权限执行任意代码。
漏洞利用
假如root用户配置不当,在/etc/crontab文件创建了一个计划任务。

意为每分钟执行test.sh文件并输出到/tmp/test.txt文件。
下载 pspy工具 到目标环境。
该工具无需root权限即可监听进程。

监听发现该指令以root权限运行。
查看该test.sh文件以cseroad用户身份运行。

我们可以通过覆盖test.sh文件提升为root权限。
echo "cp /bin/bash /tmp/bash; chmod +s /tmp/bash" >> test.sh
2 分钟后,tmp目录下会创建出SUID权限的bash。

/tmp/bash -p
即可获取root权限

总结
crontab计划任务不要写到/etc/crontab文件里,而是通过crontab -e去创建,让他写到默认的/var/spool/cron下。
网友评论