Продвинутый post-exploitation framework на Python. Превращает простой reverse shell в полноценную интерактивную сессию с модульной системой автоматизации. Возможности: - Автоматическое улучшение shell: PTY, цвета, история команд - Встроенная загрузка/выгрузка файлов - Перечисление системы: пользователи, SUID, cron, capabilities - Модули повышения привилегий (sudo, SUID, writable paths) - Сохранение сессий (persistence через различные методы) - Поддержка Linux и Windows-таргетов - Режим C2: несколько сессий через один порт
# pip (рекомендуется в virtualenv): python3 -m venv pwncat-env source pwncat-env/bin/activate pip install pwncat-cs # из репозитория: git clone https://github.com/calebstewart/pwncat cd pwncat pip install . # Примеры: # Слушать входящий reverse shell: pwncat-cs -lp 4444 # Подключиться к bind shell: pwncat-cs 192.168.1.10:4444 # Загрузить файл на таргет: (local) upload /path/to/file /tmp/file # Запустить модуль перечисления: (local) run enumerate # Попытка повышения привилегий: (local) run escalate.sudo
pwncat — это платформа для постэксплуатации ~~для целей на Linux~~. Она начиналась как оболочка для базовых bind и reverse шеллов и с тех пор выросла. Она упрощает типичные операции красной команды, размещая код с вашей атакующей машины, а не с целевой.
pwncat раньше поддерживала только Linux, но в последнее время было много работы по поддержке нескольких платформ. В настоящее время существует альфа-версия поддержки целей на Windows. Пожалуйста, обратитесь к последней документации для получения информации о том, как использовать pwncat с целью на Windows.
pwncat перехватывает необработанную коммуникацию с удаленным шеллом и позволяет пользователю выполнять автоматизированные действия на удаленном хосте, включая перечисление, установку имплантов и даже повышение привилегий.
После получения соединения pwncat настроит некоторые общие конфигурации для работы с удаленными шеллами.
which)pwncat знает, как создавать pty с помощью нескольких различных методов и будет сопоставлять эти методы с ранее перечисленными исполняемыми файлами. После создания pty он настроит управляющий терминал в необработанном (raw) режиме, чтобы вы могли взаимодействовать с ним аналогично ssh.
pwncat также синхронизирует настройки удаленного pty (такие как строки, столбцы, переменная окружения TERM) с вашими локальными настройками, чтобы обеспечить корректную работу оболочки с интерактивными приложениями, такими как vim или nano.
Джон Хэммонд и я представляли pwncat на GRIMMCon. Нашу презентацию можно найти на YouTube здесь. Это видео демонстрирует раннюю версию API и интерфейса. Пожалуйста, обратитесь к документации для получения актуальной информации об использовании и API!
Документация по pwncat [documentation] создается на Read the Docs. Перейдите туда для получения последней информации об использовании и разработке!
pwncat требует Python 3.9+ на Linux
pwncat зависит только от работающей среды разработки Python, работающей на Linux. Чтобы установить некоторые пакеты, необходимые для pip, вам, вероятно, понадобится пакет "Python Development" вашего дистрибутива. В системах на базе Debian это python-dev. Для Arch файлы разработки поставляются вместе с основным репозиторием Python. Для Enterprise Linux пакет называется python-devel.
pwncat публикуется в PyPI под именем pwncat-cs и может быть установлен с помощью pip следующим образом:
pip install pwncat-cs
Однако рекомендуется устанавливать pwncat из виртуального окружения.
```shell script python3 -m venv pwncat-env source pwncat-env/bin/activate pip install pwncat-cs
Для среды разработки `pwncat` использует Python Poetry. Вы можете клонировать репозиторий локально и использовать poetry для настройки среды разработки.
``` shell
# Настройка pwncat внутри виртуального окружения, управляемого poetry
git clone git@github.com:calebstewart/pwncat.git
cd pwncat
poetry install
# Вход в виртуальное окружение
poetry shell
Из-за конфликта названий с pwncat от Cytopia я решил переименовать пакет в pwncat-cs. Это включает переименование точки входа, чтобы не было прямых конфликтов с проектом Cytopia. Если вы обновляете с v0.4.*, имя команды теперь изменено, а варианты pcat и pc удалены. Подробности смотрите в последних заметках о выпуске.
Дополнительным преимуществом этого изменения является то, что проект теперь публикуется в PyPI для более простой установки/обновления в будущем.
pwncat теперь поддерживает соединения с целей на Windows, начиная с v0.4.0a1. Платформа Windows использует библиотеку C2 на основе .Net, которая загружается автоматически. Цели на Windows должны подключаться с помощью шелла cmd.exe или powershell.exe, и pwncat сделает остальное.
Библиотеки, реализующие C2, находятся в pwncat-windows-c2. DLL для C2 будут автоматически загружены для вас из целевого релиза. Если у вас нет подключения к интернету на целевой машине, вы можете указать pwncat предварительно загрузить DLL с помощью аргумента --download-plugins. Если вы используете релизную версию pwncat, вы также можете загрузить tarball всех встроенных плагинов со страницы релизов.
По умолчанию плагины хранятся в ~/.local/share/pwncat, однако это настраивается с помощью параметра конфигурации plugin_path. Если вы загрузили упакованный набор плагинов со страницы релизов, извлеките его по пути, указанному в plugin_path.
Помимо основных DLL для C2, могут быть доступны другие плагины. В настоящее время единственными предоставленными плагинами по умолчанию являются C2 и реализация BadPotato. pwncat может загружать бинарные файлы .Net отражательным способом для использования в качестве плагинов для C2. Для получения дополнительной информации о плагинах для Windows C2, пожалуйста, обратитесь к документации.
Недавно архитектура фреймворка pwncat была переработана для включения общей "модульной" структуры. Вся функциональность теперь реализована в виде модулей. Это включает перечисление, постоянство и повышение привилегий. Взаимодействие с модулями аналогично большинству других платформ для постэксплуатации. Вы можете использовать знакомые команды run, search и info и входить в контексты модулей с помощью команды use. Обратитесь к документации для получения дополнительной информации.
Установка на BlackArch проста:
pacman -Syu pwncat-caleb
Параметры командной строки pwncat стараются быть гибкими и принимать различные распространенные синтаксисы подключения. В частности, он будет пытаться принимать распространенный синтаксис, похожий на netcat и ssh. Следующие команды все являются допустимыми:
# Подключение к bind шеллу
pwncat-cs connect://10.10.10.10:4444
pwncat-cs 10.10.10.10:4444
pwncat-cs 10.10.10.10 4444
# Прослушивание для reverse шелла
pwncat-cs bind://0.0.0.0:4444
pwncat-cs 0.0.0.0:4444
pwncat-cs :4444
pwncat-cs -lp 4444
# Подключение через ssh
pwncat-cs ssh://user:password@10.10.10.10
pwncat-cs user@10.10.10.10
pwncat-cs user:password@10.10.10.10
pwncat-cs -i id_rsa user@10.10.10.10
# SSH с нестандартным портом
pwncat-cs -p 2222 user@10.10.10.10
pwncat-cs user@10.10.10.10:2222
# Повторное подключение с использованием установленной постоянности
# Если повторное подключение не удается и протокол не указан,
# используется SSH как запасной вариант.
pwncat-cs reconnect://user@10.10.10.10
pwncat-cs reconnect://user@c228fc49e515628a0c13bdc4759a12bf
pwncat-cs user@10.10.10.10
pwncat-cs c228fc49e515628a0c13bdc4759a12bf
pwncat-cs 10.10.10.10
По умолчанию pwncat предполагает, что целевая платформа — Linux. Чтобы подключиться к Windows reverse или bind шеллу, необходимо передать аргумент --platform/-m:
pwncat-cs -m windows 10.10.10.10 4444
pwncat-cs -m windows -lp 4444
Для получения дополнительной информации о синтаксисе и обработке аргументов, смотрите справку с pwncat-cs --help или посетите [документацию].
Рекомендуемый метод установки — виртуальное окружение Python. Это обеспечивает самое простое повседневное использование pwncat. Однако проявился интерес к использованию pwncat из docker образа, поэтому я предоставил Dockerfile, который обеспечивает работающую установку pwncat. Чтобы собрать образ, используйте:
docker build -t pwncat .
Это соберет docker образ pwncat с тегом "pwncat". Рабочая директория внутри контейнера — /work. Точка входа для контейнера — бинарный файл pwncat. Его можно использовать следующим образом:
# Подключение к bind шеллу на 10.0.0.1:4444
docker run -v "/some/directory":/work -t pwncat 10.0.0.1 4444
В этом примере контейнеру доступны только файлы в /some/directory. Очевидно, для загрузки/выгрузки контейнер сможет видеть только файлы, доступные через любые смонтированные директории.
pwncat предоставляет две основные возможности. В основе его работы — автоматическая настройка удалённого псевдотерминала (PTY), что позволяет взаимодействовать с удалённым хостом практически так же, как через полноценный SSH-сеанс. При работе в PTY вы можете использовать стандартные функции удалённой оболочки, такие как история команд, редактирование строк и графические терминальные приложения.
Вторая половина pwncat — это фреймворк, который использует вашу удалённую оболочку для выполнения автоматизированного перечисления, созданияersistence и задач по повышению привилегий. Локальная командная строка pwncat предоставляет множество полезных функций для стандартного тестирования на проникновение, включая:
pwncat также предлагает возможность автоматически откатывать эти удалённые «изменения»Основной фреймворк для взаимодействия с удалённым хостом стремится максимально абстрагировать используемую оболочку и метод подключения, позволяя командам и плагинам бесшовно взаимодействовать с удалённым хостом.
Вы можете узнать больше о взаимодействии с pwncat и об основном фреймворке в документации. Если у вас есть идея нового метода повышения привилегий или метода persistence, пожалуйста, обратите особое внимание на документацию API. Мы приветствуем pull request'ы!
pwncat хотел бы стать швейцарским ножом для красных команд. Надеемся, вскоре будут добавлены новые возможности.
Поскольку pwncat пытается абстрактно взаимодействовать с любой оболочкой с минимальными требованиями к удалённой системе, мы столкнулись с некоторыми крайними случаями. Там, где мы их обнаруживаем, мы делаем всё возможное, чтобы учесть их и скрыть от пользователя. Однако некоторые проскочили и были замечены на практике. В таких случаях pwncat сделает всё возможное, чтобы сохранить ваш терминал, но вы можете столкнуться с некоторыми странными выводами или ошибками выполнения команд.
Хотя BSD является Unix-подобным ядром, на практике его пользовательские утилиты заметно отличаются от их аналогов в Linux. По этой причине многие автоматизированные возможности pwncat не будут работать или будут аварийно завершаться при работе с целью на основе BSD. Я постарался отловить все ошибки и крайние случаи, однако, вероятно, остаются некоторые проблемы, которые не были полностью протестированы на BSD. В любом случае, стабилизированная оболочка должна работать в среде BSD, но я не даю никаких гарантий.
Если у меня найдётся время в будущем, я, возможно, попробую стабилизировать pwncat на BSD, но в настоящее время мой фокус направлен на дистрибутивы на основе Linux. Если вы хотите внести свой вклад в улучшение работы pwncat на BSD, вы более чем приветствуетесь — можете связаться со мной или просто создать форк репозитория. Как всегда, pull request'ы приветствуются!