Тема четвертой части сильно отличается от того, о чем мы говорили ранее. Сегодня мы коснемся шеллов на основе технологии WMI.
Автор: Nikhil SamratAshok Mittal
Предыдущие статьи данного цикла:
Тема четвертой части сильно отличается от того, о чем мы говорили ранее. Сегодня мы коснемся шеллов на основе технологии WMI.
Запускать команды и скрипты, используя WMI, мы можем при помощи командлета Invoke-WmiMethod. Однако командлет не возвращает никаких выходных данных. Содержимое полей ReturnValue и ProcessId говорит о том, что *возможно* команда выполнилась успешно.
Рисунок 1: Пример запуска командлета Invoke-WmiMethod
Обратите внимание, что в примере выше нам нужен валидный логин/пароль в системе жертвы. Я не особый сторонник WMI, поскольку эта технология плохо совместима с NAT и фаерволами, но для расширения кругозора вполне сойдет. Невозможность получить результат убивает всю прелесть от запуска команд и скриптов. Однако хорошая новость в том, что Андрей Думитреску предложил решение этой проблемы. Решение заключается в том, чтобы закодировать результат выполнения в Base64 и сохранить в пространствах имен, принадлежащих WMI, с последующим раскодированием на машине злоумышленника. Джесси Дэвис (@secabstraction) реализовал эту идею в виде набора PowerShell-скриптов.
На основе кода, написанного Джесси, представляю вам свою разработку Invoke-PowerShellWmi. Скрипт организует интерактивную PowerShell-сессию при помощи WMI.
Для начала работы необходимо выполнить следующие команды:
PS C:\> . C:\nishang\Shells\Invoke-PowerShellWmi.ps1
PS C:\> Invoke-PowerShellWmi -ComputerName domainpc -UserName bharat\domainuser
Обратите внимание, что для работы скрипта необходима административная учетная запись на машине жертвы (как, впрочем, и при обычных операциях, выполняемых по технологии WMI). Административные привилегии можно получить при помощи выгрузки пароли, кражи токенов и т. д.
Ниже показан пример использования скрипта:
Рисунок 2: Пример использования скрипта Invoke-PowerShellWmi
Как видно из рисунка выше, результаты выполнения выводятся как встроенных WMI-команд, так и команд на базе PowerShell.
При помощи параметра –EncodedCommand можно запускать полноценные PowerShell-скрипты.
Рисунок 3: Пример использования закодированного параметра
Мы только что запустили закодированный скрипт Invoke-PowerShellTcpOneLine, используя технологию WMI.
По умолчанию доступен шелл на базе PowerShell, однако, используя параметр –ShellType, таким же образом можно работать с оболочкой cmd.
Анализ в WireShark показывает, что мы имеет дело с трафиком, свойственным технологии WMI.
Рисунок 4: Анализ трафика в WireShark
Собранные пакеты можно скачать по следующей ссылке: https://drive.google.com/folderview?id=0B-Hsu8q12kG3fnBMWlhFQ2VqaDFLM3BheVpyOFdrUExKcGRLbjExcURfMHBaSkNCanFiQWM&usp=sharing
Пространства имен, создаваемые в процессе, помечаются как «SYSINFOS» до тех пор, пока не будет указано иное. После окончания работы не забудьте вести команду «exit» для очистки следов в системе жертвы.
Видео демонстрация работы со скриптом Invoke-PowerShellWmi:
Собираем и анализируем опыт профессионалов ИБ