
Rosemary: Кроссплатформенный пивотинг на уровне ядра через QUIC. Без TUN/TAP. Без proxychains. Без настроек прокси.
Кроссплатформенная платформа для пивотинга на уровне ядра поверх QUIC. Без TUN/TAP. Без proxychains. Без настроек прокси.
Rosemary прозрачно перехватывает трафик на удалённых хостах на уровне ядра: без настроек прокси, без устройств TUN/TAP, без proxychains. Агенты подключаются к серверу через QUIC. Вы получаете доступ ко всей удалённой сети так, как если бы находились в ней напрямую.
Запустите сервер на своей машине и разверните агента на любом удалённом хосте. Агент подключается обратно через QUIC, сервер устанавливает правила перехвата на уровне ядра для подсетей агента, и с этого момента весь трафик к этим подсетям, включая DNS, прозрачно перенаправляется через агента — без настройки прокси, без TUN-устройства, без изменения DNS-настроек и без изменений в ваших приложениях.
curl http://192.168.1.50 ───► agent dials 192.168.1.50 and bridges it back
ssh [email protected]
ping 192.168.1.1
Подключайте несколько агентов одновременно — трафик автоматически направляется через того агента, которому принадлежит целевой адрес.
Агент работает на всех указанных платформах. На стороне агента root не требуется.
Интерактивный сетевой граф, показывающий подключённых агентов и их взаимосвязи
Подробная информация об агентах: ОС, имя хоста, подсети и статус подключения
Браузерное расширение для быстрого доступа и маршрутизации трафика через туннель
Установка:
chrome://extensions/extension/ из репозиторияЗначок расширения появится на панели инструментов браузера.
Примечание: В представлении графа агенты автоматически размещаются и визуализируются связи между подсетями. Рёбра между агентами указывают на общие подсети, что обеспечивает визуализацию многоходового пивотинга.
# Install via go install
go install github.com/blue0x1/rosemary/rosemary@latest
go install github.com/blue0x1/rosemary/agent@latest # For install agent
# Copy to system path for sudo use
sudo cp ~/go/bin/rosemary /usr/local/bin/
Или загрузите готовые бинарные файлы со страницы Releases.
# Auto-generate a key
sudo rosemary
# Or provide your own
sudo rosemary -key YOUR_BASE64_KEY
Панель управления доступна по адресу http://server-ip:1024: войдите, используя ваш ключ.
# Standard QUIC/UDP mode (agent connects to server)
./agent-linux-amd64 -s server-ip:2048 -k YOUR_KEY
# Background mode
./agent-linux-amd64 -b -s server-ip:2048 -k YOUR_KEY
# Windows
agent-windows-amd64.exe -s server-ip:2048 -k YOUR_KEY
После подключения подсети агента автоматически маршрутизируются через него.
# On the agent host: agent listens for the server to connect
./agent-linux-amd64 -m agent-bind -l 0.0.0.0:9001 -k YOUR_KEY
# On the server CLI
rosemary> connect agent-ip:9001
Invoke-Rosemary.ps1 поддерживает как исходящий режим агента, так и bind-режим. Bind-режим работает на устаревших хостах Windows PowerShell. Исходящий режим агента использует QUIC и требует PowerShell 7 в среде .NET, где доступны System.Net.Quic и libmsquic.
# Import
. .\Invoke-Rosemary.ps1
# Help
Invoke-Rosemary -Help
Invoke-Rosemary -Mode agent -Server 192.168.1.10:2048 -Key YOUR_KEY
Invoke-Rosemary -Mode agent-bind -Listen 0.0.0.0:9001 -Key YOUR_KEY
Invoke-Rosemary -Mode agent -Server 192.168.1.10:2048 -Key YOUR_KEY -Background
Invoke-Rosemary -Mode agent -Server 192.168.1.10:2048 -Key YOUR_KEY -Verbose
Проверьте поддержку QUIC перед использованием исходящего режима PowerShell:
[type]::GetType('System.Net.Quic.QuicConnection, System.Net.Quic') -ne $null
[System.Net.Quic.QuicConnection]:https://raw.githubusercontent.com/blue0x1/rosemary/HEAD/:IsSupported
Если хотя бы одна проверка не пройдена, используйте Go-агент для Windows в исходящем режиме или запустите PowerShell-агент в режиме agent-bind.
rosemary> egress agent-1
[+] Default egress set to agent-1
Весь трафик к IP-адресам за пределами известных подсетей агентов теперь проходит через agent-1. DNS продолжает работать как для частных, так и для публичных доменов.
В этой версии исходящие агенты переведены на транспорт QUIC/UDP, bind-агенты остаются на шифрованном TCP-кадрировании, PowerShell-агент обновлён для обоих режимов, а вывод списков в CLI обновлён с выровненными таблицами для агентов, маршрутов, пробросов, обратных пробросов, SOCKS5-прокси и API-токенов.
Примечания о совместимости:
Введите help или help <command> внутри REPL для получения полной информации.
agents List all connected agents
disconnect <agent-id|all> Disconnect agent(s)
reconnect <agent-id> Force agent to reconnect
connect <ip:port> Connect to a bind-mode agent
routes Show routing table
routes enable <subnet> Re-enable a disabled route
routes disable <subnet> Disable a route without disconnecting
routes default <agent-id> Set default egress agent
routes default off Clear default egress
egress <agent-id> Alias: set default egress agent
egress none Alias: clear default egress
forward add <local-port> <agent-id> <host> <port> [tcp|udp]
forward del <id>
forwards List active forwards
rforward add <listen-port> <agent-id> <host> <port>
rforward del <id>
rforward list
socks <agent-id> <port> [username] [password]
socks list
socks stop <id>
ping <agent-id> <target> [count]
discover <agent-id> <subnet> [timeout_ms] [workers]
portscan <agent-id> tcp|udp <target> [ports]
settings Show current config
verbose Toggle debug logging
rotate-key Regenerate encryption key
save-config <path> Export config to JSON
load-config <path> Import config from JSON
token list|create|view|revoke Manage API tokens
exit Shutdown
Полная справочная документация по API
Полная документация по конечным точкам с примерами доступна по адресу:
http://<server>:1024/docs
Аутентифицируйтесь один раз, чтобы получить токен, и используйте его для всех запросов.
# Authenticate
curl -X POST http://server:1024/api/v1/auth \
-H "Content-Type: application/json" \
-d '{"key":"YOUR_KEY"}'
# List agents
curl -H "Authorization: Bearer tun_xxx" \
http://server:1024/api/v1/agents
# Port forward
curl -X POST http://server:1024/api/v1/forwards \
-H "Authorization: Bearer tun_xxx" \
-H "Content-Type: application/json" \
-d '{"action":"add","agent_id":"agent-1","local_port":8080,"target_host":"192.168.1.10","target_port":80}'
# SOCKS5 proxy
curl -X POST http://server:1024/api/v1/socks \
-H "Authorization: Bearer tun_xxx" \
-H "Content-Type: application/json" \
-d '{"agent_id":"agent-1","port":1080}'
# Run any CLI command
curl -X POST http://server:1024/api/v1/cli \
-H "Authorization: Bearer tun_xxx" \
-H "Content-Type: application/json" \
-d '{"command":"discover agent-1 10.10.10.0/24"}'
Конечные точки: /api/v1/auth · /api/v1/agents · /api/v1/routes · /api/v1/forwards · /api/v1/rforwards · /api/v1/socks · /api/v1/cli · /api/v1/settings · /api/v1/tokens · /api/v1/shutdown
Уровни разрешений токена: read · write · admin
git clone https://github.com/blue0x1/rosemary.git
cd rosemary
# Build all platforms and architectures
bash build.sh
# Build specific target
bash build.sh rosemary linux amd64
bash build.sh agent windows arm64
# Output goes to dist/
Поддерживаемые архитектуры:
amd64 arm64 arm 386amd64 arm64 386amd64 arm64Сервер Windows использует WinDivert для перехвата пакетов на уровне ядра. Перед сборкой:
rosemary/Они встраиваются в бинарный файл во время сборки.
read / write / adminGNU General Public License v3.0: см. LICENSE
blue0x1 (Chokri Hammedi)
Используйте только на системах, которыми вы владеете или на тестирование которых у вас есть явное письменное разрешение. Несанкционированное использование запрещено.
| Категория | Возможность |
|---|
| Перехват | Прозрачные TCP · UDP · ICMP · DNS, конфигурация клиента не требуется |
| Исходящий трафик | Агент исходящего трафика по умолчанию маршрутизирует весь интернет-трафик через выбранного агента |
| SOCKS5 | SOCKS5-прокси для каждого агента с опциональной аутентификацией по логину/паролю |
| Пробросы | Проброс портов TCP/UDP · Обратный проброс портов (сервер слушает, агент набирает соединение) |
| Обнаружение | Ping · Сканирование ping-диапазона · Сканирование портов TCP/UDP через агента |
| DNS | Перехватывает DNS, резолвит через агентов, частные и публичные домены |
| Пивотинг | Многоходовой пивотинг через нескольких агентов (протестировано 5+ переходов) |
| Транспорт | Исходящие агенты QUIC/UDP · bind-агенты с шифрованием по TCP |
| Панель управления | Веб-интерфейс с графом агентов в реальном времени, таблицей маршрутизации и просмотром журналов |
| API | Полный REST API с аутентификацией по токену (read/write/admin) |
| CLI | Интерактивный REPL + веб-панель CLI |
| Расширение | Расширение для Chrome для быстрого доступа |
| Агенты | Фоновый режим · bind-режим · автоматическое обнаружение подсетей · определение интернета |
| Конфигурация | Импорт/экспорт JSON · ротация ключей на лету · конфигурация по портам |
| Платформа | TCP | UDP | DNS | ICMP | SOCKS5 | Исходящий трафик |
|---|
| Linux | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Windows | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| macOS | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| FreeBSD | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| OpenBSD | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Создание и управление TCP/UDP пробросами портов через любого агента


Просмотр и включение/отключение маршрутов подсетей со статусом в реальном времени

Встроенный REPL для полного управления сервером


Поток событий в реальном времени с фильтрацией и экспортом

Запуск/остановка SOCKS5-прокси через любого агента с опциональной аутентификацией

Настройка портов сервера, ключей шифрования и API-токенов

Создание API-токенов REST и управление ими с гранулярными правами

Быстрые действия: тег, проброс, ping, скан портов, переподключение, отключение

| Параметр | Описание |
|---|
-Key | Ключ шифрования Base64 — должен совпадать с серверным |
-Mode | agent (исходящий) или agent-bind (входящий) |
-Server | Адрес сервера host:port — обязателен в режиме agent |
-Listen | Адрес прослушивания для режима agent-bind (по умолчанию 0.0.0.0:9001) |
-Background | Перезапустить как скрытый фоновый процесс и сразу вернуть управление |
-Verbose | Показывать диагностический вывод соединения и сессии |