
PowerShell в Slack C2
Этот модуль PowerShell включает различные функции, использующие Slack API для создания канала управления и контроля. Основная функция Start-Shell подключается к указанному пользователем каналу Slack и выполняет аутентификацию с помощью предоставленного токена аутентификации API для заданной команды Slack и пользователя. Любая команда, введенная в канал, затем будет выполнена (в PowerShell) на хосте.
Проект SlackShell требует PowerShell версии 3 и выше из-за использования Invoke-RestMethod для вызовов API. Дальнейшая разработка будет продолжать использовать текущие командлеты и функции PowerShell. Однако версия для PowerShell v2 была создана в SlackShell-Poshv2.psm1.
Дополнительные PS-скрипты могут быть импортированы в текущий сеанс путем их предварительной загрузки в канал Slack. Функция импорта загружает файлы, которые по умолчанию размещены на https://slack-files.com, и импортирует их в память. Файлы не сохраняются на диске. И наоборот, функция загрузки может использоваться для сохранения локальной копии любого файла на диск.
Локальные файлы могут быть загружены в канал Slack через API с помощью функции загрузки.
При необходимости можно запустить отдельный процесс PS для выполнения команды с использованием встроенного командлета Invoke-Command.
Запускает мониторинг канала Slack для поиска команд, которые будут выполняться в PowerShell. Подключается к каналу Slack каждые $sleep секунд и извлекает все новые команды. Команды будут выполнены на хосте в PowerShell.
Отправляет сообщение в указанный канал Slack через API. Сообщения отправляются с текстовым заголовком, а основной текст сообщения представляет собой вложение Slack.
Запускает новый процесс и выполняет команду в PowerShell на хосте. Использует метод Start-Job в PowerShell для создания нового процесса, ожидает завершения задания и возвращает вывод.
Выполняет команду в PowerShell на хосте в текущем контексте запущенного процесса и возвращает вывод.
Возвращает все сообщения в указанном канале Slack от самого старого периода до настоящего времени. Сообщения возвращаются в формате JSON в соответствии со спецификациями API.
Использует вызов Slack API для проверки, действителен ли предоставленный токен API.
Использует вызов Slack API для возврата списка файлов, размещенных в данный момент в канале Slack.
Обновляет список файлов, затем загружает указанный файл в память, создает новый модуль и импортирует его. Команды, специфичные для этого модуля, затем могут вводиться напрямую в канал Slack. Загруженный файл не сохраняется на диске. Эта функция считается бета-версией, пока проводится дополнительное тестирование. Некоторые модули работают нестабильно.
Обновляет список файлов, затем загружает указанный файл на диск. Можно указать дополнительный путь для сохранения; по умолчанию используется текущее расположение.
Загружает локальный файл в канал Slack.
Токен API, используемый для аутентификации. Этот токен представляет конкретного пользователя в конкретной команде Slack. Более подробную информацию можно найти здесь: https://api.slack.com/custom-integrations/legacy-tokens
Идентификатор канала, указывающий, какой канал Slack в команде будет использоваться. Весь текст в этом канале будет обрабатываться как команды на хосте при запуске Start-Shell. ID канала можно найти в URL при доступе к странице канала через веб-интерфейс Slack.
Пример: https://slackteam1.slack.com/messages/ABC123456. ID канала — "ABC123456".
Import-Module ./SlackShell.psm1
Start-Shell -Token "xoxp-175828824580-175707545555-176600001223-826315a84e533c482bb7e20e8312fh45k" -Channel "ABC123456" -Sleep 5
Присоединитесь к тому же каналу Slack от имени другого пользователя, отличного от того, который использовался для создания токена. Все, что написано в канале другим пользователем, будет выполнено на хосте в том же контексте локального пользователя, который использовался для запуска скрипта. В качестве альтернативы можно использовать «runjob» для выполнения команд во вновь созданном процессе PowerShell.
Закрывает оболочку и соединение.
Изменяет каталог в контексте основного процесса. Можно использовать относительные пути (например, cd ..).
Изменяет время паузы.
Выводит список доступных файлов в связанном канале Slack.
Импортирует указанный файл. Файл должен быть опубликован в используемом канале Slack.
Загружает указанный файл на диск и сохраняет его в указанном (необязательно) пути. Файл должен быть опубликован в используемом канале Slack.
Загружает локальный файл в Slack и публикует его в используемом канале.
Выполняет указанную команду в новом процессе PowerShell.
Вдохновение для работы с Slack API в PowerShell приписывается Уоррену Фрейму (Warren Frame). Его репозиторий стал отличным ресурсом для начала: https://github.com/RamblingCookieMonster/PSSlack
Особая благодарность @thesubtlety за портирование на POSHv2 и добавленные улучшения.