Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Stowaway — Многоступенчатый прокси-инструмент для пентестеров, обеспечивающий маршрутизацию трафика через несколько узлов, туннелирование SOCKS5/SSH, перенаправление портов, удалённую оболочку и зашифрованную связь между узлами. | Kitploit
Инструменты/GitHubGitHub/ph4ntonn/stowaway
Инструменты шифрования/дешифрованияЛатеральное перемещениеКонтроль доступа к сетиТестирование на ПроникновениеКомандование и УправлениеRed Teaming
GitHubph4ntonn/stowaway

Stowaway

Многоступенчатый прокси-инструмент для пентестеров, обеспечивающий маршрутизацию трафика через несколько узлов, туннелирование SOCKS5/SSH, перенаправление портов, удалённую оболочку и зашифрованную связь между узлами.

Репозиторий
3.4k4425 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

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

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

stowaway.png

Stowaway

GitHub issues GitHub forks GitHub stars GitHub license

English

Stowaway — это многоуровневый прокси-инструмент, написанный на Go, предназначенный для специалистов по тестированию на проникновение.

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

Спасибо всем за звёзды! Буду рад вашим вопросам и сообщениям об ошибках 😘

Пожалуйста, перед использованием внимательно прочитайте руководство и примечания в конце документа.

Заявление

Данный проект предназначен исключительно для исследований в области кибербезопасности и учебных целей. Запрещается использовать его для любых незаконных действий. Перед использованием данного инструмента в любых тестах вы должны получить явное разрешение от целевой системы и строго соблюдать соответствующие законы и нормативные акты вашей страны/региона. Все прямые или косвенные последствия (включая, но не ограничиваясь потерей данных, повреждением системы, юридической ответственностью и т.д.) ложатся на пользователя. Автор проекта не несёт ответственности за любые злоупотребления или юридические последствия. Использование данного инструмента означает, что вы прочитали, поняли и согласны со всеми положениями данного отказа от ответственности.

Возможности

  • Удобный интерфейс управления с автодополнением команд и историей
  • Наглядное древовидное отображение узлов
  • Богатая информация об узлах
  • Прямое и обратное соединение узлов
  • Поддержка переподключения узлов
  • Подключение через SOCKS5/HTTP прокси между узлами
  • Подключение через SSH-туннель между узлами
  • Трафик между узлами: TCP/HTTP/WS (на выбор)
  • Многоуровневое проксирование SOCKS5 с поддержкой UDP/TCP, IPv4/IPv6
  • SSH-доступ к удалённым хостам через узел
  • Удалённая оболочка
  • Загрузка и скачивание файлов
  • Локальное и удалённое перенаправление портов
  • Повторное использование портов узла
  • Свободное включение/отключение различных служб
  • Взаимная аутентификация узлов
  • Шифрование трафика TLS/AES-256-GCM между узлами
  • Размер файла уменьшен на 25% по сравнению с v1.0
  • Поддержка различных платформ (Linux/Mac/Windows/MIPS/ARM)

Сборка и демонстрация

  • Используйте make для сборки полной много платформенной версии или измените Makefile для сборки конкретных программ.
  • Если не хотите компилировать, можете использовать готовые сборки из релизов.
  • Демонстрационное видео: YouTube

Использование

Роли

Stowaway включает две роли:

  • admin — управляющий узел для пентестера
  • agent — управляемый узел, развёртываемый пентестером

Определения терминов

  • Узел: admin или agent
  • Активный режим: текущий узел активно подключается к другому узлу
  • Пассивный режим: текущий узел прослушивает порт и ждёт подключения другого узла
  • Восходящий поток: трафик между текущим узлом и его родительским узлом
  • Нисходящий поток: трафик между текущим узлом и всеми его дочерними узлами

Быстрый старт

Следующие команды позволяют быстро запустить простейший экземпляр Stowaway:

  • admin: ./stowaway_admin -l 9999
  • agent: ./stowaway_agent -c <IP_адрес_stowaway_admin>:9999

Параметры

  • admin
root@kitploit:~
Параметры:
-l  Адрес для прослушивания в пассивном режиме [ip]:<port>
-s  Ключ шифрования связи узлов (должен совпадать для всех узлов (admin && agent))
-c  Адрес целевого узла в активном режиме
--socks5-proxy  Адрес SOCKS5-прокси
--socks5-proxyu Имя пользователя SOCKS5-прокси (опционально)
--socks5-proxyp Пароль SOCKS5-прокси (опционально)
--http-proxy    Адрес HTTP-прокси
--down          Тип протокола нисходящего потока (по умолчанию чистый TCP; опции: HTTP/WS)
--tls-enable    Включить TLS для связи между узлами (при включении TLS шифрование AES отключается)
--domain        Указать домен для TLS SNI/WebSocket (если пусто — по умолчанию адрес целевого узла)
--heartbeat     Включить поддержание активности (heartbeat)
  • agent
root@kitploit:~
Параметры:
-l  Адрес для прослушивания в пассивном режиме [ip]:<port>
-s  Ключ шифрования связи узлов
-c  Адрес целевого узла в активном режиме
--socks5-proxy  Адрес SOCKS5-прокси
--socks5-proxyu Имя пользователя SOCKS5-прокси (опционально)
--socks5-proxyp Пароль SOCKS5-прокси (опционально)
--http-proxy    Адрес HTTP-прокси
--reconnect     Интервал переподключения (в секундах)
--rehost        IP-адрес для повторного использования порта (reuse)
--report        Порт для повторного использования (reuse)
--up            Тип протокола восходящего потока (по умолчанию чистый TCP; опции: HTTP/WS)
--down          Тип протокола нисходящего потока (по умолчанию чистый TCP; опции: HTTP/WS)
--cs            Тип кодировки оболочки платформы (по умолчанию utf-8; опция: gbk)
--tls-enable    Включить TLS для связи между узлами (при включении TLS шифрование AES отключается)
--domain        Указать домен для TLS SNI/WebSocket (если пусто — по умолчанию адрес целевого узла)

Использование параметров

-l

Этот параметр одинаково используется admin и agent, только в пассивном режиме.

Если IP-адрес не указан, по умолчанию используется 0.0.0.0.

  • admin: ./stowaway_admin -l 9999 или ./stowaway_admin -l 127.0.0.1:9999
  • agent: ./stowaway_agent -l 9999 или ./stowaway_agent -l 127.0.0.1:9999

-s

Этот параметр одинаково используется admin и agent, может применяться в активном и пассивном режимах.

Опционально. Если пусто, связь не шифруется; если задан, трафик шифруется с этим ключом.

  • admin: ./stowaway_admin -l 9999 -s 123
  • agent: ./stowaway_agent -l 9999 -s 123

-c

Этот параметр одинаково используется admin и agent, только в активном режиме.

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

  • admin: ./stowaway_admin -c 127.0.0.1:9999
  • agent: ./stowaway_agent -c 127.0.0.1:9999

--socks5-proxy/--socks5-proxyu/--socks5-proxyp/--http-proxy

Эти четыре параметра одинаково используются admin и agent, только в активном режиме.

--socks5-proxy — адрес SOCKS5-прокси, --socks5-proxyu и --socks5-proxyp опциональны. --http-proxy — адрес HTTP-прокси, используется аналогично SOCKS5.

Без имени/пароля:

  • admin: ./stowaway_admin -c 127.0.0.1:9999 --socks5-proxy xxx.xxx.xxx.xxx
  • agent: ./stowaway_agent -c 127.0.0.1:9999 --socks5-proxy xxx.xxx.xxx.xxx

С именем/паролем:

  • admin: ./stowaway_admin -c 127.0.0.1:9999 --socks5-proxy xxx.xxx.xxx.xxx --socks5-proxyu xxx --socks5-proxyp xxx
  • agent: ./stowaway_agent -c 127.0.0.1:9999 --socks5-proxy xxx.xxx.xxx.xxx --socks5-proxyu xxx --socks5-proxyp xxx

--up/--down

Эти параметры одинаково используются admin и agent, могут применяться в активном и пассивном режимах.

Обратите внимание: у admin нет параметра --up.

Эти параметры опциональны. Если не заданы, восходящий/нисходящий трафик идёт по чистому TCP.

Чтобы установить протокол HTTP или WS, задайте http или ws.

  • admin: ./stowaway_admin -c 127.0.0.1:9999 --down ws
  • agent: ./stowaway_agent -c 127.0.0.1:9999 --up ws или ./stowaway_agent -c 127.0.0.1:9999 --up ws --down ws

Также обратите внимание на два момента:

  1. Если вы задали для узла тип восходящего/нисходящего потока (TCP/HTTP/WS), то соответствующий тип потока его родительского/дочернего узла должен совпадать, например:
  • admin: ./stowaway_admin -c 127.0.0.1:9999 --down ws
  • agent: ./stowaway_agent -l 9999 --up ws

В этом случае agent обязательно должен установить --up в ws, иначе будет ошибка сети.

То же самое между агентами: если agent-1 слушает на порту 10000 с --down ws, то agent-2 должен установить --up ws.

  • agent-2: ./stowaway_agent -c 127.0.0.1:10000 --up ws
  1. Поскольку HTTP — полудуплексный протокол, он не очень подходит для полнодуплексной связи Stowaway. Реализация HTTP здесь использует только формат сообщений HTTP, а не полный рабочий процесс. Вы всё ещё можете использовать этот протокол, но трафик в формате HTTP между узлами Stowaway не может быть передан через nginx. Этот код и функциональность сохранены для особых случаев использования HTTP, а также как шаблон для пользовательских протоколов.

Если вам нужно передавать трафик через nginx или другие обратные прокси, используйте протокол WS вместе с TLS.

--reconnect

Этот параметр используется только в agent и только в активном режиме.

Опционально. Если не задан, узел не будет переподключаться после разрыва; если задан, узел будет пытаться переподключаться к родительскому узлу каждые x секунд.

  • admin: ./stowaway_admin -l 9999
  • agent: ./stowaway_agent -c 127.0.0.1:9999 --reconnect 10

В данном случае при разрыве соединения между agent и admin agent будет пытаться переподключиться к admin каждые 10 секунд.

То же для взаимодействия между агентами.

Параметр --reconnect может использоваться вместе с --socks5-proxy/--socks5-proxyu/--socks5-proxyp/--http-proxy; agent будет переподключаться через указанный прокси.

--rehost/--report

Эти параметры используются только в agent. Подробнее см. раздел о повторном использовании портов.

--cs

Этот параметр используется только в agent, может применяться в активном и пассивном режимах.

Предназначен для решения проблем с кодировкой в функции shell. Если agent запущен на платформе с кодировкой консоли GBK (например, Windows), а admin — на платформе с кодировкой UTF-8, обязательно установите этот параметр в gbk.

  • Windows: ./stowaway_agent -c 127.0.0.1:9999 -s 123 --cs gbk

--tls-enable

Этот параметр одинаково используется admin и agent, может применяться в активном и пассивном режимах.

При включении трафик между узлами шифруется с помощью TLS.

Пример:

  • admin: ./stowaway_admin -l 10000 --tls-enable -s 123
  • agent: ./stowaway_agent -c localhost:10000 --tls-enable -s 123

Важно: при включении этого параметра шифрование AES отключается по умолчанию, а параметр -s используется только для взаимной аутентификации узлов и функции повторного использования портов.

Также при включении этого параметра убедитесь, что каждый узел в сети (включая admin) также включает этот параметр.

--domain

Этот параметр одинаково используется admin и agent, только в активном режиме.

Позволяет задать опцию SNI при согласовании TLS или целевой хост WebSocket.

Пример:

  • admin: ./stowaway_admin -l 10000 --tls-enable -s 123
  • agent: ./stowaway_agent -c xxx.xxx.xxx.xxx:10000 --tls-enable -s 123 --domain xxx.com

--heartbeat

Этот параметр используется только в admin, может применяться в активном и пассивном режимах.

При включении admin будет постоянно отправлять keep-alive пакеты первому узлу, поддерживая долгоживущее соединение при наличии обратного прокси.

Предположим, между admin и agent есть nginx, проксирующий порт 8080 на порт 8000:

  • admin: ./stowaway_admin -l 8000 --tls-enable -s 123 --down ws --heartbeat
  • agent: ./stowaway_agent -c xxx.xxx.xxx.xxx:8080 --tls-enable -s 123 --domain xxx.com --up ws

Механизм повторного использования портов

Stowaway поддерживает повторное использование портов на основе SO_REUSEPORT/SO_REUSEADDR и iptables.

  • На Linux можно повторно использовать большинство служебных портов.
  • На Windows нельзя использовать порты IIS, RDP; можно использовать порты MySQL, Apache.

Способы повторного использования

  • Режим SO_REUSEPORT и SO_REUSEADDR

    Предположим, agent использует повторное использование порта 80.

    В этом случае agent должен установить параметры --rehost, --report и -s.

    • --rehost: IP-адрес для повторного использования (не может быть 0.0.0.0, обычно внешний адрес сетевого интерфейса).
    • --report: порт для повторного использования.
    • -s: ключ шифрования связи.

    В основном поддерживается на Windows и Mac; на Linux тоже работает, но с ограничениями.

    • admin: ./stowaway_admin -c 192.168.0.105:80 -s 123
    • agent: ./stowaway_agent --report 80 --rehost 192.168.0.105 -s 123
  • Режим iptables

    Предположим, agent использует повторное использование порта 22.

    В этом случае agent должен установить параметры -l, --report и -s.

Примечание

  • Выше показано только соединение admin и agent; соединение между агентами аналогично.
  • Если agent убит через Ctrl+C или командой kill, программа автоматически очистит правила iptables. Но если убит с kill -9, очистка не произойдёт. Поэтому во избежание ситуации, когда agent аварийно завершился, а правила iptables остались, и повторно используемый порт становится недоступен, при необходимости завершения нужно выполнить: python reuse.py --stop --rhost xxx.xxx.xxx.xxx --rport xxx Это отключит правила перенаправления, и исходный сервис снова станет доступен.
  • При использовании режима iptables узел будет принудительно слушать на 0.0.0.0, нельзя задать IP через параметр -l.

Как построить многоуровневую сеть?

Из примеров выше видно, что участвуют только admin и один agent. Многоуровневая сеть — ключевая особенность.

В Stowaway для построения многоуровневой сети используются команды listen, connect, sshtunnel на admin.

Простой пример:

  • admin: ./stowaway_admin -l 9999 -s 123

Агент-1 уже подключился к admin:

  • agent-1: ./stowaway_agent -c 127.0.0.1:9999 -s 123

Теперь пользователь хочет подключить agent-2:

  • agent-2: ./stowaway_agent -l 10000 -s 123

Пользователь может через admin ввести use 0 → connect IP_агента-2:10000, чтобы добавить его в сеть как дочерний узел для agent-1.

Предположим, пользователь хочет добавить agent-3, но через agent-1 до него не добраться.

Тогда через admin: use 0 → listen → выбрать 1.Normal Passive → ввести 10001. Теперь agent-1 слушает порт 10001 и ждёт подключения дочернего узла.

После этого agent-3 запускается:

  • agent-3: ./stowaway_agent -c 127.0.0.1:10001 -s 123

Таким образом agent-3 становится ещё одним дочерним узлом agent-1.

Подробнее о командах listen и sshtunnel см. ниже в разделе команд.

Как переподключаться?

Stowaway поддерживает несколько способов переподключения. Кратко:

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

Если параметр --reconnect задан, узел будет пытаться переподключаться с заданным интервалом.

Узлы, запущенные в пассивном режиме, не завершаются, а продолжают слушать на заданном порту. Вы всё ещё можете использовать connect или sshtunnel, чтобы снова подключить эти узлы к сети.

Примечание

  1. Если из-за колебаний сети или отключения промежуточного узла одна ветвь разорвалась, при активном переподключении обязательно подключайтесь к головному узлу недостающей цепочки. Например: admin → node1 → node2 → node3 → node4 и node1 → node5 → node6. Если node2 отключается, node3 и node4 не отключаются, а остаются активными. Чтобы вернуть node3 и node4 в сеть, есть два варианта: если node1 может напрямую достичь node3, используйте connect или sshtunnel на node1, чтобы подключить node3 (даже если node1 также может достичь node4, не подключайтесь напрямую к node4; подключайте головной узел всей недостающей цепочки — node3). Если node1 не может напрямую достичь node3 (только через node2), сначала перезапустите node2 и подключите его к сети, затем на node2 используйте connect или sshtunnel для подключения к node3.
  2. Когда какой-либо узел отключается, все службы socks, backward, forward, связанные с этим узлом и его дочерними узлами, принудительно останавливаются.

Справочник команд

В консоли admin можно использовать Tab для автодополнения команд, стрелки для истории/перемещения курсора.

Консоль admin имеет два уровня. Первый — главная панель с командами:

  • help: показать справку главной панели.
root@kitploit:~
(admin) >> help
  help                                     		Показать справку
  detail                                  		Показать подробную информацию о подключённых узлах
  topo                                     		Показать топологию узлов
  use        <id>                          		Выбрать целевой узел для работы
  exit                                     		Выйти из Stowaway
  • detail: показать подробную информацию об онлайн-узлах.
root@kitploit:~
(admin) >> detail
Node[0] -> IP: 127.0.0.1:10000  Hostname: ph4ntoms-MBP.lan  User: ph4ntom
Memo:
  • topo: показать отношения родитель-потомок между онлайн-узлами.
root@kitploit:~
(admin) >> topo
Node[0]'s children ->
Node[1]

Node[1]'s children ->
  • use: выбрать определённый агент.
root@kitploit:~
(admin) >> use 0
(node 0) >>
  • exit: выйти из Stowaway.
root@kitploit:~
(admin) >> exit
[*] Вы действительно хотите выйти из Stowaway?(y/n): y
[*] BYE!

Когда пользователь выбирает агента с помощью use, он переходит на второй уровень — панель узла, со следующими командами:

  • help: показать справку панели узла.
root@kitploit:~
(node 0) >> help
  help                                            Показать справку
  status                                          Показать состояние узла (socks/forward/backward)
  listen                                          Запустить прослушивание порта на текущем узле
  addmemo    <string>                             Добавить заметку для текущего узла
  delmemo                                         Удалить заметку текущего узла
  ssh        <ip:port>                            Запустить SSH через текущий узел
  shell                                           Запустить интерактивную оболочку на текущем узле
  socks      <lport> [username] [pass]            Запустить SOCKS5-сервер
  stopsocks                                       Остановить SOCKS-сервисы
  connect    <ip:port>                            Подключиться к новому узлу
  sshtunnel  <ip:sshport> <agent port>            Использовать SSH-туннель для добавления узла в топологию
  upload     <имя_локального_файла> <имя_удалённого_файла>   Загрузить файл на текущий узел
  download   <имя_удалённого_файла> <имя_локального_файла>   Скачать файл с текущего узла
  forward    <lport> <ip:port>                    Перенаправить локальный порт на удалённый ip:port
  stopforward                                     Остановить службы forward
  backward    <rport> <lport>                     Перенаправить удалённый порт (агента) на локальный порт (admin)
  stopbackward                                    Остановить службы backward
  shutdown                                        Завершить текущий узел
  back                                            Вернуться на родительскую панель
  exit                                            Выйти из Stowaway
  • status: показать состояние SOCKS/forward/backward текущего узла.
root@kitploit:~
(node 0) >> status
Socks status:
      ListenAddr: 0.0.0.0:10000    Username:    Password:
-------------------------------------------------------------------------------------------
Forward status:
      [1] Listening Addr: [::]:20000 , Remote Addr: 192.168.1.1:22 , Active Connections: 0
      [2] Listening Addr: [::]:30000 , Remote Addr: 192.168.1.1:22 , Active Connections: 0
-------------------------------------------------------------------------------------------
Backward status:
      [1] Remote Port: 40000 , Local Port: 50000 , Active Connections: 0
  • listen: дать команду узлу прослушивать порт и ждать подключения дочерних узлов.
root@kitploit:~
(node 0) >> listen
[*] ВНИМАНИЕ! Если вы выбираете IPTables Reuse или SOReuse, вы ДОЛЖНЫ убедиться, что узел исходно был запущен соответствующим образом!
[*] При выборе IPTables Reuse или SOReuse узел будет использовать начальную конфигурацию (при запуске) для повторного использования порта!
[*] Пожалуйста, выберите режим (1.Normal passive / 2.IPTables Reuse / 3.SOReuse): 1
[*] Введите [ip:]<port> : 10001
[*] Ожидание ответа......
[*] Узел слушает на порту 10001

Обратите внимание, что listen — особая команда. У неё три режима:

  1. Normal passive: узел будет слушать порт обычным образом и ждать подключения дочернего узла.
  2. IPTables Reuse: узел будет повторно использовать порт с помощью iptables и ждать подключения дочернего узла.
  3. SOReuse: узел будет повторно использовать порт с помощью SOReuse и ждать подключения дочернего узла.

Первый режим — самый распространённый. Если родительский узел слушает таким образом, дочерний узел просто подключается с -c ip_родителя:port.

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

Во втором и третьем режимах пользователю не нужно вводить дополнительную информацию; узел автоматически использует свои параметры запуска для повторного использования порта и готов принять дочернее подключение.

Также listen принимает только одно дочернее подключение за раз. Для нескольких дочерних узлов выполните listen соответствующее количество раз.

  • addmemo: добавить заметку для текущего узла.
root@kitploit:~
(node 0) >> addmemo test
[*] Заметка добавлена!
(node 0) >> exit
(admin) >> detail
Node[0] -> IP: 127.0.0.1:10000  Hostname: ph4ntoms-MBP.lan  User: ph4ntom
Memo:  test
  • delmemo: удалить заметку текущего узла.
root@kitploit:~
(node 0) >> delmemo
[*] Заметка удалена!
(node 0) >> exit
(admin) >> detail
Node[0] -> IP: 127.0.0.1:10000  Hostname: ph4ntoms-MBP.lan  User: ph4ntom
Memo:
  • ssh: команда узлу подключиться к целевой машине по SSH.
root@kitploit:~
(node 0) >> ssh 127.0.0.1:22
[*] Выберите метод аутентификации (1.имя_пользователя&&пароль / 2.сертификат): 1
[*] Введите имя пользователя: ph4ntom
[*] Введите пароль: *****
[*] Ожидание ответа.....
[*] Подключение к целевому хосту через SSH успешно!
 # ph4ntom @ ph4ntoms-MBP in ~ 👑 [17:03:56]
$ whoami
ph4ntom
 # ph4ntom @ ph4ntoms-MBP in ~ 👑 [17:04:16]
$

В этом режиме клавиша Tab отключена.

  • shell: получить оболочку текущего узла.
root@kitploit:~
(node 0) >> shell
[*] Ожидание ответа.....
[*] Оболочка успешно запущена!

bash: no job control in this shell

The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
bash-3.2$ whoami
ph4ntom
bash-3.2$

В этом режиме клавиша Tab отключена.

  • socks: запустить SOCKS5-сервис на текущем узле.
root@kitploit:~
(node 0) >> socks 7777
[*] Попытка прослушивания на 0.0.0.0:7777......
[*] Ожидание ответа......
[*] SOCKS успешно запущен!
(node 0) >>

Обратите внимание: порт 7777 открывается на admin, а не на agent.

Если нужно задать имя пользователя и пароль, измените команду на socks 7777 <ваше_имя> <ваш_пароль>.

Если нужно указать интерфейс прослушивания, измените на socks xxx.xxx.xxx.xxx:7777.

  • stopsocks: остановить SOCKS5-сервис на текущем узле.
root@kitploit:~
(node 0) >> stopsocks
Socks Info ---> ListenAddr: 0.0.0.0:7777    Username: <null>    Password: <null>
[*] Вы действительно хотите остановить socks?(yes/no): yes
[*] Закрытие......
[*] Служба socks успешно остановлена!
(node 0) >>
  • connect: команда текущему узлу подключиться к другому дочернему узлу.
root@kitploit:~
agent-1: ./stowaway_agent -l 10002
root@kitploit:~
(node 0) >> connect 127.0.0.1:10002
[*] Ожидание ответа......
[*] Новый узел онлайн! ID узла: 1

(node 0) >>
  • sshtunnel: команда текущему узлу подключиться к другому дочернему узлу через SSH-туннель.
root@kitploit:~
agent-2: ./stowaway_agent -l 10003
root@kitploit:~
(node 0) >> sshtunnel 127.0.0.1:22 10003
[*] Выберите метод аутентификации (1.имя_пользователя&&пароль / 2.сертификат): 1
[*] Введите имя пользователя: ph4ntom
[*] Введите пароль: ******
[*] Ожидание ответа.....
[*] Новый узел онлайн! ID узла: 2

(node 0) >>

В строго ограниченной сети можно использовать SSH-туннель, чтобы замаскировать трафик Stowaway под SSH-трафик и обойти ограничения брандмауэра.

  • upload: загрузить файл на текущий узел.
root@kitploit:~
(node 0) >> upload test.7z test.xxx
[*] Передача файла, пожалуйста, подождите...
136.07 KiB / 136.07 KiB [-----------------------------------------------------------------------------------] 100.00% ? p/s 0s
  • download: скачать файл с текущего узла.
root@kitploit:~
(node 0) >> download test.xxx test.xxxx
[*] Передача файла, пожалуйста, подождите...
136.07 KiB / 136.07 KiB [-----------------------------------------------------------------------------------] 100.00% ? p/s 0s
  • forward: перенаправить порт admin на удалённый порт.
root@kitploit:~
(node 0) >> forward 9000 127.0.0.1:22
[*] Попытка прослушивания на 0.0.0.0:9000......
[*] Ожидание ответа......
[*] Перенаправление успешно запущено!
(node 0) >>
root@kitploit:~
$ ssh 127.0.0.1 -p 9000
Password:
 # ph4ntom @ ph4ntoms-MBP in ~ 👑 [17:19:51]
$
  • stopforward: остановить перенаправление на текущем узле.
root@kitploit:~
(node 0) >> stopforward
[0] All
[1] Listening Addr : [::]:9000 , Remote Addr : 127.0.0.1:22 , Active Connections : 1
[*] Вы действительно хотите остановить forward?(yes/no): yes
[*] Выберите, что закрыть: 1
[*] Закрытие......
[*] Служба forward успешно остановлена!
  • backward: обратное перенаправление порта agent на локальный порт admin.
root@kitploit:~
(node 0) >> backward 9001 22
[*] Попытка дать узлу команду слушать на 0.0.0.0:9001......
[*] Ожидание ответа......
[*] Backward успешно запущен!
(node 0) >>
root@kitploit:~
$ ssh 127.0.0.1 -p 9001
Password:
 # ph4ntom @ ph4ntoms-MBP in ~ 🌈 [17:22:14]
$
  • stopbackward: остановить обратное перенаправление на текущем узле.
root@kitploit:~
(node 0) >> stopbackward
[0] All
[1] Remote Port : 9001 , Local Port : 22 , Active Connections : 1
[*] Вы действительно хотите остановить backward?(yes/no): yes
[*] Выберите, что закрыть: 1
[*] Закрытие......
[*] Служба backward успешно остановлена!
  • shutdown: команда текущему узлу выйти из сети.
root@kitploit:~
(node 1) >> shutdown
(node 1) >>
[*] Узел 1 отключен!
  • back: вернуться на главную панель.
root@kitploit:~
(node 1) >> back
(admin) >>
  • exit: выйти из Stowaway.
root@kitploit:~
(node 1) >> exit
[*] Вы действительно хотите выйти из Stowaway?(y/n): y
[*] BYE!

TODO

  • Исправление ошибок
  • Поддержка TLS
  • Поддержка нескольких стартовых узлов (startnode)

Примечания

  • Эта программа разрабатывалась в свободное время для изучения; структура кода может быть не строгой, возможны ошибки. Просим отнестись с пониманием.
  • Новые узлы не могут присоединиться, если admin не в сети.
  • Admin поддерживает только одного напрямую подключённого агента; для агентов такого ограничения нет.
  • Если используется admin на Windows, сначала скачайте ansicon или здесь, затем перейдите в папку соответствующей разрядности и выполните ansicon.exe -i, иначе admin будет отображаться с искажёнными символами.
  • Эта программа поддерживает только стандартный UDP ASSOCIATE согласно RFC1928. При использовании SOCKS5 UDP-прокси убедитесь, что ваша программа (например, сканер) формирует пакеты в соответствии со стандартом RFC1928, и самостоятельно обрабатывайте потери пакетов.

Проект 404 StarLink

Stowaway присоединился к проекту 404 StarLink

Благодарности

Благодарю следующих коллег и проекты за помощь в разработке Stowaway:

  • lz520520
  • SignorMercurio
  • MM0x00
  • r0ck3rt
  • Termite
  • Venom
Скачать инструмент
  • -l: порт, который не должен быть доступен нормально (реальный порт, на котором agent будет слушать).
  • --report: порт для повторного использования.
  • -s: ключ шифрования связи.

Поддерживается только на Linux; agent автоматически изменяет iptables (требуются права root).

  • agent: ./stowaway_agent --report 22 -l 10000 -s 123

    После запуска agent используйте скрипт reuse.py из каталога script.

    Сначала задайте значение SECRET (равное ключу шифрования, используемому при запуске узлов).

    Затем выполните: python reuse.py --start --rhost xxx.xxx.xxx.xxx --rport xxx

    • --rhost: адрес agent'а.
    • --rport: повторно используемый порт (в данном примере 22).
  • Затем admin может подключиться: ./stowaway_admin -c 192.168.0.105:22 -s 123