![](https://habrastorage.org/getpro/habr/upload_files/f1e/8c4/8a2/f1e8c48a2be7a4392180357f50e0f8e5.png)
Тестирование систем на проникновение требует от пентестера знания большого количества различного инструментария: от банальных текстовых редакторов до штатных систем обнаружения вторжений. Одним из важных этапов пентеста является запуск команд на стороне тестируемого хоста для выполнения собственных нужд. Так как способов это сделать существует довольно большое количество, статья расскажет о нескольких методах запуска команд в инфраструктуре, где работает операционная система Windows. Будут приведены несколько инструментов и методы их использования. Также будут рассмотрены несколько особенностей, которые должны быть учтены при использовании каждого способа запуска команд.
Как запустить команду в системе
Windows - одна из самых популярных платформ, которая используется по всему миру, причем для многих пользователей она является единственным понятным интерфейсом для работы с компьютером. Как известно, данная система имеет довольно сложную структуру, которую можно изобразить с помощью абстрактного представления основных элементов.
![](https://habrastorage.org/getpro/habr/upload_files/10f/322/507/10f3225079fb7233f0fb6adeb0a63dfb.png)
Картинка взята отсюда.
Из-за такой сложной структуры пользователям может быть нелегко обнаруживать оптимальный функционал, который предоставляет операционная система для выполнения текущих задач. Допустим, нам необходимо запустить команду для конфигурации или для сбора данных о системе. Какими интерфейсами можно воспользоваться?
По умолчанию в операционной системе Windows существует ряд уже готовых оболочек для выполнения команд. Все они выполнены в виде отдельных исполняемых файлов. Небольшой список приведен ниже:
cmd.exe
- интерпретатор командной строкиpowershell.exe
- инструмент для раширения возможностей командной строки. Используется для автоматизации задач администратора. Предоставляет доступ к платформе .Net и позволяет выполнять команды на одноименном языке программированияat.exe
- инструмент для запуска команд по расписанию. Становится доступен, если запущен сервис расписаний.wmic.exe
- утилита для сбора данных из инструментария управления и диагностики операционной системойpsexec.exe
- утилита для запуска приложений и процессов на удаленной или локальной системеwscript.exe
- сервер для выполнения скриптовых сценариев в ОС (vbscript, js)cscript.exe
- запускает сценарий для командной строки
Все перечисленные выше файлы действительно находятся в любой Windows системе, начиная, как минимум, с Windows 7. Но psexec.exe к таким не относится. Это инструмент, который изначально можно было только найти среди Sysinternals tools. На сегодняшний день psexeс имеет большое количество вариаций, переписанных на различные языки программирования.
Помимо готовых команд и интерпретаторов в ОС Windows существуют также наборы функций, которые могут предоставляться различными подсистемами, например WinRM
, WMI
, Windows Service Control Manager API
.
Особенности запуска команд
Все команды, которые выполняются ОС Windows, могут быть разделены на несколько групп по различным признакам. Определим для нашего исследования следующие группы:
локальный запуск команд
удаленный запуск команд
запуск команд с теми же привилегиями
запуск команд с использованием чужих привилегий
Распределим все уже описанные методы запуска команд в ОС:
Запуск с теми же привилегиями локально и удаленно:
*script.exe
wmic.exe
cmd.exe
powershell.exe
Запуск с повышенными привилегиями локально и удаленно:
at.exe
psexec.exe
Практическая проверка
Все данные о командах были собраны по документации ОС Windows. Для теста будем использовать следующий стенд:
Vbox в качестве виртуальной среды
Windows Server 2019 Evaluation в качестве системы для развертывания сервисов AD
Kali Linux в качестве атакующей системы
набор скриптов Impaсket для доступа к подсистемам выполнения команд
IOXIDResolver.py - инструмент для получения NetBIOS имени системы и перечня сетевых интерфейсов
Все машины подключены в host-only сеть. На машине Windows Server отключены механизмы защиты (FireWall, Defender).
Для первичного доступа в систему будем использовать уязвимость Zerologon. Описание и инструменты для эксплуатации уязвимости можно найти в сети. Оставим это в качестве домашнего задания для читателя.
Шаг 1 - получение данных о сетевых интерфейсах и netBIOS имени сервера:
![](https://habrastorage.org/getpro/habr/upload_files/f1d/733/f5c/f1d733f5cbd007d78f53150cda5d8d9f.png)
Шаг 2 и 3 - запуск эксплойта Zerologon, получение hash пользователя:
![](https://habrastorage.org/getpro/habr/upload_files/1d1/1d6/9e7/1d11d69e7261da05bfef538eb9553f04.png)
Шаг 4 - для выполнения команд в системе будем использовать Administrator и его хэш. Для остальных пользователей можно будет выполнять те же самые операции. Предлагаем читателю выполнить их самостоятельно.
Теперь можно использовать полученные хэш и логин пользователя для запуска команд в системе. Для запуска команды будем пользоваться скриптами Impacket. Эти скрипты специально созданы для того, чтобы иметь возможность запускать команды в целевой системе с помощью проприетарных для Windows протоколов.
Нас интересуют следующие скрипты:
psexec.py
smbexec.py
wmiexec.py
atexec.py
Для проверки привилегий каждый запущенный скрипт будет работать в интерактивном или полуинтерактивном режиме. Тестовая команда будет - whoami
. Она как раз будет показывать, чьи привилегии сейчас использует скрипт для запуска команд.
Запуск psexec.py - скрипт повторяет работу одноименного инструмента. Особенностью запуска является задействование механизма имперсонализации. Для того, чтобы метод сработал, у пользователя должен быть доступ к расшаренным директориям системы. Скрипт за счет этого сможет создать сервис, который будет запускать cmd.exe от имени пользователя System:
![](https://habrastorage.org/getpro/habr/upload_files/7de/275/d73/7de275d737809b581912128104e527d7.png)
Запуск smbexec.py - по сути использует тот же метод, что и psexec.py, только при запуске каждой команды, стартует новый сервис на целевой системе.
![](https://habrastorage.org/getpro/habr/upload_files/2ea/489/8d7/2ea4898d71e4f9c7e5119b636ec060f7.png)
Запуск wmiexec.py - работает от имени тоже пользователя, чьи учетные данные были использованы. Обрабатываются запросы асинхронно, может занять длительное время.
![](https://habrastorage.org/getpro/habr/upload_files/cee/3db/ce6/cee3dbce6d3b4f0b022eea70247a7dd7.png)
Запуск atexec.py сопряжен с конфигурацией целевой системы. Если зависимый сервис не запущен в целевой системе, то выполнение команд невозможно.
![](https://habrastorage.org/getpro/habr/upload_files/7a7/4f8/0cf/7a74f80cfb584667d3d9098a58ff2d90.png)
Таким образом, можно запускать команды в ОС Windows удаленно. Рассмотренные методы наиболее эффективно позволяют производить сбор данных и проведения тестирования на проникновение.
На этом всё. В преддверии старта курса "Пентест. Практика тестирования на проникновение", приглашаем всех желающих на бесплатный демоурок, в рамках которого познакомимся с инструментами для исследования AD. Полученные данные будем использовать для повышения привилегий и продвижения в сети.