• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Наступательный WMI - Разведка и перечисление (часть 4)

yashechka

Генератор контента.Фанат Ильфака и Рикардо Нарвахи
Эксперт
Регистрация
24.11.2012
Сообщения
2 344
Реакции
3 563
Это четвертая часть серии "Offensive WMI", в которой больше внимания уделяется сбору информации и ее перечислению. WMI предоставляет множество классов, из которых мы можем перечислить множество вещей. Так что давайте погрузимся в неё, не теряя больше времени.

Сбор основной информации

В наших предыдущих статьях мы уже видели множество классов, которые предоставляют нам ценную информацию о системе, например StdRegProv для реестра, Win32_Process для процессов, запущенных в системе, Win32_Bios для информации о BIOS и т. д. Давайте попробуем изучить еще немного.

Информация о хосте/ОС

Знакомство с хостом/ОС - очень простой шаг, когда дело доходит до разведки. WMI имеет два класса, а именно Win32_OperatingSystem и Win32_ComputerSystem, которые предоставляют нам соответствующую информацию. В нашем примере мы будем отфильтровывать ненужную информацию, чтобы печатать только необходимую информацию.

Get-WmiObject -Class win32_computersystem -Property bootupstate,username,totalphysicalmemory,systemtype,systemfamily,domain,dnshostname,oemstringarray

1635411397015.png


Таким образом, большая часть информации, которая у нас есть сейчас, помогает нам в одном важном деле - выяснить, находимся ли мы в эмулируемой среде. Состояние загрузки для нашего текущего запуска указывает на то, что система не была загружена в отказоустойчивом режиме. Мы также можем видеть, что наш текущий пользователь - pew, а ящик не является частью какого-либо домена AD. Мы также получаем доступную для использования архитектуру процессора и оперативную память. Это полезно, например, для обнаружения виртуальных машин - если количество логических процессоров меньше 4, а доступная оперативная память меньше 2 гигабайт, то вероятность того, что устройство является виртуальной машиной, высока. Конечно, те же данные выдают свойства SystemFamily и OEMStringArray, но в контролируемых средах могут быть и другие индикаторы.

Другой класс Win32_OperatingSystem также предоставляет нам много полезной информации:

Get-WmiObject -Class win32_operatingsystem | fl *

1635411441844.png


Список каталогов


Листинг файлов в системе - очень фундаментальная операция. В WMI есть класс Win32_Directory, который помогает в перечислении файлов. В качестве альтернативы существует другой класс с именем CIM_DataFile, который также можно использовать для достижения той же цели.

Get-WmiObject -Class win32_directory

1635411460454.png


Часто бывает полезен поиск шаблонов файлов с использованием подстановочных знаков. Мы можем использовать аргумент -Filter командлета, чтобы добиться чего-то подобного. Допустим, нас интересуют пути к каталогам, в которых есть папка, называемая снимками. Запрос с помощью WMI будет выглядеть так:

Get-WmiObject -Class win32_directory -Filter 'name LIKE "%snapshots%"'

1635411478605.png


AV

Один из первых шагов, когда дело доходит до разведки, - это получить, какой продукт обеспечивает безопасность системы. WMI предоставляет класс AntiVirusProduct в пространстве имен root\SecurityCenter2, который содержит информацию об антивирусной программе, установленной в системе. В моем случае это Защитник Windows по умолчанию.

Get-WmiObject -Namespace root\securitycenter2 -Class antivirusproduct

1635411497342.png


Сервисы


Службы в системе Windows аналогичны демонам Unix или просто процессам, не связанным с пользовательским интерфейсом, работающим в фоновом режиме. Это полезная информация, когда дело доходит до повышения привилегий, особенно в случаях, когда есть служба, созданная SYSTEM со слабыми правами доступа к файлам.

Чтобы перечислить службы, нам нужно использовать класс Win32_Service. В нашем примере мы будем печатать только те службы, которые инициируются LocalSystem (или NT Authority\System). Обратите внимание на использование специальной утилиты Powershell, которая значительно расширяет вывод.

Get-WmiObject -Class win32_service -Filter 'startname="localsystem"' | select *

1635411517237.png


WMI также предоставляет несколько методов для взаимодействия со службами. Они позволяют создавать, удалять, запускать, останавливать, возобновлять, обновлять и многие другие возможности для управления службами. Чтобы перечислить методы, доступные в классе Win32_Service, мы можем использовать следующую команду:

Get-WmiObject -Class win32_service -List | select -ExpandProperty methods

1635411534395.png


Зарегистрированные пользователи


Получить авторизованных пользователей в системе довольно просто. Существует два класса - Win32_LoggedOnUser и Win32_LogOnSession, которые содержат сведения о сеансе и пользователях, вошедших в систему. Запрос класса от привилегированного пользователя дает нам гораздо больше информации о вошедших в систему пользователях:

Get-WmiObject -Class win32_loggedonuser

1635411553476.png


Из вышесказанного мы видим, что каждый вошедший в систему пользователь имеет LUID (локально уникальный идентификатор). Некоторые LUID предопределены. Например, LUID для сеанса входа в систему для системной учетной записи всегда 0x3e7 (999 десятичное), LUID для сеанса сетевой службы - 0x3e4 (996), а для локальной службы - 0x3e5 (997). Большинство других LUID генерируются случайным образом.

Каждый вошедший в систему пользователь определяет свои зависимости через свойство Dependent. Мы можем получить список идентификаторов входа в систему, тип аутентификации, время начала и объем каждого сеанса, используя класс Win32_LogOnSession:

Get-WmiObject -Class win32_logonsession | select authenticationpackage,logonid,starttime,scope

1635411602414.png


Установленные патчи


Часто бывает полезно перечислить обновления/исправления, установленные на машине. Если в системе отсутствуют важные исправления, это может открыть легкую возможность скомпрометировать систему одним быстрым выстрелом. В WMI есть класс Win32_QuickFixEngineering, который содержит информацию об установленных обновлениях и исправлениях безопасности. Запрос класса - это несложно:

Get-WmiObject -Class win32_quickfixengineering

1635411621268.png


Журналы событий

Класс Win32_NtLogEvent дает нам полезные данные о журналах событий, захваченных системой. Мы можем запросить его следующим образом:

Get-WmiObject -Class win32_ntlogevent

1635411636897.png


Каждая запись журнала содержит такие сведения, как время, источник, создавший событие, серьезность и сообщение. Серьезность указывается свойством Type в выходных данных. Говоря о типах событий, есть пять различных уровней, которые показаны в таблице ниже:

ValueMeaning
1Error
2Warning
4Information
8Security Audit Success
16Security Audit Failure

Конечно, мы можем использовать переключатель -Filter для поиска определенных типов событий.

Ресурсы

Класс Win32_Share представляет общий ресурс в системе. Это может быть дисковод, принтер, межпроцессное взаимодействие или другие совместно используемые устройства. В корпоративных сетях обычно много общих ресурсов, которые могут пригодиться во время теста на проникновение. Давайте посмотрим, как мы можем перечислить доступные ресурсы:

Get-WmiObject -Class win32_share | select type,name,allowmaximum,description,scope

1635411663327.png


В приведенном выше примере мы отфильтровали только необходимую полезную информацию с помощью select. У нас есть тип общего ресурса, имя, разрешение на одновременный доступ, описание и объем каждого доступного общего ресурса из выходных данных команды. Еще раз, типы - это константы, которые определяют тип разделяемых ресурсов:

ValueMeaning
0Disk Drive
1Print Queue
2Device
3IPC
2147483648Disk Drive Admin
2147483649Print Queue Admin
2147483650Device Admin
2147483651IPC Admin

AllowMaximum - это логическое свойство, указывающее, был ли ограничен одновременный доступ к ресурсу. Если установлено значение True, то нет ограничений на общий доступ, что в противном случае может указывать на то, что в ресурсе есть что-то конфиденциальное, или, что лучше, может быть отслеживание клиентов, обращающихся к общему ресурсу.

WMI также предоставляет такие методы, как Create, SetShareInfo и Delete для создания, обновления и удаления общих ресурсов.

1635411680017.png


Информация о сети

Сетевая информация предоставляется классом Win32_IP4RouteTable. Это дает нам детали, аналогичные команде ipconfig, но гораздо более детально.

Get-WmiObject -Class win32_ip4routetable

1635411696363.png


Говоря о сетевых вещах, я хотел бы упомянуть еще один полезный класс под названием Win32_NetworkAdapter. Запросы к нему могут дать нам полезную информацию о сетевом оборудовании, имеющемся в системе. Это, в свою очередь, полезно для обнаружения виртуальных машин, например, мы можем запустить следующие запросы, чтобы определить, виртуализирована ли система с помощью VMWare:

Get-WmiObject -Class Win32_NetworkAdapter -Filter 'name like "%vmware%"'
Get-WmiObject -Class Win32_NetworkAdapter -Filter 'manufacturer like "%vmware%"'

Учетные записи пользователей


Информация об учетной записи пользователя предоставляется классом Win32_UserAccount. Для локальной системы по умолчанию существует всего несколько учетных записей, наиболее распространенными из которых являются администратор, гость, локальные пользователи и защитник Windows (WDAGUtilityAccount). Мы можем быстро получить список пользователей с помощью:

Get-WmiObject -Class win32_useraccount

1635411730357.png


Однако для подключенного к домену устройства или контроллера домена будет несколько других, включая krbtgt, sqladmin, webadmin и т. д. Для настройки Windows Server 2012 по умолчанию есть всего 3 учетных записи, как показано ниже.

1635411740634.png


Группы пользователей

Подобно учетным записям пользователей, информация о группах пользователей предоставляется классом Win32_Group. Запросить класс в локальном ящике очень просто:

Get-WmiObject -Class win32_group

1635411754464.png


Если та же команда выполняется в корпоративной среде, например в сети, присоединенной к домену, количество групп увеличится, что даст нам более широкое представление о группах пользователей, присутствующих в сети. Сюда также будут входить локальные, текущий домен, доверенный домен и доверенный лес:
1635411762321.png


System secrets

Системные секреты - это снова полезная информация, которую стоит получать, когда дело доходит до разведки. Если у нас достаточно прав в системе, мы можем создавать теневые копии диска и пытаться извлечь оттуда секреты. Но перед этим для тех из вас, кто не знаком с теневыми копиями:

Теневое копирование - это технология, включенная в Microsoft Windows, которая может создавать резервные копии или моментальные снимки файлов или томов, даже когда они используются.

Для взаимодействия с теневыми копиями у нас есть 2 доступных метода, как показано на рисунке ниже:

1635411888822.png


Создать быструю теневую копию просто, нам просто нужно указать объем и контекст создания копии:

(Get-WmiObject -Class win32_shadowcopy -List).create("C:\", "ClientAccessible")


1635411856514.png


Чтобы добавить к этому, мы можем создать символическую ссылку, чтобы легко получить доступ к теневой копии из нашего локального проводника:

$link = (Get-WmiObject -Class win32_shadowcopy).deviceobject + "/"
cmd /c mklink /d C:\shadowcopy "$link"

1635411838846.png


Когда у нас будет готовая к использованию теневая копия, мы можем просто запустить такие инструменты, как Invoke-SessionGopher.ps1 https://github.com/Arvanaghi/SessionGopher/blob/master/SessionGopher.ps1 с параметром -Thorough для поиска секретов в файловой системе. Это даст сохраненную информацию о сеансе для PuTTY, WinSCP, FileZilla, SuperPuTTY, RDP и т. д. В моем случае я нашел несколько сохраненных сеансов RDP и сеансов PuTTY с использованием сценария.

1635411812894.png


Заключение

Итак, это все о сборе информации через WMI для одной статьи в блоге. Мы увидели, как с легкостью можно собрать столько полезных данных всего несколькими нажатиями клавиш. Конечно, представленная выше информация не является исчерпывающей, и есть бесконечные возможности, которые следует учитывать, когда дело доходит до разведки.

На этом пока, ребята, я встречусь с вами в нашем следующей статье, который будет посвящен перечислению Active Directory через WMI.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх