11.11.2015

Мастер-класс по работе с PowerShell. Часть 4 – Шелл на базе технологии WMI

image

Тема четвертой части сильно отличается от того, о чем мы говорили ранее. Сегодня мы коснемся шеллов на основе технологии WMI.

Автор: Nikhil SamratAshok Mittal

Предыдущие статьи данного цикла:

Тема четвертой части сильно отличается от того, о чем мы говорили ранее. Сегодня мы коснемся шеллов на основе технологии WMI.

Запускать команды и скрипты, используя WMI, мы можем при помощи командлета Invoke-WmiMethod. Однако командлет не возвращает никаких выходных данных. Содержимое полей ReturnValue и ProcessId говорит о том, что *возможно* команда выполнилась успешно.

http://1.bp.blogspot.com/--37calxkSCY/VVRj1e-nc5I/AAAAAAAABSs/BIzpiHpYof8/s1600/Invoke-WmiMethod.png

Рисунок 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). Административные привилегии можно получить при помощи выгрузки пароли, кражи токенов и т. д.

Ниже показан пример использования скрипта:

http://2.bp.blogspot.com/-3sHQ4Z1URjs/VVSGPT4K6TI/AAAAAAAABS8/QK4y_z6uDV0/s1600/Invoke-PowerShellWmi.png

Рисунок 2: Пример использования скрипта Invoke-PowerShellWmi

Как видно из рисунка выше, результаты выполнения выводятся как встроенных WMI-команд, так и команд на базе PowerShell.

При помощи параметра –EncodedCommand можно запускать полноценные PowerShell-скрипты.

http://4.bp.blogspot.com/-5K1abw5M5r4/VVSJC2bohlI/AAAAAAAABTI/brs3XR19Mts/s1600/Script_Execution.png

Рисунок 3: Пример использования закодированного параметра

Мы только что запустили закодированный скрипт Invoke-PowerShellTcpOneLine, используя технологию WMI.

По умолчанию доступен шелл на базе PowerShell, однако, используя параметр –ShellType, таким же образом можно работать с оболочкой cmd.

Анализ в WireShark показывает, что мы имеет дело с трафиком, свойственным технологии WMI.

http://3.bp.blogspot.com/-BgiTfBQ8J28/VVSPXz2X8ZI/AAAAAAAABTY/9fk2cmfZunU/s1600/Invoke-PowerShellWmi.pcapng%2B%2B%2B%5BWireshark%2B1.12.4%2B%2B(v1.12.4-0-gb4861da%2Bfrom%2Bmaster_2015-05-14_17-34-33.png

Рисунок 4: Анализ трафика в WireShark

Собранные пакеты можно скачать по следующей ссылке: https://drive.google.com/folderview?id=0B-Hsu8q12kG3fnBMWlhFQ2VqaDFLM3BheVpyOFdrUExKcGRLbjExcURfMHBaSkNCanFiQWM&usp=sharing

Пространства имен, создаваемые в процессе, помечаются как «SYSINFOS» до тех пор, пока не будет указано иное. После окончания работы не забудьте вести команду «exit» для очистки следов в системе жертвы.

Видео демонстрация работы со скриптом Invoke-PowerShellWmi: