Skip to content
leg3ndProjects & tools
01Home02Projects03Tools04Notes
GMT+8
O/ OSCP exploitation reference
Workspace controls Memory only · 0 steps
Visualize path ↗
Command values 0 filled

Temporary connection values clear on reload. Passwords, hashes and tickets remain placeholders. Check address-family syntax in the selected command.

Reference index ↗ Search all procedures & variants ↗
01Discovery02Enumeration03Initial access04Usable access05Local privilege06Active Directory07Internal access08Evidence & reporting

QUICK REFERENCE

Discovery›Services›Web mapping›Web exploitation›Credentials›Public exploits›Sessions & transfers›Linux escalation›Windows escalation›AD enumeration›AD identity attacks›Lateral movement›Pivoting & tunnels›Execution troubleshooting›Integration & evidence›
174 methods · 15 topicsFull reference on GitHub ↗Commands · scripts · next steps
Tools/OSCP/Active Directory/AD enumeration

REFERENCE / 7 TASKS

AD enumeration

Verify domain identity, DC discovery, DNS and time. Collect directory/BloodHound data, then inspect useful groups, rights, shares and host access.

Contents ↓Tools & scripts ↓Commands ↓First-pass workflow ↓Full procedure index ↗

Contents

Jump to a task. Commands and variants are visible below; full checks and explanations stay on each technique page.

  • Domain context and directory objects
    • Establish domain identity, DC, DNS, time and route
    • Enumerate directory objects with native, LDAP and PowerView approaches
  • Artifacts and service identities
    • Read domain shares, SYSVOL and NETLOGON for useful artifacts
    • Identify service accounts and SPNs worth investigating
  • Effective rights, host access and path ranking
    • Validate effective directory-object control
    • Validate host access and volatile session candidates
    • Collect focused BloodHound data and validate an attack path

Tools & scripts

SharpHound / BloodHound CE upstream ↗
Collect compatible graph data and validate the useful edge.
NetExec upstream ↗
Validate domain identity and service-specific authorization.
PowerView upstream ↗
Inspect directory objects/rights from the current Windows context.
AD surface helpers upstream ↗
Automatically collect scoped LDAP/current-host evidence and summarize candidate clues with manual prerequisite checks; -Preview is optional.

Domain context and directory objects

Establish domain identity, DC, DNS, time and route

Contents ↑

Use when: Domain credentials or a domain-joined foothold

Needs: Correct realm/domain and account qualification; reachable DC/services, usable DNS and acceptable clock skew

Domain-joined Windows source

REM Domain-joined Windows source
whoami /all
echo %USERDNSDOMAIN%
echo %USERDOMAIN%
echo %LOGONSERVER%
nltest /dsgetdc:DOMAIN
nltest /dclist:DOMAIN
w32tm /query /status

Domain-joined Windows source

# Domain-joined Windows source
[System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
Resolve-DnsName -Type SRV _ldap._tcp.dc._msdcs.DOMAIN
Resolve-DnsName -Type SRV _kerberos._tcp.DOMAIN

Decisive output: domain FQDN, DC FQDN/IP, current user SID/groups, DNS SRV answers and a plausible time source. USERDOMAIN can be a NetBIOS label; prefer the DNS domain for LDAP/Kerberos.

Kali/off-domain source

# Kali/off-domain source
dig +short SRV _ldap._tcp.dc._msdcs.DOMAIN @DC_IP
dig +short SRV _kerberos._tcp.DOMAIN @DC_IP
nxc smb DC_IP -d DOMAIN -u USER -p 'PASSWORD'
ldapsearch -x -LLL -H ldap://DC_HOST:389 -s base -b '' \
  defaultNamingContext configurationNamingContext rootDomainNamingContext dnsHostName

Remote Windows session and double-hop caveat

REM Remote Windows session and double-hop caveat
whoami /all
klist
dir \\DC_HOST\SYSVOL

Remote Windows session and double-hop caveat

A supplied credential may create the remote session without being delegated onward to the DC. If local identity commands work but access to a second host fails, distinguish a WinRM/PowerShell remoting credential-delegation problem from invalid credentials. An interactive RDP session, explicit credentials, /netonly network credentials or an off-domain LDAP client may create a different context; always record which identity is used locally and over the network.

# Remote Windows session and double-hop caveat
IDENTITY MAP: USER/COMPUTER -> DIRECT + NESTED GROUPS -> DIRECTORY RIGHTS
HOST MAP:     COMPUTER -> OS/ROLE -> LOCAL/REMOTE-ACCESS RIGHTS -> SESSIONS
ROUTE MAP:    SOURCE -> DNS/KDC/DC/HOST -> REQUIRED PORT/SERVICE
LEAD MAP:     EVIDENCE -> HYPOTHESIS -> MINIMUM VALIDATION -> NEXT BLOCK

# Remote Windows session and double-hop caveat
AS-REQ/AS-REP: user proves knowledge of long-term key -> receives TGT
TGS-REQ/TGS-REP: TGT requests SERVICE/HOST -> receives service ticket
AP-REQ: client presents service ticket -> service authenticates client
AUTHORIZATION: target service still evaluates the represented identity/claims

Before changing credentials or tools

# Before changing credentials or tools
getent hosts DC_HOST
nc -nvz DC_IP 88
date -u

Remote Windows session and double-hop caveat

REM Remote Windows session and double-hop caveat
w32tm /query /status
klist

Read / verify → Record represented identity, realm, selected DC, resolver, clock and real source route.

If it fails → Wrong domain, KDC timeout, clock skew and account denial are distinct failures. Do not repeatedly change passwords to fix a route problem.

  • A directory bind or domain-joined identity can read relevant objects → Enumerate directory objects with native, LDAP and PowerView approaches
  • An IP connection works while hostname/Kerberos access fails → Preserve DNS, Kerberos names and time across a pivot
  • A credential appears valid but the destination's usable access is unknown → Match route, destination service and effective authorization

Prerequisite checks & examples →Full technique →

Enumerate directory objects with native, LDAP and PowerView approaches

Contents ↑

Use when: A directory bind or domain-joined identity can read relevant objects

Needs: Correct search base and authentication transport; object/attribute visibility and compatible local utilities

Windows commands

REM Baseline
net user /domain
net user USER /domain
net group /domain
net group "Domain Admins" /domain
net group "GROUP" /domain
net accounts /domain
nltest /domain_trusts /all_trusts
net view /domain
net view \\DC_HOST

RSAT ActiveDirectory module, only when installed

# RSAT ActiveDirectory module, only when installed
Get-Command -Module ActiveDirectory
Get-ADDomain
Get-ADForest
Get-ADDomainController -Filter *
Get-ADUser -Filter * -Properties Enabled,Description,MemberOf,ServicePrincipalName,UserPrincipalName,PasswordLastSet,LastLogonDate,AdminCount
Get-ADGroup -Filter * -Properties GroupScope,GroupCategory,Members,Description
Get-ADGroupMember -Identity 'GROUP' -Recursive
Get-ADComputer -Filter * -Properties DNSHostName,OperatingSystem,OperatingSystemVersion,ServicePrincipalName,TrustedForDelegation,LastLogonDate
Get-ADTrust -Filter *

RSAT ActiveDirectory module, only when installed

Get-AD* cmdlets require the RSAT ActiveDirectory module. Its absence on a client is normal; use ADSI, LDAP, PowerView or an off-domain client.

For automatic, explicitly scoped inventory, run the AD surface helpers with an explicit DC/domain. Collection runs by default, prints a bounded findings summary and saves a unique private evidence directory; -Preview displays checks without connecting. The helper preserves query failures, candidate clues, account-context limits and linked manual-validation handoffs without requesting roast material or changing directory objects.

For repeated queries, define LDAPSearch once inline, then use its purpose-labelled calls. The transparent one-off procedure below remains useful when no helper is loaded.

# RSAT ActiveDirectory module, only when installed
$root = [ADSI]'LDAP://RootDSE'
$base = [ADSI]("LDAP://" + $root.defaultNamingContext)
$searcher = New-Object System.DirectoryServices.DirectorySearcher($base)
$searcher.PageSize = 1000
$searcher.PropertiesToLoad.AddRange(@('samaccountname','userprincipalname','objectsid','memberof','serviceprincipalname','description','useraccountcontrol','pwdlastset','lastlogontimestamp'))
$searcher.Filter = '(&(objectCategory=person)(objectClass=user))'
$searcher.FindAll() | ForEach-Object { $_.Properties }

Change only the filter and requested attributes for another object class

# Change only the filter and requested attributes for another object class
# Groups
$searcher.Filter = '(objectCategory=group)'
$searcher.PropertiesToLoad.Clear()
$searcher.PropertiesToLoad.AddRange(@('samaccountname','objectsid','member','grouptype','description'))
$searcher.FindAll() | ForEach-Object { $_.Properties }

# Computers
$searcher.Filter = '(objectCategory=computer)'
$searcher.PropertiesToLoad.Clear()
$searcher.PropertiesToLoad.AddRange(@('dnshostname','operatingsystem','operatingsystemversion','serviceprincipalname','useraccountcontrol','lastlogontimestamp'))
$searcher.FindAll() | ForEach-Object { $_.Properties }

Discover the naming context

# Discover the naming context
ldapsearch -x -LLL -H ldap://DC_HOST:389 -s base -b '' \
  defaultNamingContext configurationNamingContext rootDomainNamingContext dnsHostName

# Users, groups and computers
ldapsearch -x -LLL -H ldap://DC_HOST:389 -D 'USER@DOMAIN' -W \
  -E pr=1000/noprompt -b 'DC=DOMAIN,DC=TLD' \
  '(&(objectCategory=person)(objectClass=user))' \
  sAMAccountName userPrincipalName objectSid userAccountControl memberOf description servicePrincipalName pwdLastSet lastLogonTimestamp adminCount

# Users, groups and computers
ldapsearch -x -LLL -H ldap://DC_HOST:389 -D 'USER@DOMAIN' -W \
  -E pr=1000/noprompt -b 'DC=DOMAIN,DC=TLD' \
  '(objectCategory=group)' sAMAccountName objectSid member groupType description

# Users, groups and computers
ldapsearch -x -LLL -H ldap://DC_HOST:389 -D 'USER@DOMAIN' -W \
  -E pr=1000/noprompt -b 'DC=DOMAIN,DC=TLD' \
  '(objectCategory=computer)' dNSHostName operatingSystem operatingSystemVersion servicePrincipalName userAccountControl lastLogonTimestamp

# SPNs, trusts and GPO/OU context
# SPN-bearing accounts: mapping only; do not request tickets in this block.
ldapsearch -x -LLL -H ldap://DC_HOST:389 -D 'USER@DOMAIN' -W \
  -E pr=1000/noprompt -b 'DC=DOMAIN,DC=TLD' \
  '(&(objectCategory=person)(objectClass=user)(servicePrincipalName=*))' \
  sAMAccountName servicePrincipalName memberOf userAccountControl pwdLastSet

# SPNs, trusts and GPO/OU context
# Trusted-domain objects
ldapsearch -x -LLL -H ldap://DC_HOST:389 -D 'USER@DOMAIN' -W \
  -b 'DC=DOMAIN,DC=TLD' '(objectClass=trustedDomain)' \
  cn securityIdentifier trustDirection trustType trustAttributes

# SPNs, trusts and GPO/OU context
# OUs and GPO containers; correlate links before inferring host effect.
ldapsearch -x -LLL -H ldap://DC_HOST:389 -D 'USER@DOMAIN' -W \
  -E pr=1000/noprompt -b 'DC=DOMAIN,DC=TLD' \
  '(|(objectClass=organizationalUnit)(objectClass=groupPolicyContainer))' \
  distinguishedName displayName name gPLink gPOptions

LDAP failure router

ResultInterpretationNext action
Invalid credentials (49)Bind identity/secret/context failed; subcodes may refine the causeRecheck UPN vs DOMAIN\USER, account state and exact secret; do not infer authorization
Strong(er) authentication required / confidentiality requiredServer policy rejects that bind/transportUse the permitted LDAPS/StartTLS or Kerberos/SASL path; do not disable protections
Size limit exceeded or suspiciously round countSearch is incompleteAdd paged results and narrow the base/filter
Referral/partial resultsSearch crossed a naming-context boundaryQuery the referred domain/partition or compatible Global Catalog deliberately
Bind succeeds, search emptyWrong base/filter, ACL filtering or genuinely no matchesVerify RootDSE base, test a known object and request fewer attributes
Works by IP, Kerberos failsRoute exists but name/SPN/DNS/time path is wrongUse DC FQDN, AD DNS, correct realm and synchronized time
# LDAP failure router
Import-Module .\PowerView.ps1
Get-Command -Module PowerView
Get-Domain
Get-DomainController
Get-DomainTrust
Get-DomainUser | Select-Object samaccountname,userprincipalname,description,memberof,serviceprincipalname
Get-DomainGroup
Get-DomainGroupMember -Identity 'GROUP' -Recurse
Get-DomainComputer | Select-Object dnshostname,operatingsystem,operatingsystemversion
Get-DomainUser -SPN | Select-Object samaccountname,serviceprincipalname,memberof

LDAP failure router

# LDAP failure router
NEW PASSWORD/HASH/KEY/TICKET
-> VERIFY TYPE, CLIENT, REALM, VALIDITY
-> AUTHENTICATE THROUGH ONE COMPATIBLE SERVICE
-> CONFIRM IDENTITY
-> REPEAT GROUP/ACL/SHARE/HOST/SESSION/ROUTE MAPPING

Read / verify → Retain object identifiers, group relationships and actual visibility; distinguish directory facts from inferred execution access.

If it fails → Missing RSAT/PowerView does not block built-in ADSI or LDAP. Signing/TLS policy requires a compatible authenticated transport.

  • An ACL/graph edge names GenericAll, GenericWrite, WriteDacl, WriteOwner or an extended/property right → Validate effective directory-object control
  • Group-to-host access edges or a privileged user's possible session → Validate host access and volatile session candidates
  • A user-owned SPN and a useful service-account relationship → Request a selected service ticket for offline service-account recovery
  • Directory relationships are too broad for manual comparison or a candidate chain needs ranking → Collect focused BloodHound data and validate an attack path
  • User-owned SPNs or service-account clues → Identify service accounts and SPNs worth investigating
  • A known user or directory flag indicates Kerberos preauthentication is disabled → Request AS-REP material for an account without preauthentication
  • A useful linked GPO has a potentially controllable directory or SYSVOL component → Conditional: trace GPO control to privileged policy consumption
  • Delegation configuration or computer-object write suggests a Kerberos impersonation path → Conditional: use a validated delegation or RBCD relationship
  • A CA/template configuration exposes a plausible certificate identity transition → Conditional: validate an AD CS enrollment-to-authentication path

Prerequisite checks & examples →Full technique →

Artifacts and service identities

Read domain shares, SYSVOL and NETLOGON for useful artifacts

Contents ↑

Use when: A valid domain identity and accessible file services

Needs: Reachable SMB plus share/object read rights in the chosen identity context

Inventory, then test the object

REM Inventory, then test the object
net view \\DC_HOST
dir \\DC_HOST\SYSVOL
dir \\DC_HOST\NETLOGON

Inventory, then test the object

# Inventory, then test the object
nxc smb DC_IP -d DOMAIN -u USER -p 'PASSWORD' --shares
smbclient -L //DC_IP -U 'DOMAIN/USER'
smbclient //DC_IP/SYSVOL -U 'DOMAIN/USER' -c 'recurse ON; ls'
smbclient //DC_IP/SHARE -U 'DOMAIN/USER'

Inside smbclient, use ls, cd, get FILE and a harmless approved put only when write validation is needed. Share listing, share connection, file read and file write are separate permissions.

Read / verify → Prove read access and actual artifact content; keep recovered real secrets private.

If it fails → Share listing denial does not necessarily deny a known share path, and login success does not guarantee object read access.

  • A secret-like value, key file, stored hash, challenge response or ticket → Classify the artifact and its identity context
  • A password tied to a plausible user and service → Validate known passwords and context-specific reuse
  • SMB/RPC endpoints, domain clues or new credentials → Enumerate SMB/RPC shares, files and identities

Prerequisite checks & examples →Full technique →

Identify service accounts and SPNs worth investigating

Contents ↑

Use when: User-owned SPNs or service-account clues

Needs: Directory visibility and correct service/account association; roasting requires the additional authentication and encryption conditions

Windows commands

REM Baseline
setspn -Q */*
setspn -L ACCOUNT

PowerShell commands

# Baseline
Get-DomainUser -SPN | Select-Object samaccountname,serviceprincipalname,memberof,useraccountcontrol,pwdlastset

Record account → service class/host/port → groups → password age/encryption/delegation clues → reachable service. An SPN means the account represents a Kerberos service identity; it does not mean the password is weak, the service is reachable or the account is privileged. Ticket acquisition/cracking is Block 11.

Read / verify → Record SPN, account/object type and relevant privilege relationships before prioritizing recovery.

If it fails → An SPN alone proves neither weak password nor destination admin rights. Rank by evidence and potential benefit.

  • A user-owned SPN and a useful service-account relationship → Request a selected service ticket for offline service-account recovery
  • A supported stored verifier or converted protected artifact → Recover passwords with feasible dictionary, rule and mask attacks
  • An ACL/graph edge names GenericAll, GenericWrite, WriteDacl, WriteOwner or an extended/property right → Validate effective directory-object control

Prerequisite checks & examples →Full technique →

Effective rights, host access and path ranking

Validate effective directory-object control

Contents ↑

Use when: An ACL/graph edge names GenericAll, GenericWrite, WriteDacl, WriteOwner or an extended/property right

Needs: Effective trustee membership, target object/type, inheritance/deny behavior and the exact permitted operation

PowerShell commands

# Baseline
Get-DomainObjectAcl -Identity TARGET_OBJECT -ResolveGUIDs |
  Where-Object { $_.ActiveDirectoryRights -match 'GenericAll|GenericWrite|WriteDacl|WriteOwner|ExtendedRight|WriteProperty|Self' } |
  Select-Object ObjectDN,SecurityIdentifier,ActiveDirectoryRights,ObjectAceType,AceType,IsInherited,InheritanceType

Compatible copy that actually emits IdentityReference

Use this projection only when inspecting the returned object confirms that the loaded implementation provides IdentityReference.

# Compatible copy that actually emits IdentityReference
Get-DomainObjectAcl -Identity TARGET_OBJECT -ResolveGUIDs |
  Where-Object { $_.ActiveDirectoryRights -match 'GenericAll|GenericWrite|WriteDacl|WriteOwner|ExtendedRight|WriteProperty|Self' } |
  Select-Object ObjectDN,IdentityReference,ActiveDirectoryRights,ObjectAceType,AceType,IsInherited,InheritanceType

Enumerate a target's ACL with resolved GUIDs

If the value is an unresolved SID, resolve it before applying the rule to a controlled principal.

# Enumerate a target's ACL with resolved GUIDs
Import-Module .\PowerView.ps1
Get-DomainObjectAcl -Identity TARGET_OBJECT -ResolveGUIDs |
  Where-Object { $_.ActiveDirectoryRights -match 'GenericAll|GenericWrite|WriteDacl|WriteOwner|ExtendedRight' }

# Resolve trustees
ConvertFrom-SID 'S-1-5-21-...'
Get-DomainObject -Identity 'S-1-5-21-...' | Select-Object samaccountname,objectclass

Common effects require different rights:

Read / verify → Verify principal, object SID/type and effective permitted modification; preserve original ACL/state before changes.

If it fails → A stale graph, inherited scope mismatch or deny/protected-object behavior can invalidate the edge.

  • A controlled trustee has the effective password-reset right on a useful account → Reset a target account password through a validated directory right
  • A group member-attribute write or equivalent effective right → Add a controlled identity to a group through effective membership rights
  • Effective WriteOwner or WriteDacl on a useful directory object → Convert ownership or DACL control into a narrower useful right
  • A principal has the relevant effective replication rights at the domain naming context → Use validated directory replication rights for bounded credential proof

Prerequisite checks & examples →Full technique →

Validate host access and volatile session candidates

Contents ↑

Use when: Group-to-host access edges or a privileged user's possible session

Needs: Reachable destination service and its actual authorization; session evidence must be current and collection rights sufficient

PowerShell commands

# Baseline
Find-LocalAdminAccess

Shell commands

# Baseline
nxc smb TARGET -d DOMAIN -u USER -p 'PASSWORD'
nxc smb TARGET -d DOMAIN -u USER -p 'PASSWORD' --shares

PowerShell commands

# Baseline
Get-NetSession -ComputerName COMPUTER -Verbose
Get-NetLoggedon -ComputerName COMPUTER

Windows commands

REM Baseline
PsLoggedOn.exe \\COMPUTER
  • empty/denied is inconclusive, not proof of no users;
  • a session is a time-sensitive observation, not a durable ACL;
  • a session matters only if the current identity can reach/control that host and a later credential/ticket technique applies;
  • session presence does not prove credentials are resident, accessible or reusable.

Read / verify → Record the destination-specific successful action and freshness/limits of session evidence.

If it fails → Collection denial is not proof that no sessions exist; a valid credential is not proof of every host-access method.

  • RDP is reachable and the identity may have remote-interactive logon rights → Obtain an authorized RDP interactive session
  • A WinRM listener and a candidate endpoint-authorized account → Use WinRM, WinRS or PowerShell remoting
  • A controlled Windows host may hold useful logged-on identities → Obtain accessible live logon-session credential material

Prerequisite checks & examples →Full technique →

Collect focused BloodHound data and validate an attack path

Contents ↑

Use when: Directory relationships are too broad for manual comparison or a candidate chain needs ranking

Needs: Compatible collector/deployment, explicit scope, directory rights and separate permission/connectivity for host/session collection

Low-noise directory baseline that avoids contacting every workstation

# Low-noise directory baseline that avoids contacting every workstation
.\SharpHound.exe --CollectionMethods DCOnly --OutputDirectory .\bh --ZipFileName domain-dconly.zip

Add host facts only when they can answer the next question

# Add host facts only when they can answer the next question
.\SharpHound.exe --CollectionMethods LocalGroup --ComputerFile .\candidate-hosts.txt --OutputDirectory .\bh --ZipFileName candidate-localgroups.zip
.\SharpHound.exe --CollectionMethods Session --ComputerFile .\candidate-hosts.txt --Loop --LoopDuration 00:10:00 --OutputDirectory .\bh --ZipFileName candidate-sessions.zip

# Collector variants and compatibility
# Inspect the actual collector before using copied syntax.
.\SharpHound.exe --help

Collector variants and compatibility

# Collector variants and compatibility
# Community Linux collector; flags and output compatibility vary by release.
bloodhound-python --help
bloodhound-python -u USER -p 'PASSWORD' -d DOMAIN -ns DC_IP -dc DC_HOST -c All --zip

Collector variants and compatibility

# Collector variants and compatibility
# Legacy/course PowerShell collector; use only with a compatible legacy deployment.
Import-Module .\SharpHound.ps1
Invoke-BloodHound -CollectionMethod All -OutputDirectory .\bh -ZipFileName legacy.zip

Analyze in this order

  1. Mark only identities/hosts actually controlled. A low-privilege session on a host does not make the host itself fully owned.
  2. Inspect the controlled principal's direct and nested group memberships and outbound object-control edges.
  3. Inspect reachable computers where it has local admin, RDP, WinRM/DCOM or other applicable rights.
  4. Inspect high-value goals and shortest paths only as hypothesis generation.
  5. Classify each selected edge:
    • directory/static-ish: group, ACL, GPO, OU, trust;
    • host-derived: local group or user right;
    • volatile: session;
    • route-dependent: the required host/service must be reachable now.
  6. Reproduce the minimum important relationship manually before handing it to Block 11 or 12.
# Analyze in this order
ID | CONTROLLED PRINCIPAL | RELATIONSHIP | TARGET | SOURCE EVIDENCE
   | EFFECTIVE? | ROUTE/SERVICE | VOLATILITY | EXPECTED TRANSITION
   | MINIMUM VALIDATION | STATUS | NEXT BLOCK
  1. confidence that the relationship is effective;
  2. deterministic value of the resulting identity/access;
  3. route and service availability;
  4. stability versus volatile session timing;
  5. reversibility and impact;
  6. number of unsupported assumptions.

Read / verify → Validate every useful edge against current directory/host evidence and identify the transition each one enables.

If it fails → Collector/version incompatibility and partial data are tool/visibility failures. They do not prove the environment lacks a path.

  • An ACL/graph edge names GenericAll, GenericWrite, WriteDacl, WriteOwner or an extended/property right → Validate effective directory-object control
  • Group-to-host access edges or a privileged user's possible session → Validate host access and volatile session candidates
  • Several hosts, identities, routes or competing hypotheses need coordination → Maintain state and select the next evidence-producing test

Prerequisite checks & examples →Full technique →

First pass: tools and findings

Use the steps matching your current access. Follow a concrete finding instead of completing every technique in order.

Resolve domain, DC, DNS and clock first

Use the current domain identity or the supported query context; wrong naming/transport can look like a bad password.

whoami /all
whoami /upn
nltest /dsgetdc:DOMAIN
w32tm /query /status
  • If Domain/DC preflight works → Enumerate directory objects with native, LDAP and PowerView approaches

    Enumerate users/groups/SPNs and collect supported directory relationships.

Otherwise: KDC timeout, name failure or skew: repair that dependency before judging credentials. Open Establish domain identity, DC, DNS, time and route →

Full commands & alternatives →

Collect a BloodHound directory baseline with SharpHound

Use a collector compatible with the BloodHound version. DCOnly is a directory baseline, not proof of all host/session edges.

.\SharpHound.exe --CollectionMethods DCOnly --OutputDirectory .\bh --ZipFileName domain-dconly.zip
  • If A useful object-control edge → Validate effective directory-object control

    Resolve the controlled trustee, target object and effective ACE.

  • If A host/session edge → Validate host access and volatile session candidates

    Check destination rights and session freshness independently.

  • If An account with an SPN → Identify service accounts and SPNs worth investigating

    Check the actual account/SPN and ticket-request conditions.

Otherwise: Collection is blocked or incomplete: query the relevant objects manually. Open Enumerate directory objects with native, LDAP and PowerView approaches →

Full commands & alternatives →

Additional organization and gap review informed by 0xsyr0/OSCP ↗. Tool links open upstream sources.

HomeProjectsToolsNotes
Interactive toolsOSCP notes ↗Extended OSCP workspace ↗Attack-path visualizer ↗

© 2026 Armaan. Built with curiosity.

GitHub ↗GMT+8