Хакер №10/08 (118) wmi-трюки для хакера: Разбираемся с wmi




Скачать 353.41 Kb.
страница 1/5
Дата 31.08.2016
Размер 353.41 Kb.
  1   2   3   4   5
Хакер № 10/08 (118)

WMI-трюки для хакера: Разбираемся с WMI



Андрей «Skvoznoi» Комаров ([email protected])

Затеяв диалог с администратором Windows, ты не раз услышишь термин WMI (он же – Windows Management Interface). И немудрено, потому что с помощью этого интерфейса можно делать множество вещей. Например, искать в локалке расшаренные ресурсы, создавать списки процессов, установленных в системе приложений и загруженных драйверов. Словом, штука полезная.

Основы WMI

Итак, WMI – это специально разработанный интерфейс для доступа к элементам ОС и выполнения административных задач в Windows-среде. Отличным инструментом он будет, когда требуется сделать что-либо одними лишь штатными средствами операционной системы.

Для обращения к WMI можно использовать консоль WMI (wmic.exe), о которой речь пойдет немного позже, или же писать собственные сценарии на Jscript, VbScript (чем мы и займемся). Запуск сценариев осуществляется с помощью встроенной в Windows компоненты – WSH (Windows Scripting Host). Для написания скриптов можно использовать самые разные языки, так как WSH – это сервер сценариев, который не зависит от языка. Он представляет собой провайдера COM-компонентов, с помощью которых можно гибко обращаться с системой (узнавать шары, софт, запускать и удалять сервисы, серфить по файловой системе, узнавать информацию о пользователях системы и многое другое).

Весь WMI состоит из двух основных элементов:



1. COM-серверов, являющимися провайдерами для добычи самой разнообразной информации (%SystemRoot%\System32\Wbem\) и библиотеки исполнения сценариев WMI scripting library

2. Менеджера объектов CIM (Common Information Model Object Manager, CIMOM). Он отвечает за транспорт данных от обращений приложений к интерфейсам WMI и обратно. Встроенный репозиторий хранит в себе классы и объекты. Дело в том, что CIM создает представления в виде классов, используя которые мы получаем доступ к разной информации. Объекты CIM являются иной категорией классов – это их экземпляры. Соответственно, классы могут наследоваться, образовывать группы, иметь свойства (как и объекты). Как можно догадаться, классов набегает очень много, поэтому для их иерархической организации используются пространства имен. По умолчанию их четыре: CIMV2, Default, Security и WMI. Спешу обрадовать, что в каждом есть свои подпространства. Сейчас нас интересуют CIMv2 и WMI, так как они содержат наиболее перспективные для нас классы. Просмотреть их можно с помощью встроенных в систему средств: wbemtest -> подключить (connect) -> задать нужное пространство имен (namespace) -> перечислить классы (enum classes) -> рекурсивно -> ОК.

Вообще, существует целая куча средств для просмотра самих классов, их наследований и зависимостей. Одно из самых популярных после wbemtest – это браузер классов CIM Studio. Для примера, попробуй подключиться к пространству имен Root/CIMv2, перечисли классы (Enum Classes) и найди в нем Win32_Service. Стало быть, этот класс входит в пространство имен CIMv2. А теперь попробуем запустить «на коленке»: wbemtest -> опять подключаем тоже пространство имен -> Enum Instanses -> пишем туда Win32_Service ->Immediate only. В ответ получишь список собственных сервисов. С другой стороны, если ты расковыряешь ту же тему с помощью CIM Studion, то увидишь, что Win32_Service – это субкласс Win32_BaseService (CIM_Service). В системе менеджер объектов выражен в виде исполняемого файла \winnt\system32\wbem\winmgmt.exe, который работает как сервис.

Первый скрипт

Знание классов не оставит тебя беспомощным в самых разных ситуациях. Приведу пример из своей любимой тематики: как с помощью класса MSNDis_80211_BSSIList пространства имен WMI можно узнать информацию обо всех доступных в округе WiFi-сетях:



Пример на VBScript (.vbs)

on error resume next


set objSWbemServices = GetObject("winmgmts:\\.\root\wmi")
set colInstances = objSwbemServices.ExecQuery("SELECT * FROM MSNDis_80211_BSSIList")

for each obj in colInstances


if left(obj.InstanceName, 4) "WAN " and right(obj.InstanceName, 8) "Miniport" then
for each rawssid in obj.Ndis80211BSSIList
ssid = ""

wepk = rawssid.Ndis80211Privacy


mac = Join(rawssid.Ndis80211MacAddress, "-")

for i=0 to ubound(rawssid.Ndis80211SSid)


decval = rawssid.Ndis80211Ssid(i)
if (decval > 31 AND decval ssid = ssid & Chr(decval)
end if
next

wscript.echo ssid + " " + wepk + " " + mac


next
end if

Наряду с этим поддерживаются и такие интересные классы:

MSNDis_80211_TransmitPowerLevel
MSNDis_80211_ReceivedSignalStrength
MSNDis_80211_PowerMode
MSNDis_80211_DataRates

Впрочем, ломать голову и вспоминать «а что же нужно сделать, чтобы вывести инфу?» не придется. Достаточно знать, к какому пространству имен обратиться, какой из него класс вызвать и какие он содержит записи. Тут можно воспользоваться следующим инструментарием:



  • WMI Code Creator. Утилита позволяет генерировать сценарии VBScript, C#, VB .NET с использованием WMI. Тебе также предоставляется возможность интерпретировать написанное и радоваться полученным результатам.

  • ScriptoMatic. Просматривает весь набор WMI-классов и генерирует примеры скриптов. Очень удобно использовать сгенеренные сценарии для автоматизации какой-либо работы или системного администрирования.

Условия использования

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



1) Для вызова удаленных процедур WMI использует DCOM (ошибка «DCOM Access Denied»): dcomcnfg.exe -> Службы Компонентов (Component Services) -> Компьютеры -> Мой компьютер -> Свойства (правая кнопка мыши) -> вкладка «Безопасность COM». Предполагается, что в «Правах доступа» разрешен «АНОНИМНЫЙ ВХОД». Другой неотъемлемый фактор – разрешения на запуск и активацию. Кроме группы администраторов, которой по умолчанию разрешены удаленный запуск и активация, кому-то еще должны стоять разрешения на эти действия. Главный косяк нелепой настройки – разрешить эти привилегии группе «Все».

2) Вкладка MMC содержит вкладку «Управление Компьютером» (ее требуется добавить из Консоль -> Добавить или удалить оснастку), в которой есть отдельная оснастка расширения (extension) «Службы и приложения». Особый интерес в ней представляет «Управляющий элемент WMI». Выведи его свойства, найди вкладку «Безопасность», в которой будут отражены один или несколько древ пространств имен (Root). Эта вкладка позволяет установить безопасность на выбранное пространство, содержащее разные классы. Подразумевается, что на одном из этих деревьев или его ветви (!) – во вкладке «Безопасность» – группе, отличной от администраторов, присвоены права: «Включить удаленно». Это могут быть группы «Все», «Network Service» или созданные администратором.

3) В некоторых случаях WMI недоступен из-за запрета удаленного доступа встроенным файрволом Windows. Разрешением этой проблемы занимается команда:

netsh firewall set service RemoteAdmin enable



4) Ты написал сценарий, пытаешься запустить его, но тебе говорят: «Windows Scripting Host access is disabled on this mashine». Переведи это и смирись. Администратор отключил WSH по следующей реестровой ветке – HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Script Host\Settings\ (1 – включить, 0 – догадайся).

Наборы интерфейсов WMI доступны в штатной поставке для всей линейки Windows, за исключением Windows 95 и Windows 98. Для них требуется отдельно скачать аддон на официальном сайте Microsoft. Отметим, что при плотной работе с WMI иногда используется консольный режим (wmic). По сути, это просто консоль, дающая возможность доступа к классам. Утилита wmic.exe доступна на Windows Server 2003 и Windows XP Professional (!). На всех остальных системах ее требуется устанавливать отдельно. Она очень юзабельна, когда у тебя по каким-то причинам отсутствует доступ к графическим прибамбасам (wmic /node:SERVER1 команда). Полезность подтверждает такой удобный хинт для работы с файловой системой из консоли:

Удаление здоровых файлов с расширением .log:

wmic datafile where "drive='e:' and Extension='.log' and FileSize>'10000000'" call delete

Копирование всех .pwd-файлов в единый .txt-файл

wmic datafile where "drive='e:' and path='\\test\\' and Extension='.pwd'" call copy "e:\passes.txt"

Проверка наличия файлов-сертификатов, хотя бы слегка похожих по названию на Жору

wmic datafile where "drive='e:' and path='\\test\\' and filename like '%GeorgeBush%' and Extension='crt'" list

Аналогичные действия можно творить с помощью wmic fsdir.

Реальный пример

Как-то вечером, сидя на кухне у forb'a, мы с gorl'ом обсуждали, как наиболее элегантно получить список всех установленных на машине программ с худо-бедным их описаловом. Сценарий темы такой:

On Error Resume Next


strComputer = "."
# подключаем пространство cimv2, в котором находится класс Win32_Product
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Product)
For Each objItem in colItems
Wscript.Echo "Название: " & objItem.Caption
Wscript.Echo "Описание: " & objItem.Description
Wscript.Echo "Дата установки на машину" & objItem.InstallDate
Wscript.Echo "Версия: " & objItem.Version

Кроме этих полей, имеется множество других. Оставляем их тебе на личное изучение. Запуск: cscript.exe (для программ, работающих в консоли) / wscript.exe (для программ, имеющих графический интерфейс) script.vbs. Заметим, что сценарий, предназначенный для работы в консоли, успешно выполнится из wscript.exe, но это потребует подтверждения выводимых данных пользователем.

Как ты уже мог убедиться, сама операционная система содержит мощные инструменты для выполнения разнообразных действий и операцией. Существуют и другие сервисы и службы, облегчающую нашу жизнь, например, SC – утилита для доступа к Service Control Manager and Services. С ее помощью можно гибко управлять сервисами (останавливать, включать определенного пользователя) и драйверами. Например, простым запросом я вывожу список всех загруженных в систему драйверов: Sc query type= driver.

Хакерский trick: средствами WMI выцепить все обновления, которые установлены на машине, естественно, находящейся в твоей же сети. Для этого можно воспользоваться таким трюком из консольного режима WMI:

wmic /node:10.222.1.62 os assoc
wmic /node:10.222.1.62 qfe list

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

WMI поддерживается в любом мало-мальски разумном языке высокого уровня, что доказывает большую гибкость технологии. Приведу очень простой, на мой взгляд, пример, использующий всю мощь WMI (смотри скриншот). Он просматривает все работающие в данный момент сервисы, с подробным описанием, и установленные приложения на удаленной машине. Так как ваш покорный слуга является заядлым python'истом, пример ввиду идеологических соображений написан на соответствующем языке. Зависимости: win32 extensions from Mark Hammond / wmi module (timgolden.me.uk).

INFO


Для корректной работы вызова Win32_Product с удаленной машины требуется наличие установленного компонента WMI Windows Installer Provider. (product.png)
  1   2   3   4   5


База данных защищена авторским правом ©infoeto.ru 2022
обратиться к администрации
Как написать курсовую работу | Как написать хороший реферат
    Главная страница