>_ FIELDNOTES / Active Directory
Security fieldnotes / 02

Active Directory.
The OSCP speedrun.

Turn one credential into a clear path through the domain. Know your position, validate each transition, and use what you already control.

9 access positions69 code blocks3 practice chainsOffline ready
01Identify access
02Map the domain
03Validate
04Advance
05Verify & document
Search filters whole chapters. Use your browser’s Find for individual matches.

Objective: Start with the access you have, identify what it unlocks, and build a reproducible path through the domain to the required exam objectives.

This builds on your Windows PrivEsc guide. Tokens, integrity levels, service permissions, credential hunting, and SeImpersonatePrivilege still apply. We’ll refer back to those concepts and concentrate on what AD adds.

All examples use fictional lab systems:

text
Domain:          corp.test
NetBIOS name:    CORP
Domain controller:
                 dc01.corp.test / 10.10.10.10
Workstation:     ws01.corp.test / 10.10.10.20
Application server:
                 app01.corp.test / 10.10.10.30
Initial user:    alice

Replace example passwords, hashes, usernames, and addresses with your authorized lab values. Commands labelled Bash run on Kali; PowerShell and CMD commands run in the corresponding Windows shell.

Part 1 — Connect AD to what you already know

Your previous guide revolved around:

What do I control, which privileged identity consumes it, and can I trigger that operation?

For AD, extend that question:

Which identity can I act as, where can that identity authenticate, and what can it control there?

A typical chain looks like:

text
Valid domain user
    ↓
Readable share containing an application password
    ↓
Service account with access to another server
    ↓
Local privilege escalation on that server
    ↓
Additional credentials or a useful AD permission
    ↓
Access to a more privileged identity
    ↓
Required elevated access and proof

Every useful discovery should change your access, your knowledge of a path, or your ability to execute the next step.

1. The AD concepts you actually need

Concept Practical meaning
Domain A centrally managed collection of identities, computers, and policies
Domain controller, or DC Hosts directory services and handles domain authentication
Domain user An identity such as CORP\alice, potentially usable across multiple machines
Local user An identity belonging to one machine, such as WS01\Administrator
Domain group Membership can provide permissions on AD objects or machines
Computer account A domain identity normally ending in $, such as WS01$
SPN Identifies a service instance and the account associated with it
OU / GPO Organizes objects / applies policy to affected users and computers
AD ACL Specifies who can read or modify a directory object
Trust Allows authentication relationships across domains; investigate when relevant

Two distinctions to retain:

  • WS01\Administrator and CORP\Administrator are separate identities.
  • SYSTEM on a member server gives extensive control over that server. Domain-wide authority requires an additional path.

2. Kerberos in one minute

You need this sequence:

text
User authenticates to the DC's Kerberos service
    ↓
Receives a ticket-granting ticket: TGT
    ↓
Uses the TGT to request a ticket for a particular service
    ↓
Presents that service ticket to the target service

A TGT helps obtain service tickets. A service ticket applies to a particular service. Successful authentication still leaves the target service to decide what you may do. Microsoft Kerberos overview

That explains the main attacks:

Technique What you obtain or use
Kerberoasting Service-ticket material for offline password guessing
AS-REP roasting AS-REP material from accounts without required preauthentication
Pass-the-hash An NT hash used for supported NTLM authentication
Overpass-the-hash / pass-the-key A usable account key used to obtain Kerberos tickets
Pass-the-ticket An existing Kerberos ticket
Silver ticket A forged service ticket made using the service account’s key

3. Identify your credential material correctly

What you found What it means Typical next action
Plaintext password A candidate secret for an account Validate identity, protocol, and permissions
NT hash Password-derived NTLM key material Test supported pass-the-hash authentication
NetNTLMv2 challenge-response Material captured from an authentication exchange Offline cracking, or a separately viable relay path
$krb5tgs$... Kerberoast cracking material Crack offline
$krb5asrep$... AS-REP roast cracking material Crack offline
DCC2 / cached domain logon hash Offline cached-logon verifier Crack offline; ordinary pass-the-hash does not apply
.ccache / .kirbi Kerberos ticket material Inspect principal, service, and validity
.pfx Usually a certificate and private key Determine its identity and supported authentication use

Roasting output is not an NT hash you can immediately pass. You usually need to recover the password first.

Part 2 — The article’s nine positions

Use these as states you recognize. They overlap, and you can enter the workflow at any of them.

Position What you currently have Your immediate objective
1 Exposed AD services, no credentials Establish domain details and obtain a useful identity or entry point
2 Leaked files Extract credentials, usernames, hostnames, and constraints
3 Readable SYSVOL / policy files Inspect scripts and legacy credential exposures
4 One valid domain account Map accessible resources and attack paths
5 A normal-user shell on a domain member Combine local enumeration with domain enumeration
6 A service-account shell with SeImpersonatePrivilege Validate a compatible local elevation route
7 Local administrator access somewhere Collect accessible secrets and evaluate onward access
8 Useful rights over AD objects Turn the exact permission into a validated access change
9 Domain-admin credentials or equivalent capability Obtain the required access, verify it, and document proof

This preserves the framework from the supplied article. The procedures and qualifications below are an expanded study workflow.

Where you will probably start in the exam

The current OSCP+ guide describes an assumed-breach AD set with supplied credentials. That usually makes Position 4 a more relevant starting point than spending time trying to obtain your first username anonymously. Follow the specific instructions in your exam control panel. Official OSCP+ Exam Guide

Keep a small access ledger

text
Identity:       CORP\alice
Material:       plaintext password
Source:         supplied credentials
Validated on:   DC01 SMB and LDAP
Current rights: ordinary domain user
Readable data:  SYSVOL, NETLOGON, Engineering
Shell access:   none confirmed
Next lead:      Engineering deployment scripts

For each new account, record:

text
Who is it?
Where did the secret come from?
Where does it authenticate?
Where is it an administrator?
What AD objects can it control?
What evidence supports the next step?

This prevents repeatedly testing the same credentials or forgetting which account supplied a useful permission.

Part 3 — Establish a working environment

Before blaming an attack, verify that the environment supports it.

1. Know the domain and the DC

Useful service clues:

Port Why you care
53 DNS
88 Kerberos
135 RPC endpoint mapper
389 / 636 LDAP / LDAPS
445 SMB
1433 Common MSSQL listener
3268 / 3269 Global Catalog
3389 RDP
5985 / 5986 WinRM
Dynamic RPC ports Some remote administration and replication operations

Open ports identify available services. They do not establish that your account can use them.

From a Windows foothold:

cmd
hostname
whoami /all
ipconfig /all
echo %USERDOMAIN%
echo %USERDNSDOMAIN%
nltest /dsgetdc:corp.test

Use your previous guide to interpret the token and privileges.

2. Get DNS and time right

For Kerberos and AD collection:

  • Ensure the domain’s DNS records resolve through an appropriate resolver.
  • Ensure your clock is aligned with the lab environment.
  • Prefer the target’s correct FQDN for Kerberos.
  • Preserve the distinction between the DC used for authentication and the machine you are connecting to.

A hosts-file entry may resolve an individual hostname, but it does not supply the domain’s DNS service-discovery records.

On Kali:

bash
nslookup dc01.corp.test 10.10.10.10
nslookup -type=SRV _ldap._tcp.dc._msdcs.corp.test 10.10.10.10
date -u

When Kerberos fails, check these basics before concluding that the credentials are wrong.

3. Know the minimum tool set

Tool Job
NetExec, normally nxc Validate authentication and enumerate protocol-specific access
smbclient Browse and retrieve relevant SMB files
PowerView Query domain identities, groups, computers, and permissions
SharpHound / compatible collector Collect relationships for BloodHound
BloodHound Find and understand potential privilege paths
Impacket examples Roasting, ticket use, remote access, and credential extraction
Evil-WinRM Obtain a WinRM shell when authentication and authorization permit
Hashcat / John Offline password recovery
Your existing Windows PrivEsc tools Elevate on individual Windows machines

You need a familiar way to perform each job. Running several tools that answer the same question adds little once the result is clear.

Package names vary. Kali commonly supplies impacket-GetUserSPNs; upstream examples use filenames such as GetUserSPNs.py. Check your installed tool’s help when a flag differs.

Part 4 — Positions 1–3: no credentials, leaked files, and SYSVOL

Position 1: You have services but no credentials

Your goal is a usable lead:

  • A domain name.
  • A username.
  • Readable data.
  • A separate application foothold.

An anonymous-access check is reasonable:

bash
nxc smb 10.10.10.10 -u '' -p '' --shares

If anonymous enumeration is denied, record that result and investigate other exposed services. Repeating the same denied request does not create a new opportunity. NetExec documents separate checks for anonymous shares, users, and policy enumeration. NetExec null sessions

Possible next leads include application configuration, exposed backups, FTP content, or a web application on an in-scope host.

A denied anonymous SMB request does not prove that the intended path must be a web exploit. That conclusion in the article is too strong.

Position 2: You find a file

Apply credential hunting from the previous guide, adding domain context.

Inspect:

File detail Possible value
Username in content or filename A candidate identity
Connection string Database credentials and another host
Deployment script Service credentials, shares, or execution targets
Backup archive Configuration or credential material
Password-policy note Better offline cracking candidates
Hostname / UNC path Another system or share to investigate

For downloaded text files on Kali:

bash
rg -n -i 'password|passwd|pwd|credential|connectionstring|username' loot/

Then read the surrounding content. A search hit alone may be a placeholder, an old secret, or a credential for an unrelated application.

A filename is a clue, not proof that a matching domain account exists.

Position 3: SYSVOL and NETLOGON

These shares commonly contain policies and scripts relevant to domain clients. Authenticated readability is normal; anonymous readability is a separate configuration question.

With a valid account:

bash
smbclient //dc01.corp.test/SYSVOL -U 'CORP/alice'

The password is prompted. Within smbclient:

text
ls
cd corp.test
cd Policies
ls

Navigate deliberately and retrieve the files relevant to your investigation. smbclient provides an interactive FTP-like interface for listing directories and transferring files. Samba smbclient manual

Look for:

  • Logon and deployment scripts.
  • Referenced file shares.
  • Embedded service credentials.
  • Legacy Group Policy Preferences XML containing cpassword.

For a genuine legacy GPP cpassword, the commonly used recovery tool is:

bash
gpp-decrypt 'REPLACE_CPASSWORD'

That operation recovers the stored plaintext using the known GPP encryption key. The recovered value may be stale. Validate it before treating the account as compromised.

A modern environment may have no GPP password exposure. SYSVOL can still contain useful scripts and configuration.

Part 5 — Position 4: one valid domain user

This is the central AD position.

Your account may lack an interactive shell while still being able to query LDAP, read shares, and expose useful relationships.

Work through four tracks:

text
Identity and group information
Readable shares and files
BloodHound relationships
Authentication weaknesses

1. Validate the credential

bash
nxc smb 10.10.10.10 -d corp.test -u alice -p 'REPLACE_PASSWORD'

Interpret the result:

Result Meaning
Authentication succeeds Credentials worked for that service
SMB Pwn3d! marker NetExec identified administrative execution capability under its check
Authentication fails Investigate identity format, secret, account state, and authentication requirements
Connection fails Investigate service availability and routing before judging credentials

A successful SMB login does not by itself give you WinRM access or an elevated shell. NetExec domain authentication

2. Enumerate users and groups

From a domain-user Windows session:

cmd
net user /domain
net group /domain
net group "Domain Admins" /domain
net accounts /domain

Inspect an interesting account:

cmd
net user svc_backup /domain

With PowerView available:

powershell
. .\PowerView.ps1

Get-Domain
Get-DomainUser -Identity alice
Get-DomainGroupMember -Identity "Domain Admins"
Get-DomainComputer |
    Select-Object name,dnshostname,operatingsystem
Get-DomainUser -SPN |
    Select-Object samaccountname,serviceprincipalname

Focus on group membership, descriptions, service identities, hostnames, and the permissions of accounts you already control. These commands belong to PowerView; they are not built into every Windows installation. PowerView source and command documentation

3. Enumerate readable shares

bash
nxc smb 10.10.10.10 -d corp.test -u alice -p 'REPLACE_PASSWORD' --shares

Repeat against relevant in-scope servers, not only the DC.

Readable deployment or backup data on an application server can be more valuable than another list of domain users. Validate file access within the share: a share-level permission does not guarantee access to every file. NetExec share enumeration

4. Collect BloodHound data

One current NetExec route:

bash
nxc ldap dc01.corp.test -d corp.test -u alice \
  -p 'REPLACE_PASSWORD' --bloodhound --collection All

Import the output into a compatible BloodHound installation. NetExec currently documents CE as its default ingestor. NetExec BloodHound collection

Alternatively, from a suitable Windows session:

powershell
.\SharpHound.exe --Domain corp.test --CollectionMethods All

All is broad collection. DCOnly collects directory relationships without contacting member computers, which means it cannot replace host-based collection when you need those observations. Keep your collector compatible with your BloodHound version. SharpHound collection methods

5. Read the graph as a sequence of prerequisites

Start from the account you control and investigate:

  1. Its groups, including nested memberships.
  2. Its outbound object-control rights.
  3. Machines it can administer or remotely access.
  4. Paths to relevant privileged identities.
  5. Readable managed passwords or delegation relationships, when present.

Example:

text
ALICE
  └─ MemberOf → HELPDESK
       └─ ForceChangePassword → SVC_BACKUP
            └─ AdminTo → APP01

Translate it into a hypothesis:

text
Can I use HELPDESK's effective reset permission?
    ↓
Can I authenticate as SVC_BACKUP afterward?
    ↓
Does that identity actually administer APP01?
    ↓
Can I reach an allowed execution method there?

The graph suggests a path. Each edge still needs validation. Missing collection or stale session data can also hide a viable path.

Part 6 — The attack patterns worth learning first

Attack 1: Password reuse and evidence-led password testing

A recovered password can be relevant to:

  • Its named account.
  • That account on additional hosts.
  • Another account suggested by the evidence.
  • Local administrator accounts on other machines.

Distinguish two activities:

text
One known account tested on several hosts
    = access mapping for that identity

One password tested against several accounts
    = password spraying

Spraying can lock accounts. Check policy first, account for previous failures, and remember that fine-grained policies may differ from the domain-wide policy.

From Windows:

cmd
net accounts /domain

A targeted lab example using a small, justified user list:

bash
nxc smb 10.10.10.10 -d corp.test -u candidate-users.txt \
  -p 'REPLACE_EVIDENCE_BASED_PASSWORD' --continue-on-success

The article’s “two or three passwords” advice is not a universal safe threshold. There is no fixed number of guesses that is safe for every domain. HackTricks password spraying

Attack 2: Kerberoasting

Finding: A domain user account has an SPN.

Prerequisites: A suitable authenticated request path to the KDC; the target service ticket must provide useful offline guessing material.

Goal: Recover the service account’s password.

First enumerate SPNs:

bash
impacket-GetUserSPNs -dc-ip 10.10.10.10 corp.test/alice

The tool prompts for the password.

Request material for an interesting account:

bash
impacket-GetUserSPNs -dc-ip 10.10.10.10 \
  -request-user svc_sql -outputfile kerberoast.txt corp.test/alice

For RC4 output beginning with $krb5tgs$23$:

bash
hashcat -m 13100 kerberoast.txt /usr/share/wordlists/rockyou.txt

AES tickets use different modes. Match the actual output format rather than assuming every Kerberoast uses RC4. HackTricks Kerberoasting

After recovering a password:

text
Validate the account
    ↓
Inspect its groups and permissions
    ↓
Check relevant services and hosts
    ↓
Update the access ledger and BloodHound investigation

A service account is not necessarily an administrator. Its value comes from its actual permissions.

Attack 3: AS-REP roasting

Finding: A user does not require Kerberos preauthentication.

Goal: Obtain material for offline password guessing.

With valid credentials, enumerate and request vulnerable accounts:

bash
impacket-GetNPUsers -dc-ip 10.10.10.10 -request \
  -format hashcat -outputfile asrep.txt corp.test/alice

Without credentials, but with a justified username list:

bash
impacket-GetNPUsers -dc-ip 10.10.10.10 -no-pass \
  -usersfile users.txt -format hashcat \
  -outputfile asrep.txt corp.test/

For RC4 output beginning with $krb5asrep$23$:

bash
hashcat -m 18200 asrep.txt /usr/share/wordlists/rockyou.txt

If preauthentication is required, that account does not support this classic AS-REP roasting path. AES output requires an appropriate cracking format. HackTricks AS-REP roasting

Remember the difference:

Kerberoasting AS-REP roasting
Targets service-ticket material Targets AS-REP material
Commonly begins with valid domain credentials Can begin with usernames and no password
Look for SPN-bearing user accounts Look for preauthentication disabled
Offline cracking afterward Offline cracking afterward

Let a bounded cracking attempt run while you investigate shares and permissions. You do not need to wait for it before making progress.

Attack 4: AD ACL abuse

This is the directory equivalent of the permissions reasoning from your previous guide.

Previously:

text
Write access to an executable
    → privileged service executes controlled code

Now:

text
Permission over an AD object
    → change membership, credentials, or authorization
    → act with newly obtained access

The target object type matters:

Permission / relationship What to investigate
ForceChangePassword on a user Reset that user’s password without knowing the old one
GenericAll on a user Password reset or another supported account-control path
GenericAll / AddMember on a group Change membership
GenericWrite on a user Writable attributes enabling a specific path; password reset is not implied
WriteDacl Grant a useful permission on that object
Ownership / WriteOwner Whether ownership permits a useful DACL change
Control over a computer object RBCD, managed-password access, or another applicable path
Replication rights on the domain DCSync
Control over a GPO Whether policy modification reaches a useful target

GenericAll behaves differently on users, groups, computers, and policies. SpecterOps GenericAll documentation

Example A: reset a user password

From a Windows session acting as the principal with the required permission:

powershell
$newPassword = ConvertTo-SecureString 'REPLACE_NEW_LAB_PASSWORD' -AsPlainText -Force

Set-DomainUserPassword -Identity svc_backup -AccountPassword $newPassword

This changes the target’s password. It may interrupt services using the old secret, so use it deliberately and record the change.

Example B: modify group membership

If you have the relevant effective membership-write permission:

powershell
Add-DomainGroupMember -Identity "Server Operators Lab" -Members alice

Then establish a fresh authentication context and verify the resulting access. An existing session may retain its earlier token.

Example C: WriteDacl

The reasoning is:

text
Can change an object's permissions
    ↓
Grant the specific right needed
    ↓
Exercise that right

It does not directly give you the target’s password. Read the edge’s abuse guidance for the object involved, preserve the original ACL, and document any changes. SpecterOps WriteDacl documentation

Correction to the article: Do not treat “reset the DC’s computer-account password” as a general shortcut to Domain Admin. Directory-side machine-password changes can desynchronize the machine’s secure channel. Microsoft’s recovery procedure coordinates the machine and directory state. Use a validated attack path appropriate to the actual rights instead. Microsoft DC machine-password guidance

Attack 5: Local privilege escalation as a domain stepping stone

Positions 5 and 6 take you back to the previous guide.

On a normal-user shell:

cmd
whoami /all

Then investigate the strongest local findings:

  • Service configuration permissions.
  • Writable service binaries.
  • Scheduled tasks.
  • Relevant token privileges.
  • Application configuration.
  • PowerShell history.
  • Saved credentials.

For SeImpersonatePrivilege, use the compatibility and trigger checks already covered in the Windows speedrun.

What changes in AD is your objective after elevation:

text
Elevate locally
    ↓
Inspect previously inaccessible files and secrets
    ↓
Identify useful domain or reusable local credentials
    ↓
Evaluate onward access

Potato tools are not universal. Requirements vary by technique, Windows build, services, and execution context. PrintSpoofer’s author documents specific tested environments rather than a guarantee for all modern Windows systems. PrintSpoofer research

Attack 6: Credential collection after local administrator access

At Position 7, collect the material you can actually access:

Source Potential result
Scripts / configuration / history Plaintext credentials
Local SAM Local account NT hashes
LSA secrets Service secrets and other sensitive system material
Cached domain logons Offline cracking material
LSASS Credentials or tickets that are actually present and accessible
Accessible user data Additional application or credential clues

From Kali, using a domain account that administers the target:

bash
impacket-secretsdump corp.test/svc_backup@10.10.10.30

This prompts for the password.

Impacket distinguishes local SAM/LSA extraction from domain replication. Its remote extraction can touch services and temporary registry-hive files; record the operation and its results. Impacket secretsdump source

Do not assume:

  • Every logged-on user has a plaintext password in memory.
  • Every session exposes reusable credentials.
  • SYSTEM bypasses all credential protections.
  • A local Administrator hash is the domain Administrator’s hash.

After each useful result, return to the credential-material table in Part 1.

Attack 7: Pass-the-hash and Kerberos ticket use

A. Pass-the-hash

You have a usable NT hash. Test it without first recovering the password:

bash
nxc smb 10.10.10.30 -d corp.test -u svc_backup -H 'REPLACE_NT_HASH'

For a local account on another member machine:

bash
nxc smb 10.10.10.20 --local-auth -u Administrator -H 'REPLACE_NT_HASH'

--local-auth changes the authentication context to the target’s local account database. It does not mean “make only one attempt.” NetExec local authentication

A usable hash still needs:

text
Reachable service
+ accepted authentication mechanism
+ account allowed to log on
+ permission for the desired operation

B. Overpass-the-hash / pass-the-key

A compatible account key can obtain a TGT:

bash
impacket-getTGT -dc-ip 10.10.10.10 \
  -hashes ':REPLACE_NT_HASH' corp.test/svc_backup

An NT-hash-based Kerberos route depends on compatible encryption support. Where required, use the appropriate AES key instead. Impacket getTGT

C. Pass-the-ticket

With an existing usable cache:

bash
export KRB5CCNAME="$PWD/svc_backup.ccache"

impacket-wmiexec -k -no-pass \
  corp.test/svc_backup@app01.corp.test

Check that the ticket’s identity, validity, and target service are suitable. A service ticket for one service does not supply arbitrary access elsewhere.

wmiexec additionally needs the target’s administrative permissions and reachable DCOM/WMI infrastructure. Its usual execution context is the authenticated user. Impacket wmiexec

Attack 8: DCSync

Finding: Your controlled identity has effective replication rights over the domain naming context.

For typical password-secret replication, the important pair is:

  • DS-Replication-Get-Changes
  • DS-Replication-Get-Changes-All

This can permit extraction without an interactive shell on the DC.

A scoped example:

bash
impacket-secretsdump -just-dc-user Administrator \
  corp.test/replication_user@10.10.10.10

A low-privilege-looking account can be valuable if it has these rights. Conversely, administrator access to a member server does not itself grant DCSync. HackTricks DCSync

Afterward:

  1. Identify exactly which account material you recovered.
  2. Authenticate through a suitable method.
  3. Obtain the required elevated access.
  4. Collect the required exam evidence.

A successful replication operation does not replace required shell and proof-file evidence.

Part 7 — Turn credentials into access

Choose a method based on the target’s services and your permissions.

Method What it needs What to remember
WinRM Reachable listener and remoting authorization A remoting user need not be local admin
WMI execution Appropriate administrative access and RPC/DCOM reachability SMB success alone is insufficient
PsExec-style execution Service-control rights and suitable SMB/share access Creates a service and commonly executes as SYSTEM
RDP Remote logon authorization and reachable RDP An ordinary user can have RDP access
SMB file access Share and filesystem permissions File access alone does not provide command execution
MSSQL Valid SQL/Windows login and useful SQL permissions SQL and Windows privileges are separate layers

WinRM with a password or hash

bash
evil-winrm -i 10.10.10.30 -u 'CORP\svc_backup' -p 'REPLACE_PASSWORD'

Or with a suitable NT hash:

bash
evil-winrm -i 10.10.10.30 -u 'CORP\svc_backup' -H 'REPLACE_NT_HASH'

Inside the session, verify the identity and token using the commands from your Windows guide. Evil-WinRM documentation

WMI with administrative credentials

bash
impacket-wmiexec corp.test/svc_backup@10.10.10.30

For pass-the-hash:

bash
impacket-wmiexec -hashes ':REPLACE_NT_HASH' \
  corp.test/svc_backup@10.10.10.30

PsExec-style access to the intended target

bash
impacket-psexec corp.test/Administrator@10.10.10.10

The address after @ selects the execution target.

A -dc-ip option, where supported, selects a DC for authentication-related operations. It does not generally redirect execution to that DC.

If execution fails, distinguish:

text
Authentication failure
Authorization failure
Unreachable required ports
Unwritable execution share
Service creation/start failure
Endpoint protection
Output-channel failure

The article’s suggestion that missing shells are usually caused by targeting a member server is too narrow. A domain administrator may legitimately administer member servers too.

The double-hop trap

You can have:

text
Kali → WinRM on APP01

while a command inside that session fails to access:

text
APP01 → DC01 share

Your remote session does not automatically receive reusable credentials for the second connection.

Use an explicit supported credential path or make the connection directly from Kali if routing permits. Treat a second-hop failure separately from the account’s actual permissions. Microsoft PowerShell second-hop explanation

Reachability and pivoting

When a discovered host is inaccessible from Kali:

  1. Confirm its address and service.
  2. Test reachability from your foothold.
  3. Establish an appropriate tunnel or route.
  4. Retest the same intended connection.
  5. Keep authentication troubleshooting separate from transport troubleshooting.

A TCP-only SOCKS route may not support tools expecting UDP DNS or Kerberos traffic. A route that exposes SMB may still leave required RPC ports inaccessible.

Part 8 — Important conditional branches

These are useful to recognize. Investigate them when the environment supplies a specific lead.

1. MSSQL

An SPN, configuration file, or scan may reveal a SQL service.

Connect using Windows authentication:

bash
impacket-mssqlclient -windows-auth \
  corp.test/svc_sql@10.10.10.30

Then inspect your SQL context:

sql
SELECT SYSTEM_USER;
SELECT USER_NAME();
SELECT IS_SRVROLEMEMBER('sysadmin');

If you have the required rights, Impacket’s interactive SQL client supplies helpers such as:

text
enable_xp_cmdshell
xp_cmdshell whoami

Enabling command execution changes server configuration; record its original state. The resulting OS command runs under the configured SQL execution context, which can be a service account or proxy. Check the resulting token and return to your Windows PrivEsc guide if appropriate. Impacket MSSQL client, interactive SQL helpers

Other leads include SQL impersonation permissions, linked servers, and credentials stored in readable application data. These require their own permission checks. HackTricks MSSQL AD abuse

2. Silver tickets

Recognize this chain:

text
Have the key of the account backing a service
    ↓
Know the domain SID and exact service SPN
    ↓
Forge a service ticket
    ↓
Attempt authentication to that service as the chosen identity

The service account’s key is different from the krbtgt key used for golden tickets.

A silver ticket is service-scoped. Possessing a SQL service account key does not automatically provide SMB administrator access.

Also validate encryption compatibility, identity/RID consistency, and target-side ticket validation. Modern validation can prevent simplistic examples from working. Impacket’s ticketer supports service-ticket construction with an SPN. Impacket ticketer

For preparation, understand the prerequisites and practise one compatible service-specific lab chain. Broad persistence techniques can wait until your core workflow is reliable.

3. Kerberos delegation / RBCD

Recognize the three main forms:

Form Practical question
Unconstrained delegation Does a controlled host receive usable delegated credentials from a valuable identity?
Constrained delegation Which listed services may a controlled account delegate to?
Resource-based constrained delegation Does the target resource allow a principal you control to act on behalf of users?

For a common RBCD path, investigate:

text
Can modify the target's RBCD authorization
+ control a suitable service principal and its key
+ impersonated identity is delegable
+ correct target SPN and compatible Kerberos behavior
    ↓
Potential service access as another identity

A writable computer object is a lead. It is not the completed chain. Computer-creation quota alone also does not prove exploitability. HackTricks RBCD

4. LAPS and gMSA

Two high-value permission questions:

  • Can your identity read a machine’s managed local administrator password?
  • Can it read a group managed service account’s managed password?

The presence of LAPS or gMSA is normal. The useful finding is your effective ability to obtain and use the managed secret.

After retrieval, evaluate the resulting identity exactly as you would any other account: group memberships, machine administration, accessible services, and outbound AD permissions.

5. AD Certificate Services

If you discover a CA, certificate templates, or certificate-related graph edges, investigate AD CS.

Certipy’s workflow broadly includes:

text
find → enumerate configuration and possible weaknesses
req  → request a certificate when permitted
auth → use a suitable certificate/private key to authenticate

A vulnerability label requires validation of enrollment rights, issuance requirements, identity mapping, and current target behavior. Patched certificate-mapping requirements matter. Certipy usage documentation

6. NTLM relay and poisoning

Understand the distinction:

  • Captured challenge-response material may support offline cracking.
  • Relay forwards an authentication exchange to another service under suitable conditions.
  • Poisoning/spoofing is a way of inducing or redirecting authentication.

These are different prerequisites and operations. Do not assume that an unsigned SMB service alone gives you a working relay chain.

For the exam, respect OffSec’s explicit spoofing restriction. A technique appearing in HackTricks does not make it permitted in the exam. Official exam restrictions

Part 9 — Three realistic chains

These are hypothetical practice chains, not claims about a particular exam set.

Scenario A: supplied user → readable script → server admin → domain path

text
Position 4: CORP\alice
    ↓
Authenticated share enumeration
    ↓
Deployment script exposes svc_deploy credentials
    ↓
Validate svc_deploy and inspect its permissions
    ↓
Administrative access to APP01
    ↓
Position 7: inspect accessible files and credential material
    ↓
Recover a principal with a useful AD permission
    ↓
Position 8: validate and exercise that permission
    ↓
Required elevated access and proof

Lesson: The useful transition came from understanding a file.

Scenario B: ordinary account → roast → SQL → SYSTEM

text
Position 4: valid domain user
    ↓
SPN enumeration identifies svc_sql
    ↓
Request a service ticket and recover a weak password offline
    ↓
SQL authentication succeeds
    ↓
SQL permissions permit OS command execution
    ↓
Position 6: service token has usable SeImpersonatePrivilege
    ↓
Compatible local elevation path
    ↓
Position 7: SYSTEM on the SQL server
    ↓
Collect additional evidence and evaluate onward access

Lesson: Reaching SYSTEM on the SQL server completes a local step. Reassess what domain access it supplies.

Scenario C: delegated membership → reset permission → replication

text
Position 4: valid domain user
    ↓
BloodHound identifies a group-membership write
    ↓
Validate and change membership
    ↓
Fresh authentication context acquires the group's effective rights
    ↓
Password-reset permission over a useful account
    ↓
That account has validated domain replication rights
    ↓
Scoped DCSync
    ↓
Authenticate with recovered privileged material
    ↓
Required shell and proof

Lesson: Some paths advance through directory permissions without local exploitation on each machine.

Part 10 — When you get stuck

Symptom Check next
Valid SMB login, no shell Protocol-specific authorization and execution prerequisites
Hash works locally but fails as a domain account Whether you confused HOST\user with DOMAIN\user
Hash cannot be passed Whether it is NT, NetNTLMv2, DCC2, or roasting material
Kerberos clock-skew error Clock alignment
Kerberos service-principal error FQDN, SPN, realm, and selected service
BloodHound import fails Collector/UI compatibility and output version
BloodHound shows no path Collection completeness, readable files, and identities not yet evaluated
A graph edge fails Effective permissions, object type, identity, inheritance, and target restrictions
Added group membership has no effect Fresh authentication/token and replication timing
WinRM session cannot access another server Second-hop authentication
WMI fails while SMB works RPC/DCOM reachability and administrative rights
A remote host times out Routing and required ports
Credential dumping finds little Whether valuable material is present and accessible
Roasting will not crack Correct format, candidate quality, and whether another path is stronger
Potato execution succeeds but no interactive shell appears Session/desktop context and output delivery
Privileged credential works but PsExec fails Share access, SCM permissions, service execution, and output channel

Use the article’s roughly 20-minute reassessment idea as a study heuristic:

text
What new fact have I learned?
Which prerequisite is failing?
Can I test that prerequisite directly?
What other supported lead is available?

If nothing has changed, revisit files, account descriptions, and permissions already collected. Re-running broad enumeration is useful when your access or evidence has materially changed.

Part 11 — Compact working checklist

With a valid domain account

bash
# Validate authentication
nxc smb 10.10.10.10 -d corp.test -u alice -p 'REPLACE_PASSWORD'

# Identify readable shares on relevant hosts
nxc smb 10.10.10.10 -d corp.test -u alice \
  -p 'REPLACE_PASSWORD' --shares

# Collect a domain relationship graph
nxc ldap dc01.corp.test -d corp.test -u alice \
  -p 'REPLACE_PASSWORD' --bloodhound --collection All

# Enumerate SPNs
impacket-GetUserSPNs -dc-ip 10.10.10.10 corp.test/alice

# Enumerate/request AS-REP-roastable users
impacket-GetNPUsers -dc-ip 10.10.10.10 -request \
  -format hashcat -outputfile asrep.txt corp.test/alice

With a Windows shell

cmd
whoami /all
hostname
ipconfig /all
net user /domain
net group /domain
net accounts /domain

Then apply the Windows PrivEsc guide and inspect relevant files.

After every new credential

text
[ ] Identify the exact principal
[ ] Identify the secret/artifact type
[ ] Validate it against an appropriate service
[ ] Map relevant host and share access
[ ] Check administration/remoting permissions
[ ] Inspect useful group memberships and object-control rights
[ ] Record the source and evidence
[ ] Select the next supported transition

After every new machine

text
[ ] Verify host and identity
[ ] Check token and local privileges
[ ] Inspect application-specific files
[ ] Elevate locally if needed and feasible
[ ] Collect newly accessible credential material
[ ] Inspect network reachability
[ ] Reassess domain paths with the new access

Part 12 — What to practise until it feels routine

My recommended priority order:

Priority Skill Practical completion target
1 Identity and credential types Correctly distinguish local/domain identities and reusable/offline-only material
1 Authenticated enumeration Find useful users, groups, shares, and service accounts
1 BloodHound interpretation Explain and validate each edge of a short path
1 File-based credential hunting Trace a discovered secret to a tested identity and permission
1 Local Windows PrivEsc Use the previous guide confidently on domain members
1 Lateral access Choose a method based on permissions and required ports
1 Roasting Obtain material, identify its format, and use recovered credentials
1 Pass-the-hash / ticket use Use the correct artifact with the correct authentication method
1 DCSync Recognize effective replication rights and perform a scoped lab example
2 Simple ACL chains Membership change, password reset, and permission changes
2 SQL integration Distinguish SQL login, SQL privilege, and OS execution context
2 Silver tickets Understand and practise a compatible service-specific chain
2 Pivoting and second-hop diagnosis Separate reachability from authentication
Conditional Delegation, AD CS, LAPS, gMSA Recognize a concrete lead and validate its prerequisites
Later Complex trust abuse and persistence Study after the central workflow is reliable

These are study priorities, not a guarantee that any technique is included in or excluded from an exam. OffSec’s published syllabus emphasizes AD enumeration, authentication attacks, and lateral movement. PEN-200 syllabus

A useful practice session should produce a reproducible chain:

text
Initial access
→ finding
→ prerequisite validation
→ action
→ resulting identity/access
→ next finding
→ proof

For each transition, explain why it worked. That is the level of understanding that makes unfamiliar lab layouts manageable.

Part 13 — Exam evidence and restrictions

Keep these operational requirements beside your notes:

  • Follow the target-specific objectives in the exam control panel.
  • Verify the identity and privileges of your resulting shell.
  • Display proof files from their original locations using the permitted interactive-shell method.
  • Include the target IP and required proof contents in your screenshots.
  • Submit proof values in the control panel before the exam ends.
  • Document commands and results sufficiently for someone else to reproduce the chain.
  • Respect restrictions on spoofing, automatic exploitation, mass vulnerability scanners, Metasploit, and Meterpreter.
  • AI chatbots are prohibited during the exam; use this guide for preparation and static study notes.

The official guide permits msfvenom and multi/handler across targets subject to its separate Meterpreter restriction. Re-read the authoritative rules before sitting the exam. Official OSCP+ Exam Guide

The habit to build: whenever you obtain an account, permission, file, or shell, state exactly what changed—and which next action that change makes possible.

Sources & tool repositories

Reference links and official tool repositories collected from the complete AD speedrun, with the original framework and HackTricks methodology added for context. The study guide is self-contained; following these links requires an internet connection.

About this edition. Prepared on 13 November 2026 from the complete preceding AD speedrun. All 13 parts, command blocks, reference tables, and technical qualifications are retained. The nine-position framework was read from the supplied article PDF. Exam-policy notes refer to the official OSCP+ Exam Guide checked during preparation of the speedrun. Consult it again before your exam. A Markdown copy of this guide is embedded in this file for reference.