Атаки на Active Directory: часть 7
Для входа пользователей как локально, так и удаленно, Windows определяет различные типы входа в систему, которые важны для злоумышленника по нескольким причинам. Во-первых, не каждый тип входа в систему может использоваться любым пользователем. Во-вторых, многие типы входа в систему кэшируют учетные данные в процессе lsass
или даже в секретах LSA
, которые могут быть восстановлены пентестером.
Интерактивный вход
Интерактивный вход в систему или локальный вход в систему происходит, когда происходит вход в систему на физической машине или при использовании runas
. Учетные данные кэшируются в процессе lsass
компьютера.
Интерактивный вход в систему с runas
При этом типе входа в систему, в случае локальных учетных записей, компьютер проверяет пароль, сравнивая свой хэш NT с хэшем, хранящимся в SAM
. Если пользователь использует учетную запись домена, компьютер проверяет учетные данные пользователя, запрашивая TGT Kerberos
у контроллера домена, который кэшируется на компьютере. Если контроллер домена недоступен, компьютер проверяет учетные данные пользователя в хранилище кэшированных учетных данных домена (DCC), которое кэширует учетные данные последних пользователей домена, вошедших в систему на компьютере. Если учетные данные домена не кэшированы, компьютер не сможет аутентифицировать пользователя.
После проверки подлинности хэш NT, полученный из пароля, сохраняется в процессе lsass
. Для учетных записей домена также кэшируются ключи Kerberos
, полученные из пароля пользователя, и билеты для обеспечения единого входа (SSO
). На старых компьютерах кэшируется даже простой пароль.
Для выполнения интерактивного входа в систему может потребоваться SeInteractiveLogonRight
, особенно на контроллерах домена или других компьютерах с Windows Server.
Вход по сети
Вход происходит, когда вы подключаетесь к удаленному компьютеру с помощью неинтерактивной службы, такой как SMB
, RPC
, SQL
и т.д. Для такого входа вам требуется пароль, хэш NT или билет Kerberos, поэтому они восприимчивы к атакам Pass-The-Hash, передачей ключа или передачей билета. Одним из важных фактов является то, что учетные данные не кэшируются на удаленном компьютере, за исключением случаев, когда включено делегирование Kerberos.
Это, вероятно, тип входа в систему, который чаще всего используется злоумышленником из-за того, что также чаще всего используется легитимными пользователями, поскольку компьютеры постоянно подключаются друг к другу в домене.
Psexec, пакет impacket и удаленный Powershell (использующий WinRM по умолчанию) используют этот тип аутентификации, даже если они предоставляют интерактивную оболочку.
Вот несколько примеров аутентификации по сети:
В этом типе аутентификации клиент подключается к удаленному компьютеру и использует SPNEGO
для согласования протокола аутентификации и использует Kerberos или NTLM. Поскольку при использовании любого из этих протоколов учетные данные пользователя не отправляются напрямую, они не могут быть кэшированы на целевом компьютере. Исключение составляет, если включено делегирование Kerberos.
Имейте в виду, что даже если вы можете выполнить вход в сеть, может быть много причин, по которым служба не может быть использована. Во-первых, брандмауэр, запрещающий подключение к удаленным службам, а во-вторых, многие службы, доступные для аутентификации через сеть, могут использоваться только администраторами.
Например, вы можете использовать вход в сеть для доступа к некоторым общим ресурсам удаленного компьютера, но не можете запустить оболочку с помощью PsExec
, поскольку для этого требуется доступ к диспетчеру служб, доступ к которому имеют только администраторы.
Вход в качестве пакетного задания
Используется для запуска запланированных задач в контексте пользователя. Учетные данные будут кэшироваться в процессе lsass
при выполнении задачи.
Создание задачи с учетными данными пользователя
Имейте в виду, что пакетный вход в систему будет производиться при выполнении задачи, а не при ее создании. Так что, возможно, у вас есть привилегии для запуска в качестве задачи (например, SeBatchLogonRight
), но вы не можете создать задачу. Например, у операторов резервного копирования есть право SeBatchLogonRight
, но они не могут создавать задачи (по умолчанию).
При запуске задачи учетные данные проверяются и кэшируются, как и при интерактивном входе в систему.
Вход в качестве службы
Вход в качестве службы используется, когда служба будет запущена в контексте пользователя. Простой пароль хранится в секретах LSA
компьютера, а учетные данные будут кэшироваться в процессе lsass
при выполнении службы.
Создание службы с учетными данными пользователя
Имейте в виду, что вход в качестве службы будет производиться при выполнении службы, а не при ее создании. Поэтому, возможно, даже если у вас есть привилегии для входа в качестве службы (например, SeServiceLogonRight
), но вы не сможете создать ее.
При запуске службы учетные данные проверяются и кэшируются, как и при интерактивном входе в систему.
Вход в NetworkCleartext
В случае входа в систему NetworkCleartext
пароль отправляется по сети на целевой компьютер в зашифрованном виде. Этот тип входа используется Powershell, когда указана проверка подлинности CredSSP. CredSSP выполняет сетевую аутентификацию с использованием NTLM или Kerberos и при создании зашифрованного канала отправляет пароль на целевой компьютер.
Следует отметить, что учетные данные кэшируются на целевом компьютере.
Вход в систему NetworkCleartext с помощью удаленного управления Powershell
Вход с новыми учетными данными
Вход в систему NewCredentials
происходит при использовании runas
с расширением /netonly
. Затем запущенный процесс будет использовать учетные данные только для удаленных подключений, сохраняя текущий сеанс пользователя для локальных операций.
Учетные данные кэшируются в локальном процессе lsass
, чтобы их можно было использовать для сетевых подключений. Затем, когда процесс требует этого, он может выполнять вход в сеть для доступа к удаленным ресурсам домена.
Вход NewCredentials с помощью runas
Учетные данные не проверяются до тех пор, пока не будет выполнено сетевое подключение, но кэшируются при выполнении команды runas
, как и при интерактивном входе в систему (за исключением билетов Kerberos
, поскольку они извлекаются при проверке учетных данных). Этот метод позволяет кэшировать поддельные учетные данные в процессе lsass
и иногда используется BlueTeam для создания поддельных учетных данных для обнаружения злоумышленников.
Удаленный интерактивный вход
Вход в RemoteInteractive
используется при подключении к компьютеру через RDP
. RDP использует CredSSP для удаленного входа в систему, поэтому пароль отправляется по сети на целевой компьютер, а учетные данные кэшируются в удаленном процессе lsass
.
Вход в RemoteInteractive с использованием RDP
Аутентификация похожа на сетевой вход, но учетные данные отправляются на целевой компьютер, поэтому они кэшируются, как и при интерактивном входе в систему.
Чтобы иметь возможность войти на удаленный компьютер с помощью входа в RemoteInteractive
, ваш пользователь должен быть частью пользователей удаленного рабочего стола или иметь право SeRemoteInteractiveLogonRight
на целевом компьютере.
Авторизация
Как только клиент смог разрешить целевое имя хоста и пройти аутентификацию, целевая служба/программа/компьютер теперь должна знать о своих разрешениях, то есть знать имя пользователя и SID, а также группы, к которым он принадлежит. Как только эта информация станет известна, программа может решить, имеет ли пользователь достаточные привилегии для доступа к определенным объектам.
ACL
Дескриптор безопасности
Как проверить, есть ли у пользователя доступ к объекту? Проверяя его дескриптор безопасности. В Active Directory каждый объект базы данных имеет связанный с ним дескриптор безопасности в свойстве NTSecurityDescriptor
. Дескриптор безопасности хранится в двоичном формате, но его также можно преобразовать в строковый формат.
Дескриптор безопасности содержит следующую информацию о безопасности:
SID
владельца объекта;SID
основной группы владельца;DACL
(дискреционный список управления доступом, необязательно);SACL
(системный список управления доступом, необязательно).
Получение дескриптора безопасности пользовательского объекта
В каждом дескрипторе безопасности может быть два ACL
(списка управления доступом): DACL
и SACL
. ACL представляет собой список ACE (запись управления доступом). ACE в SACL определяют попытки доступа, которые будут генерировать журналы, и они могут быть полезны с точки зрения защиты.
Однако наиболее важной частью является DACL, который обычно присутствует во всех объектах, ACE которого определяет пользователей/группы, которые могут получить доступ к объекту, и тип разрешенного доступа. Обычно, когда кто-то обращается к объектному ACL, имеется в виду DACL.
ACE
Каждый ACE состоит из нескольких частей :
- тип ACE — указывает, предназначен ли
ACE
для разрешения или отказа в доступе (или доступа к журналу в случае SACL); - наследование — указывает, наследуется ли
ACE
; - идентификация — указывает участника (пользователя/группу), для которого применяется
ACE
. ОсновнойSID
сохраняется; - права — указывает тип доступа, применяемый
ACE
; - тип объекта — идентификатор
GUID
, указывающий расширенное право, свойство или дочерний объект в зависимости от флагов маски доступа. Устанавливается со значением0
, если не используется; - тип наследования — тип класса объекта, который может наследовать
ACE
от этого объекта.
ACE учетной записи пользователя
Таким образом, ACE можно использовать как для предоставления доступа, так и для его ограничения. Следует отметить, что в случае, если участнику разрешен доступ и запрещен доступ разными ACE, то ACE отказа имеет предпочтение, и доступ запрещен.
С другой стороны, ACE могут наследоваться от родительских объектов базы данных (OU
и контейнеров), и на самом деле наследуются большинство ACE, которые применяются к объектам. В случае, если унаследованный доступ противоречит не унаследованному ACE
, то не унаследованный ACE
определяет правило доступа. Таким образом, приоритет для ACE
следующий:
Существует особый случай, который не ограничен ACE
, и это владелец объекта. Владелец имеет неявное разрешение на изменение ACE
объекта (право WriteDacl
).
Кроме того, необходимо также учитывать, что в случае, если дескриптор безопасности не имеет DACL
(DACL установлен со значением NULL), любой доступ к объекту есть у всех. Однако если дескриптор безопасности имеет пустой список DACL
(нет ACE
в DACL
), то никто не имеет доступа к объекту.
Права
В ACE
могут быть указаны следующие права :
- Delete — удаление объекта;
- ReadControl — чтение дескриптора безопасности, кроме
SACL
; - WriteDacl — изменение объекта
DACL
в дескрипторе безопасности; - WriteOwner — изменение владельца объекта в дескрипторе безопасности;
- CreateChild — создание дочерних объектов для контейнеров;
- DeleteChild — удаление дочерний объект для контейнеров;
- ListContents — список дочерних объектов для контейнеров. Объект скрыт от пользователя, если это право или
ListObject
не предоставлены; - ReadProperty — чтение свойства или набора свойств, указанного в типе объекта. Если тип объекта равен
0
, то все свойства могут быть прочитаны. Не позволяет читать конфиденциальные свойства; - WriteProperty — изменение свойства, указанного в типе объекта. Если тип объекта равен
0
, то все свойства могут быть изменены; - WritePropertyExtended — выполнение подтверждения записи. Возможно, наиболее интересной проверенной записью является самостоятельное членство для групп, которое позволяет добавить вашего текущего пользователя в группу с помощью
ACE
; - DeleteTree — удаление все дочерние объекты с помощью операции удаления дерева;
- ListObject — список объектов. Объект скрыт от пользователя, если это право или
ListContents
не предоставлены; - ControlAccess — специальное разрешение, которое можно интерпретировать по-разному в зависимости от типа объекта. Если тип объекта является
GUID
конфиденциального свойства, он дает разрешение на его чтение. ЕслиGUID
расширенного права зарегистрирован в схеме базы данных, то право предоставляется. Если тип объекта нулевой (GUID
состоит из нулей), то предоставляются все расширенные права.
Существуют также некоторые общие права:
- GenericRead — ReadControl, ListContents, ReadProperty, ListObject;
- GenericWrite — ReadControl, WriteProperty, WritePropertyExtended;
- GenericExecute — ReadControl, ListContents;
- GenericAll — Delete, WriteDacl, WriteOwner, CreateChild, DeleteChild, DeleteTree, ControlAccess, GenericAll, GenericWrite.
Расширенных прав много, но вот одни из самых интересных:
- User-Force-Change-Password — изменение пароля пользователя, не зная текущего пароля для пользовательских объектов. Не путать с
User-Change-Password
, который требует знать пароль для его изменения; - DS-Replication-Get-Changes — для репликации данных базы данных. Для объекта домена. Требуется для выполнения
dcsync
; - DS-Replication-Get-Changes-All — для репликации секретных данных базы данных. Для объекта домена. Требуется для выполнения
dcsync
.
DS-Replication-Get-Changes-All непосредственно в домене
В предыдущем примере показан ACE
ExtendedRight
, который дает DS-Replication-Get-Changes-All
для группы контроллеров домена.
Помимо объектов базы данных, на компьютерах с Windows также есть много защищаемых объектов, которые также защищены локальными DACL
, управляемыми локальным компьютером. Среди этих объектов файлы/каталоги, процессы, ключи реестра или службы. Но поскольку Domain Admins
по умолчанию добавляются в локальную группу Administrators на компьютерах, обычно администратор домена может получить доступ к любому локальному объекту на компьютере с Windows. Для проверки ACL файлов можно использовать такие инструменты, как Get-Acl, icacls.
ACL-атаки
Из-за огромного количества списков ACL
, которые могут находиться в домене, управлять ими может быть сложно. Это может привести к нескольким неправильным конфигурациям, которые могут позволить злоумышленнику повысить привилегии в домене или даже в лесу (помните, что домены одного и того же леса связаны, поэтому вы можете добавить ссылку ACE на участников других доменов). Давайте рассмотрим некоторые неверные конфигурации:
- Изменение пароля пользователя — если у вас есть права
User-Force-Change-Password
илиGenericAll
на объект пользователя, вы можете взять на себя учетную запись, установив новый пароль; - Создание Kerberoasteable пользователя — если вы можете написать имя участника-службы в свойстве
ServicePrincipalName
пользователя, вы можете выполнить атакуKerberoast
на эту учетную запись и попытаться взломать ее пароль. Для записиSPN
требуется, чтобы у вас была проверенная записьValidated-SPN
сWritePropertyExtended
,GenericWrite
илиGenericAll
; - Выполнение вредоносного сценария — если вы можете изменить свойство
ScriptPath
пользователя с помощьюWriteProperty
,GenericWrite
илиGenericAll
, то вы можете установить вредоносный файл, который будет выполняться при следующем входе пользователя в систему. Можно использовать путьUNC
, чтобы указать на общий ресурс. Также может потребоваться включить флагSCRIPT
для свойстваUserAccountControl
; - Добавление пользователей в группу — если вы можете изменить свойство участников группы с помощью
WriteProperty
,GenericWrite
илиGenericAll
, вы можете добавить любого члена в группу; - Атака Kerberos RBCD — если вы можете изменить учетную запись компьютера
msDS-AllowedToActOnBehalfOfOtherIdentity
с помощьюWriteProperty
,GenericWrite
илиGenericAll
, то включится ограниченное делегирование на основе ресурсов Kerberos для другого пользователя к компьютерным службам и, наконец, будет получен доступ к компьютеру в качестве администратора; - Пароль LAPS — если вы можете прочитать конфиденциальное свойство компьютера
ms-Mcs-AdmPwd
, используемое LAPS для хранения пароля локального администратора машины, то вы можете использовать его как доступ к машине в качестве локального администратора. Вы можете определить использование LAPS на компьютере, проверив, существует ли свойствоms-Mcs-AdmPwdExpirationTime
в его учетной записи компьютера; - Атака DCSync — если у вас есть расширенные права
DS-Replication-Get-Changes
иDS-Replication-Get-Changes-All
на объект домена, то вы можете выполнить атакуDCSync
, чтобы сбросить содержимое базы данных; - Злоупотребление объектом групповой политики — если вы можете изменить контейнер групповой политики
GPC-File-Sys-Path
с помощьюWriteProperty
,GenericWrite
илиGenericAll
, вы можете изменить объект групповой политики и выполнить код на компьютерах, затронутых объектом групповой политики; - Изменение ACL — Если у вас есть права
WriteDacl
илиGenericAll
, то вы можете создатьACE
, чтобы дать любое право на объект и выполнить некоторые из предыдущих атак. Кроме того, если у вас есть правоWriteOwner
, поскольку объект-владелец имеет неявное правоWriteDacl
, вы можете изменить владельца объекта на своего пользователя, а затем изменитьACL
.
Помимо возможности повышения привилегий, списки ACL также могут быть весьма полезными и незаметными, если вы хотите создать лазейки, для сохранения собственного доступа в сети. Для создания бэкдоров есть несколько приемов сокрытия вредоносных ACE, описанных в официальном документе An ACE Up the Sleeve, написанном командой Specterops.
AdminSDHolder
AdminSDHolder
— это специальный объект в базе данных, список DACL
которого используется в качестве шаблона для дескриптора безопасности привилегированных субъектов.
Каждые 60 минут SDProp
(распространитель дескрипторов безопасности) проверяет дескриптор безопасности этих привилегированных субъектов и заменяет их DACL
копией DACL AdminSDHolder
(если они отличаются). Это делается для предотвращения изменений в списках DACL этих субъектов, но если вы можете добавить пользовательские элементы управления доступом в список DACL AdminSDHolder, то эти новые элементы управления доступом также будут применяться к защищенным субъектам.
По умолчанию «защищены» следующие участники AdminSDHolder
:
- Операторы счетов;
- Администратор;
- Администраторы;
- Операторы резервного копирования;
- Администраторы домена;
- Контроллеры домена;
- Гости домена;
- Администраторы предприятия;
- Ключевые администраторы предприятия;
- Корпоративные контроллеры домена только для чтения;
- Ключевые администраторы;
- krbtgt;
- Операторы печати;
- Контроллеры домена только для чтения;
- Репликатор;
- Администраторы схемы;
- Операторы сервера.
Привилегии
Если вы знакомы с платформой Windows, возможно, вы знаете о привилегиях пользователей, которые позволяют пользователям выполнять действия в обход ACL объектов. Например, SeDebugPrivilege
на компьютере с Windows позволяет читать/записывать любую память процесса на компьютере, даже если у вас нет прав. В Active Directory также можно злоупотреблять некоторыми привилегиями (в основном в контроллерах домена):
- SeEnableDelegationPrivilege
SeEnableDelegationPrivilege
должен быть установлен в контроллере домена для пользователя (это локальная привилегия), а затем он позволяет изменять свойствоmsDS-AllowedToDelegateTo
пользователей и флагиTRUSTED_FOR_DELEGATION
иTRUSTED_TO_AUTH_FOR_DELEGATION
из свойстваUserAccountControl
. Другими словами,SeEnableDelegationPrivilege
позволяет управлять параметрами KerberosUnconstrained
иConstrained Delegation
в домене, которые злоумышленник может использовать для повышения привилегий. По умолчанию предоставляется только учетной записи администратора.- SeBackupPrivilege
- Привилегия резервного копирования позволяет читать любой файл контроллера домена, чтобы сделать его резервную копию, которую можно использовать для чтения базы данных домена. По умолчанию предоставляется группам
Backup Operators
,Server Operators
иAdministrators
. Эта привилегия действует только при использовании API резервного копирования NTFS, доступ к которому можно получить с помощью утилиты wbadmin или Powershell WindowsServerBackup (оба требуют функции резервного копирования Windows Server). Вы также можете использоватьreg save
для доступа к секретам SAM и LSA. - SeRestorePrivilege
- Привилегия восстановления позволяет записывать любой файл на контроллере домена из резервной копии. Это может позволить злоумышленнику изменить базу данных домена. По умолчанию предоставляется группам
Backup Operators
,Server Operators
иAdministrators
. Вы можете использовать эту привилегию для изменения ключей реестра и обеспечения привилегированного выполнения команд. - SeTakeOwnershipPrivilege
- С привилегией владения вы можете стать владельцем защищаемых объектов машины, таких как файлы, процессы или ключи реестра. Владелец объекта всегда может изменить разрешения объекта. Например, можно использовать вызов API
SetNamedSecurityInfo
, чтобы стать владельцем объекта.
Помимо привилегий, используемых в домене, также полезно знать об опасных привилегиях, которые могут быть полезны для повышения привилегий на компьютере с Windows. Обычно используются следующие:
- SeDebugPrivilege
- В режиме отладки для любого процесса на компьютере пользователь может вводить код в любой процесс, что может привести к повышению привилегий, или читать память процесса, что позволяет читать, например, секреты процесса lsass пользователей, вошедших в систему.
- SeImpersonatePrivilege
- Пользователь может получить токены безопасности других пользователей на компьютере. Если уровень представления —
SecurityDelegation
, то пользователь может представиться целевым пользователем на других компьютерах домена (маркерыSecurityDelegation
связаны с учетными данными пользователя, такими как билеты Kerberos, которые можно использовать в сетевых подключениях). Если уровень маркера —SecurityImpersonation
, то целевой пользователь может представляться только на локальном компьютере (полезно для повышения привилегий).SeImpersonatePrivilege
предоставляется «NT AUTHORITY\Network Service
», который обычно используется для запуска веб-серверов и тому подобного, поэтому, если вы можете скомпрометировать веб-сервер, возможно, вы можете выдавать себя за какого-то пользователя домена в сети. Но определенно, если вы хотите повысить привилегии с помощьюSeImpersonatePrivilege
на локальном компьютере, используйте potato.
Существуют и другие привилегии, которые можно использовать для повышения привилегий на компьютерах с Windows. Если они вас интересуют, вам следует проверить репозиторий token-priv от FoxGlove, который включает документ с их описанием и PoC для их использования, настоятельно рекомендуемый ресурс.
Групповая политика
Целью Active Directory является управление компьютерами и пользователями организации. И часть процесса управления осуществляется групповой политикой.
Групповая политика — это механизм, который позволяет применять набор правил/действий к пользователям и компьютерам сети Active Directory. Вот некоторые из возможностей:
- Отключить NTLM;
- Требование к созданию сложного пароля;
- Выполнение запланированных/немедленных задач;
- Создание локальных пользователей на компьютерах;
- Установка обоев по умолчанию;
- Синхронизация файлов с OneDrive и т.д.
Для определения правил создаются объекты групповой политики (GPO). Каждый объект групповой политики определяет ряд политик, которые можно применять к определенным компьютерам доменов. Кроме того, вы можете создавать политики, которые применяются ко всему компьютеру или сеансам пользователей. Например, вы можете выполнить сценарий при запуске компьютера или при входе пользователя в систему.
Область действия объекта групповой политики
При создании объекта групповой политики необходимо указать, к каким компьютерам он будет применяться. Для этого вам необходимо связать объект групповой политики с одним из следующих контейнеров базы данных:
- Домен;
- Организационная единица;
- Сайт (контейнер для группы компьютеров, которые физически расположены близко друг к другу, не рекомендуется для объектов групповой политики).
На компьютере с Windows также может быть локальная групповая политика. Таким образом, к машине на разных уровнях можно применить множество различных объектов групповой политики, которые обрабатываются в следующем порядке:
Здесь локальные GPO имеют наименьшее предпочтение, а GPO организационной единицы — наиболее предпочтительные.
Однако для объектов групповой политики Active Directory (не локальных) также возможно установить правило No Override
. Таким образом, если установлено правило политики домена, никакие правила из подразделений не могут противоречить этому вышестоящему правилу.
Кроме того, с объектом групповой политики может быть связан запрос WMI
, что позволяет отфильтровать компьютер, к которому будет применяться объект групповой политики. Например, чтобы применить политики только к компьютерам с Windows 7.
В домене каждый компьютер проверяет наличие обновлений политики каждые 90 минут, за исключением контроллеров домена, которые делают это каждые 5 минут. Вы также можете выполнить немедленную проверку с помощью gpupdate
.
Каждый объект групповой политики идентифицируется идентификатором GUID
и состоит из двух объектов: шаблона групповой политики и контейнера групповой политики.
Шаблон групповой политики
Шаблон групповой политики — это каталог в общей папке SYSVOL
. Шаблоны могут находиться в \\\SYSVOL\\Policies\
. Каждому каталогу шаблона присваивается имя с использованием GUID
объекта групповой политики.
Каждый каталог GPO содержит следующие элементы:
- Каталог компьютера — для политик на уровне компьютера;
- Каталог пользователя — для политик уровня пользователя;
- GPT.INI — основная информация о GPO, версия и отображаемое имя.
В этих каталогах могут быть самые разные файлы и каталоги, в которых можно найти INI-файлы конфигурации, в которых указаны значения ключей реестра, членов групп или сценариев для выполнения. И, если повезет, учетные данные в сценариях или файлах предпочтений групповой политики (GPP) с тегами cpassword
. Для поиска учетных данных GPP можно использовать сценарий Get-GPPPasword.
Контейнер групповой политики
Чтобы компьютеры могли находить шаблоны групповой политики, в базе данных Active Directory хранится информация об объектах групповой политики в контейнере CN=Policies,CN=System,DC=,DC=
. Каждый объект групповой политики хранится в объекте GroupPolicyContainer
, содержащем объект групповой политики GUID
и путь к шаблону групповой политики.
Получение списка объектов групповой политики домена
GUID GPO отличается от GUID, используемого для идентификации каждого объекта в базе данных Active Directory. Также стоит обратить внимание, что если доступно изменение свойства объекта групповой политики GPCFileSysPath
, то можно установить контролируемый атакующим путь и создать вредоносный объект групповой политики, который может содержать вредоносные сценарии, которые будут выполняться на нескольких компьютерах.
С другой стороны, объекты базы данных домена, подразделений и сайтов связаны с объектами групповой политики с помощью свойства GpLink
.
Список доменов и подразделений со связанными объектами групповой политики
Список сайтов со связанными объектами групповой политики
Компьютер может определить объекты групповой политики, которые применяются к нему самому, изучив объекты OU
, к которым он принадлежит, и объект домена.
Например, компьютер, на котором находится объект CN=mypc,OU=workstations,OU=computers,DC=domain,DC=com
, будет применять объекты групповой политики рабочих станций (workstations
) и компьютерных подразделений (OU
) компьютера и домена domain.com
.
Протоколы связи
В Active Directory существует множество протоколов, которые используются для связи между компьютерами. Их можно использовать для перемещения по сети и выполнения команд в разных компьютерах в средах, поэтому важно знать об их назначении и возможностях, которые они предлагают.
SMB
SMB
(Server Message Block) — это протокол, широко используемый в сетях Active Directory (и любой другой сети Windows) для обмена файлами и обмена данными между компьютерами, как правило Windows.
Каждый компьютер Windows по умолчанию разрешает подключение к ней с использованием протокола SMB. Первоначально SMB работал через NetBIOS (службы сеансов), но в настоящее время его можно использовать непосредственно через TCP. На компьютерах с Windows порт 445/TCP
открыт для обработки соединений SMB.
SMB и связанные протоколы/порты
Атакующему полезно знать об SMB, поскольку он используется для создания общих ресурсов, которые могут содержать ценную информацию и могут использоваться для извлечения информации с компьютеров.
Общие ресурсы
Общие ресурсы похожи на папки, которые компьютер использует для доступа к другим компьютерам/пользователям в сети. Вы можете получить список общих ресурсов с помощью команды net view
, командлета Powershell Get-SmbShare
или инструмента smbclient
.
Получить доступ к общим ресурсам других компьютеров можно таким же образом, как и к папке на локальном компьютере. Для доступа к общему ресурсу можно использовать путь UNC
, например, \\dc01.contoso.local\SYSVOL\
или сопоставить удаленный общий ресурс с локальным устройством с помощью команды net use
.
Чтобы обратиться к целевому компьютеру в пути UNC
, можно использовать его DNS-имя или имя NetBIOS. Например: net view \\dc01.contoso.local
или net view \\dc01
.
Список папок внутри общей папки
Общие ресурсы очень полезны для пользователей,позволяя получить доступ к файлам других компьютеров, не беспокоясь об использовании специальной программы или чего-то подобного. Следовательно, они также очень удобны для атакующих при перемещении файлов с одного компьютера на другой с целью их эксфильтрации.
Создание общего доступа, к которому каждый может получить доступ
Общие ресурсы по умолчанию
Некоторые ресурсы заканчиваются на $
. Это общие ресурсы: C$
, ADMIN$
и IPC$
, они присутствуют по умолчанию на любом компьютере с Windows.
Для доступа к C$
и ADMIN$
необходимо иметь права администратора на целевом компьютере. С помощью этих общих ресурсов (особенно C$
) можно просматривать все компьютерные файлы. На самом деле, эти ресуррсы используются несколькими инструментами. Например, PsExec
использует ADMIN$
для развертывания двоичных файлов, отвечающих за выполнение данной команды.
Общий ресурс IPC$
— это специальный общий ресурс, используемый для создания именованных каналов.
Общий доступ к домену по умолчанию
Помимо общих общих ресурсов, контроллеры домена также публикуют общие ресурсы SYSVOL
и NETLOGON
ресурсы, доступные для любого пользователя/компьютера в домене. Они используются для хранения файлов, к которым должны обращаться все компьютеры (по крайней мере, Windows) домена.
Общий ресурс SYSVOL
обычно используется для хранения шаблонов групповой политики, используемых компьютерами для чтения групповых политик, развернутых в домене. Иногда эти политики содержат пароли. К общему ресурсу SYSVOL можно получить доступ с \\\SYSVOL
используя UNC
.
\\\\SYSVOL\\scripts
является псевдонимом для общего NETLOGON
ресурса. Общий ресурс NETLOGON
используется для хранения сценариев входа, которые необходимо выполнить для компьютеров домена.
Именные каналы
Общий ресурс IPC$
не является каталогом, но он используется для создания именных каналов, которые позволяют процессам разных компьютеров взаимодействовать между собой с помощью таких механизмов, как RPC
(удаленный вызов процедур).
Именные каналы можно рассматривать как порты TCP, которые позволяют комапьютерам обмениваться данными между собой, но внутри протокола SMB
. Они используются для вызовов RPC
, что позволяет множеству протоколов обмениваться данными через SMB
.
Обычно протоколы, работающие со стеком RPC/SMB
, определяют известный именной канал, который можно использовать для связи с удаленной службой (та же идея, что и с портами TCP/UDP). Например, RPC
использует именной канал \pipe\netlogon
для обмена сообщениями протокола Netlogon
.
HTTP
HTTP
(протокол передачи гипертекста), вероятно, является самым известным протоколом приложений, поскольку это протокол Интернета. Но помимо своей основной роли в Интернете, также широко используется в Active Directory.
HTTP используется в качестве транспортного протокола многими другими протоколами приложений, присутствующими в домене Active Directory, такими как WinRM
(и, следовательно, Powershell Remoting
), RPC
или ADWS
(веб-службы Active Directory).
Порты, используемые службами HTTP в Active Directory
Для полной интеграции с Active Directory HTTP поддерживает аутентификацию как с помощью NTLM, так и с помощью Kerberos. Это важно с точки зрения безопасности, поскольку подразумевается, что HTTP-соединения подвержены атакам делегирования Kerberos или ретрансляции NTLM.
В случае ретрансляции NTLM особенно важно отметить, что HTTP-соединения не требуют подписи, поэтому они очень уязвимы для атак перекрестной ретрансляции NTLM. На самом деле, существует множество атак, таких как PrivExchange
или захват компьютера Kerberos RBCD
, которые полагаются на ретрансляцию NTLM с HTTP на LDAP. Если заставить компьютер выполнить HTTP-запрос, используя учетную запись домена компьютера с аутентификацией NTLM, то можно скомпрометировать компьютер с помощью Kerberos RBCD.
Что касается HTTP, на компьютерах с Windows можно установить веб-сервер IIS
, который является основой для некоторых технологий, таких как WebDAV
или PSWA
(веб-доступ Powershell), которые можно включить /pswa
в конечной точке.
Кроме того, можно создать прокси-сервер SOCKS
через HTTP в установке IIS с помощью pivotnacci.
RPC
RPC
(удаленный вызов процедур) — это протокол, который позволяет программам с разных компьютеров взаимодействовать между собой, вызывая функции по сети. Microsoft разработала протокол RPC
под названием MSRPC
, который представляет собой модифицированную версию DCE/RPC
с некоторыми расширениями (определенными в RPCE).
MSRPC может использовать разные транспортные протоколы, например:
- TCP, используя порт
135
для Endpoint Mapper и порты с49152
по65535
в качестве конечных точек; - SMB с использованием именных каналов;
- NetBIOS;
- HTTP, используя порт
593
для Endpoint Mapper и порты с49152
по65535
в качестве конечных точек.
Протоколы и порты, связанные с RPC
MSRPC постоянно используется в домене компьютерами для связи между ними. Компьютеры Windows используют MSRPC для множества различных задач, таких как управление службами или чтение реестра других компьютеров.
RPC также широко используется для связи программ на локальном компьютере через LRPC (локальный RPC) или ALPC (расширенный вызов локальных процедур).
Для выполнения всех этих задач Microsoft определила несколько интерфейсов MSRPC, которые определяют различные функции, что позволяет запрашивать/вызывать различные службы компьютера из удаленной программы.
Каждый интерфейс идентифицируется UUID
(универсальным уникальным идентификатором), например 12345778-1234-ABCD-EF00-0123456789AB
, и для каждого интерфейса используются разные конечные точки. Некоторые интерфейсы имеют предопределенные конечные точки, например именные каналы. Например, диспетчер управления службами (SCMR
) использует именной канал \PIPE\svcctl
.
Однако для других интерфейсов удаленная конечная точка изменяется, поэтому для ее определения клиент RPC должен связаться с Endpoint Mapper (EPM) для разрешения удаленной конечной точки из GUID
.
В зависимости от интерфейса могут использоваться разные транспортные протоколы. Вы можете использовать утилиты impacket rpcdump.py и rpcmap.py для обнаружения конечных точек RPC (и их протоколов), которые можно использовать для подключения к данной службе на удаленном компьютере. Кроме того, можно исследовать конечные точки RPC на локальном компьютере с помощью RpcView.
Список удаленных конечных точек интерфейса LSAT
Чтобы иметь представление о том, что можно сделать с помощью RPC, вот описания некоторых из наиболее часто используемых интерфейсов. Интерфейсы разделены по транспортным протоколам для понимания, когда разные порты на компьютьере открыты.
RPC через SMB
Следующие интерфейсы/протоколы RPC могут (и они обычно) использоваться через SMB:
DHCPM (DHCP Server Management) используется для управления конфигурацией DHCP-сервера.
RPRN (Print System Remote) используется для управления печатью с удаленного компьютера. Можно использовать SpoolSample или printerbug.py, чтобы вызвать ошибку принтера через RPRN.
RRP (протокол удаленного реестра Windows) позволяет читать и изменять ключи реестра с удаленного компьютера. Можно использовать reg (если выводится ошибка «Сетевой путь не найден», вам нужно запустить службу «Удаленный реестр» на удаленной машине) или reg.py (это автоматически запускает службу «Удаленный реестр» с SRVS).) для управления удаленным реестром.
SAMR (SAM Remote) позволяет подключать SAM (Security Account Manager) других компьютеров для управления пользователями и группами. Можно использовать samrdump.py для получения информации о локальных пользователях машины.
SCMR (SCM Remote) используется для подключения к SCM (диспетчеру управления службами) других компьютеров для управления службами. Протокол, используемый утилитой PsExec для выполнения команд на удаленных компьютерах.
Через SRVS
(Server Service Remote) можно подключиться к удаленному компьютеру для управления подключениями, сеансами, общими ресурсами, файлами и транспортными протоколами. Можно использовать netview.py для перечисления сеансов или net view для перечисления общих ресурсов на удаленных машинах.
TSCH (Task Scheduler Service Remote) используется для управления задачами на удаленных компьютерах. Можно использовать atexec.py, at или schtasks для создания удаленных задач.
WKST (Workstation Service Remote) используется для управления/запроса некоторых параметров рабочей станции, таких как имя хоста, версия ОС, пользовательские сеансы или домен компьютера. Можно использовать WKST с netview.py для перечисления сеансов.
Протоколы RPC, работающие через SMB
Кроме того, существуют некоторые интерфейсы RPC, предназначенные для использования в домене для запроса контроллеров домена:
BKRP (удаленный протокол BackupKey) используется для передачи ключей DPAPI
в домене Active Directory. Вы можете использовать mimikatz lsadump::backupkeys
или dpapi.py backupkeys для получения резервных ключей DPAPI
с контроллера домена.
LSAD (политика домена LSA) — это удаленный интерфейс для LSA
(локальный орган безопасности) для управления пользователями, доверием и другими вещами, связанными с безопасностью. Используется вместе с LSAT
.
LSAT (методы трансляции LSA) позволяет преобразовывать SID
в основные имена. Используется вместе с LSAD
. Вы можете использовать lookupsid.py для перечисления пользователей на основе SID
.
NRPC (протокол удаленного входа в систему) используется в доменах, чтобы позволить компьютерам аутентифицировать пользователей, запрашивая контроллер домена. Также используется между контроллерами домена разных доменов для аутентификации пользователей разных доменов с помощью NTLM
. Кроме того, он позволяет получать такую информацию, как: информация о пользователях, доверительные отношения домена или список контроллеров домена. Можно использовать nltest для выполнения нескольких запросов. Этот протокол также известен уязвимостью Zerologon
.
Протоколы RPC, работающие через SMB (контроллер домена)
RPC через TCP
Кроме того, есть некоторые интерфейсы RPC, которые нельзя использовать через SMB, но можно использовать их напрямую через TCP:
DRSR (Directory Replication Service Remote) — это протокол, используемый контроллерами домена для репликации данных. Его также можно использовать для злоумышленника с достаточными привилегиями для репликации учетных данных пользователей домена, выполнив атаку dcsync
с помощью mimikatz lsadump::dcsync
или impacket secretsdump.py.
DCOM (Distributed COM) используется для взаимодействия с объектами COM
(Component Object Model) удаленных компьютеров. COM-объекты очень полезны и могут использоваться для многих целей, например, для выполнения команд, которые можно выполнить с помощью dcomexec.py.
WMI (Windows Management Instrumentation Remote) — это реализация Microsoft CIM
(Common Information Model), построенная на основе COM-объектов, которая позволяет запрашивать и управлять различными частями компьютера Windows из единого интерфейса. Является очень универсальным и может использоваться с wmic
, командлетами Powershell
, такими как Get-WmiObject
, или сценариями WMI impacket, такими как wmiexec.py.
WCCE (протокол регистрации клиентских сертификатов Windows) — это интерфейс DCOM
, который позволяет пользователям запрашивать сертификаты и другие службы, связанные с ЦС в ADCS
. Его можно использовать с certreq или Certify.
Протоколы RPC, работающие через TCP
WinRM
Помимо RPC, также можно использовать WinRM (удаленное управление Windows) для связи и выполнения операций на других компьютерах. WinRM — это реализация Microsoft спецификации WS-Management
(Web Services-Management), которая определяет протокол для управления компьютерами с использованием SOAP через HTTP.
WinRM использует некоторые расширения, определенные в WSMAN
и WSMV
, для доступа к объектам CIM
на удаленных компьютерах. Эти объекты CIM
похожи на обновление объектов WMI
. Можно получить доступ к объектам CIM
на локальных и удаленных компьютерах с помощью командлетов CIM, таких как Get-CimInstance
. Кроме того, можно использовать winrs
для выполнения действий на удаленных компьютерах с помощью WinRM.
Использование CIM для получения информации с удаленного компьютера
По умолчанию служба WinRM прослушивает порт 5985
для соединений HTTP и порт 5986
для соединений HTTPS. По умолчанию используется HTTP, поскольку сообщения WinRM шифруются на верхнем уровне. Однако WinRM можно настроить на использование обычных HTTP-портов 80
и 443
для соединений HTTP и HTTPS соответственно.
Удаленное взаимодействие Powershell
Одной из замечательных утилит для управления системами является удаленное взаимодействие Powershell, которая позволяет клиенту устанавливать сеанс Powershell на удаленных компьютерах и выполнять все виды задач. Удаленное взаимодействие Powershell включено по умолчанию в серверных версиях Windows (а не в клиентских, как в Windows 10), начиная с Windows Server 2012 R2.
Удаленный сеанс PowerShell с учетными данными в открытом виде
Первоначально удаленное взаимодействие Powershell было построено поверх протокола WinRM. Однако предполагалось, что он будет использоваться на компьютерах с Linux, поэтому он также поддерживает SSH в качестве транспортного протокола.
Также возможно использовать Powershell через веб-браузер, если включен Powershell Web Access (PSWA).
Стек протоколов удаленного взаимодействия Powershell
Чтобы использовать удаленное взаимодействие Powershell, можно использовать несколько PSSession CmdLet
для выполнения команд на удаленных компьютерах. Также из Linux можно установить Powershell или использовать evil-winrm.
Будьте осторожны при проведении пентеста, так как Powershell имеет множество функций ведения журналов.
Доверенные хосты
По умолчанию удаленное взаимодействие Powershell позволяет подключаться ко всем компьютерам в домене с помощью Kerberos. Однако, если необходимо подключить компьютер из другого домена, то нужно добавить этот IP-адрес к значению TrustedHost
(или использовать «*
»). В этом случае нужно настроить TrustedHost
на клиенте, а не на сервере.
Настройка TrustedHost в клиенте, чтобы разрешить подключение к любому компьютеру
SSH
SSH (Secure Shell) — это широко используемый протокол для доступа и управления системами Unix, такими как Linux, но с 2018 года он также доступен для Windows. Даже если это не связано напрямую с Active Directory, обычно ко многим компьютерам Linux, развернутым в домене, можно получить доступ через SSH, поэтому необходимо знать, как это работает и что можно с ним делать.
Службы SSH по умолчанию прослушивают порт 22
.
SSH — универсальный протокол, который позволяет пользователю получить оболочку в удаленной системе, передавать файлы (с помощью утилиты scp
) и устанавливать туннели SSH.
Он активно используется компьютерами Linux, и, возможно, вы можете использовать его для перемещения между компьютерами домена, если сможете найти некоторые ключи ssh или действительные учетные данные пользователя.
Сеанс SSH в db.contoso.local от имени пользователя foo
Более того, это также может быть с Kerberos, если целевой компьютер добавлен в домен. Аутентификацию Kerberos можно использовать, включив аутентификацию GSSAPI
(с помощью -o GSSAPIAuthentication=yes
).
SSH-туннелирование
Туннелирование SSH позволяет перенаправлять соединения с портов локального компьютера на удаленный и наоборот, поэтому это может быть очень полезно для обхода брандмауэров и сегментации сети.
SSH поддерживает три типа переадресации портов:
Переадресация локального порта
В этом случае вы можете сопоставить локальный порт с портом, доступным для удаленного компьютера. Например, если удаленный компьютер remote.contoso.local
может получить доступ к веб-сайту web.contoso.local:80
, который недоступен для вашего компьютера, вы можете сопоставить локальный порт, например, 8080
, с портом 80 web.contoso.local
с выполняющимся соединением SSH ssh -L 8080:web.contoso.local:80 [email protected]
. Затем вы можете получить доступ к удаленной веб-странице, подключившись к локальному порту 8080
.
Переадресация локального порта SSH
Переадресация удаленного порта
Переадресация удаленного порта противоположна переадресации локального порта. В этом случае можно сделать так, чтобы удаленный компьютер мог получить доступ к порту, доступному вашему компьютеру. Если, например, получить доступ к веб-странице, web.contoso.local:80
, но удаленный компьютер не может, то вы можете сопоставить порт, такой как 8080
удаленной машины, с портом 80 web.contoso.local
с помощью следующей команды ssh -R 8080:web.contoso.local:80 [email protected]
. Таким образом, люди, которые подключаются к порту 8080
удаленного компьютера, смогут получить доступ к веб-серверу.
Переадресация удаленного порта SSH
Динамическая переадресация портов
Наконец, динамическая переадресация портов позволяет взаимодействовать с любым портом, доступным для удаленного компьютера, путем создания прокси-сервера SOCKS
. Вы указываете локальный порт, где прокси-сервер SOCKS
будет слушать, и он будет пересылать все ваши запросы на удаленный компьютер через SSH
, а затем на целевой компьютер и порт. Например, вы можете настроить прокси-сервер SOCKS на порт 8080
с помощью следующей команды ssh -D 8080 [email protected]
.
Динамическая переадресация портов SSH
Иногда переадресация TCP отключена на серверах SSH, что не позволяет использовать их для создания туннелей SSH. В этих случаях можно использовать SaSSHimi для создания туннелей.
RDP
RDP (протокол удаленного рабочего стола) — это протокол, который позволяет подключаться к другим компьютерам, предоставляя графический интерфейс пользователя. Обычно используется в средах Windows для подключения и управления удаленными компьютерами, поскольку и клиент, и сервер включены в Windows по умолчанию.
Проверить использует ли компьютер RDP можно, проверив, открыты ли порты 3389/TCP
или 3389/UDP
.
Однако, чтобы получить доступ к этому компьютеру, пользователь должен быть членом Administrators
или Remote Desktop Users
локальной группы. Кроме того, будьте осторожны, поскольку в Windows разрешен только графический сеанс, поэтому подключение через RDP может привести к выходу другого пользователя из системы.
Нужно иметь в виду, что, когда машина подключена через RDP, учетные данные пользователя отправляются по сети на целевую машину (начиная с поставщика CredSSP), поэтому пользователи, подключенные через RDP, подвержены защите учетных данных путем сброса памяти процесса lsass
.
Дополнительные возможности Майкрософт
Active Directory является центральным элементом сетевой экосистемы, и многие другие продукты Microsoft использовали/расширяли ее для различных целей. Этот раздел включает некоторое программное обеспечение Microsoft, о котором злоумышленник должен знать, если оно установлено в домене.
ADCS
Службы сертификатов Active Directory (ADCS) — это одна из ролей сервера, представленных в Windows Server 2008, которая предоставляет пользователям настраиваемые службы для создания и управления сертификатами инфраструктуры открытых ключей (PKI), которые можно использовать для шифрования и цифровой подписи электронных документов, сообщений электронной почты и сообщений.
Приложения, поддерживаемые ADCS, включают безопасные беспроводные сети, виртуальные частные сети (VPN), безопасность интернет-протокола (IPSec), защиту доступа к сети (NAP), шифрование файловых систем (EFS), вход в систему с помощью смарт-карты и многое другое.
Вот соответствующие инструменты:
- Certify — запросить сертификаты и просмотреть слабые места в конфигурации
ADCS
; - ForgeCert — создание собственного/золотого сертификата для представления пользователей;
- Kekeo — в этом случае используется для получения TGT или получения хэша NT с использованием сертификата;
- Rubeus — в этом случае используется для получения TGT или получения хэша NT с использованием сертификата;
- ntlmrelayx.py — выполнение ретрансляционных атак NTLM на конечную веб-точку ADCS;
- PetitPotam — для запуска атаки ретрансляции NTLM;
- PKINITTools — в этом случае используется для получения хэша NT с использованием, среди прочего, сертификата. Инструменты Python;
- certi.py — Версия Certify Impacket. Запросите сертификат и просмотрите конфигурацию ADCS.
LAPS
LAPS
(Local Administrator Password Solution) — это утилита для управления паролями локальных администраторов компьютеров домена. LAPS рандомизирует пароли локальных администраторов, чтобы избежать повторного использования учетных данных, и периодически меняет их.
Для этого LAPS добавляет к объектам-компьютерам домена два свойства: ms-Mcs-AdmPwd
и ms-Mcs-AdmPwdExpirationTime
.
ms-Mcs-AdmPwd
хранит локальный пароль администратора компьютера, и его можно увидеть только в том случае, если ему предоставлено явное разрешение. Если можно получить пароль локального администратора, вы можете подключиться к компьютеру (используя аутентификацию NTLM) с правами администратора.
Другое свойство ms-Mcs-AdmPwdExpirationTime
может быть прочитано кем угодно (по умолчанию), поэтому для идентификации компьютеров, управляемых LAPS, можно искать объекты-компьютеры, содержащие это свойство.
Exchange
Exchange — это почтовый сервер, разработанный Microsoft, который может быть установлен на серверах Windows и интегрирован с Active Directory.
При установке Exchange в домене создается несколько групп и ACE
.
Кроме того, группа Exchange Trusted Subsystem
, к которой принадлежат все серверы Exchange, является членом группы Exchange Windows Permissions
. Таким образом, компрометация любого сервера Exchange может позволить злоумышленнику получить права на компрометацию всего домена.
Возможно, самым известным злоупотреблением разрешениями Exchange была атака PrivExchange
, которая использовала уязвимость на серверах Exchange, которая позволяла пользователю принудительно установить HTTP-аутентифицированное соединение с сервера Exchange на другой компьютер. Затем, выполнив атаку NTLM Relay с HTTP на LDAP, сервер Exchange был вынужден предоставить права DCsync
произвольной учетной записи пользователя. Microsoft также выпустила исправление для этой уязвимости в обновлении за февраль 2019 года.
Более того, группа Organization Admins
(также добавленная Exchange) может контролировать членство в Exchange Windows Permissionsи Exchange Trusted Subsystem
. Кроме того, Organization Admins
локальный администратор серверов Exchange, поэтому членство в этой группе также позволит пользователю скомпрометировать весь домен.
SQL-сервер
Microsoft SQL Server (MSSQL) — это система управления базами данных, созданная Microsoft. Обычно он устанавливается на компьютерах с Windows Server, прослушивает TCP-порт 1433
, и многие веб-приложения используют его в качестве базы данных.
SQL Server прослушивает TCP-порт 1433
, и к нему можно подключиться, используя учетные данные домена, поскольку он использует протокол TDS
, совместимый с аутентификацией NTLM и Kerberos.
Для связи с сервером SQL можно использовать протокол TDS напрямую через TCP или с помощью SMB. В случае использования TCP порт по умолчанию — 1433
, но также можно использовать динамический порт.
При использовании динамического порта выбирается случайный TCP-порт. Чтобы удаленный клиент мог обнаружить этот порт, SQL Server должен быть включен на порту UDP 1434
, ожидая запросов SQLR
(разрешение SQL Server). Можно использовать инструмент impacket mssqlinstance.py для обнаружения динамического порта SQL-сервера.
Здесь можно увидеть, что порт SQL Server — 50377
, теперь можно использовать клиент SQL Server, такой как HeidiSQL
, SQL Server Management Studio
или PowerUpSQL
, для подключения к базе данных.
SQL-запрос с динамическим портом
Важным аспектом SQL-сервера является возможность выполнения команд через команду xp_cmdshell
, если это разрешено.
Иногда в неправильно сконфигурированных средах, даже если команда xp_cmdshell
отключена, у пользователя достаточно привилегий, чтобы включить ее с помощью директивы sp_configure
.
Кроме того, команда xp_dirtree
может быть полезна для доступа к файлам в сети (с использованием путей UNC) или для выполнения аутентифицированных запросов к другим машинам с использованием учетной записи компьютера домена, чтобы вспомнить хэши NTLM для взлома или выполнить ретрансляцию NTLM.
Кроме того, невероятно полезной характеристикой для атакующего могут быть ссылки на SQL Server. SQL Server позволяет создавать связи с другими источниками данных, такими как другие базы данных SQL.
Эти ссылки интересны тем, что даже если они созданы привилегированным пользователем, например администратором, они могут использоваться любым пользователем и позволяют выполнять команды на удаленных машинах с привилегиями создателя ссылки.
Использование ссылки, созданной dbadmin
Кроме того, если вам нравится выполнять поворот через SQL Server, вы также можете преобразовать его в прокси-сервер SOCKS с помощью mssqlproxy.
Чтобы узнать о других способах злоупотребления SQL-серверами, вы можете использовать инструментарий PowerUpSQL.
- 🦋 Слитая информация - @Leakinfo
- 🎭 Наша группа > - Точка входа
- ❤️ Поблагодарить Bitcoin