Невозможно отучить людей изучать самые ненужные предметы.
Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3
Надо знать обо всем понемножку, но все о немногом.
Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы
Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)
Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода
Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5
Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости
Справочник от А до Я
HTML, CSS, JavaScript
Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы
Помогли мы вам |
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Групповые политики используются повсеместно. Это удобный инструмент, позволяющий системным администраторам управлять настройками клиентских систем в домене. Сама «архитектура» групповых политик — клиент‑серверная. Чаще всего контроллер домена выступает в роли сервера, на котором создаются, настраиваются и изменяются политики, а доменные компьютеры, пользователи и иные объекты в AD — клиенты, которые эти самые политики получают и применяют.
Групповая политика называется Group Policy Object (GPO). Внутри каждой GPO есть две сущности:
CN=Policies,CN=System
;.ADMX
и .ADML
, позволяющие с помощью GPO управлять объектами в AD.GPO применяется к Organizational Units (организационным единицам). Можно считать это некой папкой, в которой находятся пользователи, компьютеры и другие объекты.
Изначально в только что созданном домене будут две политики:
Domain Controllers
.А теперь зайдем в ADUC и увидим, что наравне с OU в домене существуют и контейнеры.
Контейнеры — это лишь дополнительные объекты, позволяющие организовать структуру AD. К контейнеру нельзя привязать GPO. Чтобы применить GPO к контейнеру, сначала следует добавить его в соответствующую OU и уже к ней привязывать GPO.
GPO распространяется по сети через общий сетевой ресурс SYSVOL
, который хранится на контроллере домена. Все пользователи в домене обычно имеют к нему доступ и периодически синхронизируются для обновления настроек своих объектов групповой политики. Общий ресурс SYSVOL
по умолчанию указывает на каталог C:WindowsSYSVOLsysvol
на контроллере домена.
Для синхронизации нужно время. Иногда на обновление настроек может уйти до двух часов. Если нам требуется немедленная синхронизация, то на компьютере надо ввести команду
gpupdate /force
С GPO могут быть связаны какие‑либо права. Например, пользователь Admin11111
имеет право GenericAll
на политику UsersInfo
. Неправильная настройка таких прав приводит к появлению векторов эксплуатации, которые мы рассмотрим в сегодняшней статье.
Обнаружить доступные GPO можно следующим образом:
В результате мы получим GUID всех доступных политик.
Если у нас есть доступ к Active Directory Module, то сможем получить информацию вот так:
Get-ADObject-LDAPFilter"(ObjectClass=GroupPolicyContainer)"-PropertiesName,DisplayName,gPCFileSysPath|selectName,DisplayName,GPCFileSysPath|Format-List
Наконец, PowerView имеет такую же функциональность:
Get-NetGpo
Теперь желательно из GUID получить имя политики. Конечно, AD Module и PowerView умеют делать это самостоятельно, но в случае, если у нас есть только GUID, имя можно получить следующим образом:
# RSAT
Get-Gpo -GUID '{205F0E03-17C3-4E9B-925E-330FAD565CA1}'
# PowerView v3
Get-DomainGPO -Identity '{205F0E03-17C3-4E9B-925E-330FAD565CA1}' | select DisplayName
Мы также можем изучить политики, привязанные к определенному устройству:
# PowerView v2
Get-NetGPO -ComputerNamename.domain.com
# PowerView v3
Get-DomainGPO -ComputerIdentityname.domain.com -PropertiesName,DisplayName
Наконец, самое интересное. Пора изучать все ACL на найденные GPO, пытаясь найти мисконфиг. Сделать это можно с помощью разных средств. Чаще всего используются или BloodHound, или PowerView:
# Получение ACL на все политикиGet-NetGPO|%{Get-ObjectAcl-ResolveGUIDs-Name$_.Name}# Найти GPO, на которые пользователь student имеет праваGet-NetGPO|%{Get-ObjectAcl-ResolveGUIDs-Name$_.Name}|?{$_.IdentityReference-match"student"}
Пользователь vaska
имеет подозрительно высокие права на GPO с GUID {
. PowerView третьей версии (он же PowerView DEV) не отстает от своего младшего собрата, но отличается тем, что не умеет автоматически преобразовывать SID в понятное для человека имя пользователя, поэтому в конец каждого командлета добавляется огромная строка:
# Находим ACL на все политикиGet-DomainGPO|Get-DomainObjectAcl-ResolveGUIDs|Foreach-Object{$_|Add-Member-NotePropertyNameIdentity-NotePropertyValue(ConvertFrom-SID$_.SecurityIdentifier.value)-Force;$_}# Находим GPO, на которые у пользователя domainuser есть праваGet-DomainGPO|Get-DomainObjectAcl-ResolveGUIDs|Foreach-Object{$_|Add-Member-NotePropertyNameIdentity-NotePropertyValue(ConvertFrom-SID$_.SecurityIdentifier.value)-Force;$_}|Foreach-Object{if($_.Identity-eq$("domainuser")){$_}}# Находим GPO, на которую пользователи с RID 1000 имеют какие-нибудь права:Get-DomainObjectAcl-LDAPFilter'(objectCategory=groupPolicyContainer)'|?{($_.SecurityIdentifier-match'^S-1-5-.*-[1-9]d{3,}$')-and($_.ActiveDirectoryRights-match'WriteProperty|GenericAll|GenericWrite|WriteDacl|WriteOwner')}# Обнаружение пользователей (кроме ожидаемых, таких как Enterprise Admins, Domain Admins), которые могут изменять GPOGet-DomainGPO|Get-DomainObjectAcl-ResolveGUIDs|where{$_.ActiveDirectoryRights-match"GenericWrite|AllExtendedRights|WriteDacl|WriteProperty|WriteMember|GenericAll|WriteOwner"-and$_.SecurityIdentifier-match"S-1-5-21-3301805923-005976665-244893303-[d]{4,10}"}
|
|