
Venom - Многошаговый прокси для тестировщиков на проникновение
Venom — это многоуровневый прокси-инструмент, написанный на Go, предназначенный для специалистов по тестированию на проникновение.
Venom позволяет соединять несколько узлов, используя их как перемычки для построения многоуровневого прокси.
Специалисты по пентесту могут легко маршрутизировать сетевой трафик через несколько внутренних сетей и управлять прокси-узлами.
Этот инструмент предназначен исключительно для исследований в области безопасности и обучения. Пользователь несет полную ответственность за все юридические и связанные с этим последствия, возникающие в результате использования данного инструмента! Автор не несет никакой юридической или иной ответственности!
Поскольку устройства IoT (архитектуры arm/mips/...) обычно имеют ограниченные ресурсы, для уменьшения размера двоичного файла в скомпилированных для IoT версиях отключены функции повторного использования портов и SSH-туннелей, а также ограничены количество одновременных соединений и размер буфера для снижения потребления памяти.
Вы можете напрямую скачать скомпилированные исполняемые файлы из релиза.
Если вы хотите скомпилировать проект из исходного кода, необходимо установить go >= 1.11, а затем выполнить следующие команды:
go get -u github.com/Dliv3/Venom/...
# $GOPATH — это переменная окружения, заданная при установке Go, её можно проверить через go env
cd $GOPATH/src/github.com/Dliv3/Venom
# Скомпилированные двоичные файлы помещаются в папку release в текущей директории
./build.sh
Видео-демонстрация на YouTube: https://www.youtube.com/playlist?list=PLtZO9vwOND91vZ7yCmlAvISmEl2iQKjdI
Узлы admin и agent могут как прослушивать соединения, так и инициировать их
Admin прослушивает порт, agent инициирует соединение:
./admin_macos_x64 -lport 9999
./agent_linux_x64 -rhost 192.168.0.103 -rport 9999
Agent прослушивает порт, admin инициирует соединение:
./agent_linux_x64 -lport 8888
./admin_macos_x64 -rhost 192.168.204.139 -rport 8888
Узел agent поддерживает повторное использование портов
Agent предоставляет два метода повторного использования портов:
С помощью функции повторного использования портов Venom можно повторно использовать порты сервисов Apache, MySQL и других в Windows (но не RDP, IIS и некоторые другие), а в Linux — большинство сервисов. Повторно используемый порт продолжает нормально предоставлять свой оригинальный сервис.
Первый метод повторного использования портов
# Пример с Apache под Windows
# Повторно используем порт 80 Apache, не влияя на нормальную работу HTTP-сервиса
# -lhost указывает локальный IP узла; нельзя указывать 0.0.0.0, иначе повторное использование не сработает
./agent.exe -lhost 192.168.204.139 -reuse-port 80
./admin_macos_x64 -rhost 192.168.204.139 -rport 80
Второй метод повторного использования портов
# Пример с Apache под Linux
# Требуются права root
sudo ./agent_linux_x64 -lport 8080 -reuse-port 80
При этом методе на узле создаются правила iptables, перенаправляющие трафик с порта, указанного в -reuse-port, на порт -lport, а затем agent распределяет трафик.
Важно: если программа завершается по сигналу SIGTERM или SIGINT (kill или Ctrl-C), она автоматически удаляет правила iptables. Если agent убит через kill -9, правила не удаляются автоматически, так как agent не может обработать сигнал SIGKILL. В этом случае их нужно удалять вручную.
Чтобы избежать ситуации, когда правила iptables не удаляются автоматически и пентестер не может получить доступ к сервису порта 80, второй метод использует iptables -m recent для управления включением/выключением правил перенаправления с помощью специальных TCP-пакетов.
Реализация основана на https://threathunter.org/topic/594545184ea5b2f5516e2033
# Запуск agent с настройкой правил iptables на узле Linux
# Если rhost находится во внутренней сети, можно использовать SOCKS5-прокси для трафика скрипта (см. ниже)
python scripts/port_reuse.py --start --rhost 192.168.204.135 --rport 80
# Подключение к узлу agent
./admin_macos_x64 -rhost 192.168.204.135 -rport 80
# Отключение правил перенаправления
python scripts/port_reuse.py --stop --rhost 192.168.204.135 --rport 80
Шифрование связи между узлами
Venom предоставляет возможность шифрования связи между узлами. Пользователь может задать пароль с помощью опции -passwd, который используется для генерации ключа AES.
# Указание пароля dlive@dubhe через -passwd
./admin_macos_x64 -lport 8889 -passwd dlive@dubhe
# Agent указывает тот же пароль для подключения к узлу admin
./agent_macos_x64 -rhost 192.168.0.103 -rport 8889 -passwd dlive@dubhe
help — вывод справки
(admin node) >>> help
help Справка.
exit Выход.
show Отображение сетевой топологии.
getdes Просмотр описания целевого узла.
setdes [info] Добавление описания целевому узлу.
goto [id] Выбор узла с указанным id как целевого.
listen [lport] Прослушивание порта на целевом узле.
connect [rhost] [rport] Подключение нового узла через целевой узел.
sshconnect [user@ip:port] [dport] Подключение нового узла через SSH-туннель.
shell Запуск интерактивной оболочки на целевом узле.
upload [local_file] [remote_file] Загрузка файла на целевой узел.
download [remote_file] [local_file] Скачивание файла с целевого узла.
socks [lport] Запуск SOCKS5-сервера.
lforward [lhost] [sport] [dport] Перенаправление локального порта на удалённый порт.
rforward [rhost] [sport] [dport] Перенаправление удалённого порта на локальный порт.
show — отображение сетевой топологии
A — узел admin, цифры — узлы agent.
Пример топологии ниже показывает, что узел admin имеет подключённый узел 1, узел 1 имеет подключённые узлы 2 и 4, а узел 2 — узел 3.
(node 1) >>> show
A
+ -- 1
+ -- 2
+ -- 3
+ -- 4
Внимание: чтобы управлять новым узлом, сначала на узле admin выполните команду show для синхронизации топологии и идентификаторов узлов.
goto — переход к узлу
(admin node) >>> goto 1
(node 1) >>>
После перехода к узлу вы можете использовать команды, описанные ниже.
getdes/setdes — получение/установка описания узла
(node 1) >>> setdes linux x64 blahblahblah
(node 1) >>> getdes
linux x64 blahblahblah
connect/listen/sshconnect — соединение между узлами
Узел 1 подключается к порту 9999 на 192.168.0.103: