playbooks
BloodHound Playbook
BloodHound เปลี่ยนการวิเคราะห์ Active Directory ที่ซับซ้อนให้เป็นกราฟหา attack path คู่มือนี้เป็น end-to-end: ตั้งค่า + collect ด้วย SharpHound, pre-built queries ทั้งหมด, custom Cypher, การอ่าน edge และ abuse, จนถึงเส้นทางสู่ Domain Admin (เนื้อหาเพื่อทดสอบที่ได้รับอนุญาต)
IntermediateAdvanced#bloodhound#active-directory#attack-path#cypher#playbook#ctf
1. ตั้งค่า + Collect
เริ่ม BloodHound + เก็บข้อมูล
# เริ่ม neo4j + BloodHound
sudo neo4j start
bloodhound # GUI (login neo4j default neo4j:neo4j)
# Collect ด้วย SharpHound (บน Windows ที่ join domain)
.\SharpHound.exe -c All
# หรือจาก Linux (มี credential)
bloodhound-python -u user -p 'Pass' -d domain.local -ns DC_IP -c All
# ใช้ hash: --hashes :NTHASH
# ได้ .zip → ลากเข้า BloodHound GUI เพื่อ importดูหัวข้อ BloodHound และ SharpHound สำหรับรายละเอียด collection; -c All เก็บครบ
2. Pre-built queries (เริ่มจากนี่)
BloodHound มี Analysis queries สำเร็จรูปใน tab 'Analysis' — เริ่มจากพวกนี้เพื่อหา attack path เร็วๆ:
- Find Shortest Paths to Domain Admins — เส้นทางสั้นสุดสู่ DA (เริ่มจากนี่เสมอ)
- Find Principals with DCSync Rights — ใครทำ DCSync ได้ (→ dump krbtgt)
- Shortest Paths from Owned Principals — จากบัญชีที่เราคุม (mark owned ก่อน)
- Find Kerberoastable Accounts — เป้า Kerberoasting
- Find AS-REP Roastable Users — เป้า AS-REP
- Find Computers where Domain Users are Local Admin — เครื่องที่เข้าได้กว้าง
- Shortest Path to Unconstrained Delegation — เป้าหมายสูง
ขั้นแรกเสมอ: หาบัญชีที่คุมได้ → คลิกขวา node → 'Mark as Owned' → รัน 'Shortest Paths from Owned' เห็นเส้นทางจากจุดที่เรายืนไป DA
3. Custom Cypher queries
Cypher ที่มีประโยชน์
// users ที่ kerberoastable (มี SPN)
MATCH (u:User {hasspn:true}) RETURN u
// path จาก owned ไป Domain Admins
MATCH p=shortestPath((n {owned:true})-[*1..]->(g:Group))
WHERE g.name STARTS WITH "DOMAIN ADMINS" RETURN p
// ทุก edge ที่ user เรามีต่อ object อื่น
MATCH p=(u:User {name:"USER@DOMAIN"})-[r]->(n) RETURN p
// หา session ของ DA (ไปยึดเครื่องที่ DA login)
MATCH (u:User)-[:MemberOf*1..]->(g:Group {name:"DOMAIN ADMINS@DOMAIN"})
MATCH (c:Computer)-[:HasSession]->(u) RETURN c,u
// computers ที่ unconstrained delegation
MATCH (c:Computer {unconstraineddelegation:true}) RETURN cพิมพ์ Cypher ในช่องล่างซ้ายของ BloodHound; STARTS WITH/CONTAINS ช่วย match ชื่อ
4. อ่าน edge และ abuse
| edge | ความหมาย | abuse |
|---|---|---|
| MemberOf | เป็นสมาชิก group | ได้สิทธิ์ของ group |
| AdminTo | เป็น local admin ของเครื่อง | login เข้าเครื่องนั้น |
| HasSession | มี session บนเครื่อง | ขโมย credential/token |
| GenericAll | คุม object เต็ม | เปลี่ยนรหัส/เพิ่มสมาชิก (ดู ACL Abuse) |
| WriteDacl | แก้ DACL ได้ | ให้สิทธิ์ตัวเองต่อ |
| ForceChangePassword | เปลี่ยนรหัส user | ยึดบัญชี |
| CanRDP | RDP เข้าได้ | เข้าถึงเครื่อง |
| AllowedToDelegate | constrained delegation | ปลอมตัวเป็น user |
คลิกที่ edge ใดๆ ในกราฟ → tab 'Abuse Info' มีคำอธิบาย + คำสั่งทีละขั้น (ทั้ง Windows/Linux) สำหรับ abuse edge นั้น — ใช้เป็นคู่มือ exploit ได้เลย
5. Workflow สู่ Domain Admin
- 1Collect (SharpHound -c All) → import .zip
- 2Mark บัญชีที่คุมได้เป็น Owned
- 3รัน 'Shortest Paths from Owned to Domain Admins'
- 4ตามแต่ละ edge ในเส้นทาง — คลิกดู Abuse Info
- 5abuse ทีละขั้น (เช่น Kerberoast → crack → ใช้สิทธิ์ → ACL abuse)
- 6ถึง DCSync rights → dump krbtgt → Golden Ticket (ดูหมวด AD)
6. Decision Tree — จาก BloodHound สู่ DA
BloodHound — เลือก attack path
import data + mark owned user
อัปโหลด SharpHound zip → mark as owned
รัน pre-built query
Shortest Path to Domain Admins
เจอ edge แบบไหน?
Kerberoastable→Kerberoasting → crack
GenericAll/WriteDacl→ACL Abuse
DCSync rights→DCSync → krbtgt
AdminTo / Sessions→lateral movement
ทำตาม edge ทีละ hop จนถึง DA
right-click edge → Help → มีคำสั่งให้
Domain Admin
6. Quick Reference
- collect: SharpHound -c All / bloodhound-python → import .zip
- เริ่ม: Mark as Owned → Shortest Paths from Owned
- pre-built: Shortest Path to DA, DCSync Rights, Kerberoastable
- edge abuse: GenericAll/WriteDacl/ForceChangePassword/HasSession
- คลิก edge → Abuse Info (คำสั่งทีละขั้น)
- เส้นทางจบที่ DCSync → krbtgt → Golden Ticket
🧭 จับมือทำทีละขั้น (มีแค่ Kali) + ถ้าติดไปไหนต่อ
สมมติมี credential ระดับ domain user ธรรมดาแล้ว (จาก phishing/found creds) มีแค่ Kali ทำตามนี้ทีละขั้นเพื่อหาทางไป Domain Admin
- 1เช็คว่ามี bloodhound + neo4j ไหม: `bloodhound --version`, `neo4j version` (Kali มีมาให้ หรือ `sudo apt install bloodhound neo4j -y`)
- 2เริ่ม neo4j ก่อนเสมอ: `sudo neo4j start` แล้วรอสัก 10-20 วิ ให้ database พร้อม (เช็คที่ http://localhost:7474)
- 3ตั้ง password neo4j ครั้งแรก (ถ้ายังไม่เคยตั้ง) ผ่านหน้าเว็บ localhost:7474 (default neo4j:neo4j)
- 4เปิด BloodHound GUI: `bloodhound` แล้ว login ด้วย neo4j + password ที่ตั้ง
- 5เก็บข้อมูลจาก Kali (มี credential แล้ว): `bloodhound-python -u
-p ' ' -d -ns -c All` - 6ถ้า error 'no such user'/auth fail → เช็ค clock skew กับ DC (`ntpdate -u
`) เพราะ Kerberos ไวต่อเวลา - 7ได้ไฟล์ .zip → ลากเข้าหน้าต่าง BloodHound GUI เพื่อ import
- 8ไป tab Analysis → รัน 'Shortest Paths to Domain Admins' ก่อนเสมอ
- 9ไม่เห็นเส้นทาง → คลิกขวา node บัญชีที่เรามี credential → Mark as Owned → รัน 'Shortest Paths from Owned Principals'
- 10เจอเส้นทาง → คลิกที่แต่ละ edge ดู tab 'Abuse Info' มีคำสั่งทีละขั้นให้เลย
- 11ทำตาม edge ไปเรื่อยๆ จนถึง DCSync หรือ Domain Admins group
จับมือหาทางไป Domain Admin
เช็ค bloodhound/neo4j พร้อมไหม
bloodhound --version / neo4j version
✅ พร้อม→→ เริ่ม neo4j
❌ ไม่มี→→ sudo apt install bloodhound neo4j -y
sudo neo4j start
เปิด BloodHound GUI + login
✅ login สำเร็จ→→ ไป collect ข้อมูล
❌ login ไม่ผ่าน→→ reset password ผ่าน localhost:7474 ใหม่
เก็บข้อมูลด้วย bloodhound-python -c All
✅ ได้ .zip ออกมา→→ import เข้า GUI
❌ auth fail/timeout→→ เช็ค clock skew (ntpdate) หรือ credential ผิด
import แล้ว รัน Shortest Path to DA
เห็นเส้นทางไหม?
✅ เห็นเส้นทางจาก node ที่เรามี→→ ไล่ตาม edge ทีละ hop
❌ ไม่เห็น/บัญชีเราไม่อยู่ในกราฟ→→ Mark as Owned → Shortest Paths from Owned
เจอ edge แบบไหน?
✅ Kerberoastable (hasspn)→→ ไป Kerberoasting
✅ GenericAll/WriteDacl→→ ไป ACL Abuse
✅ DCSync rights→→ ไป DCSync
❌ ไม่มี edge ต่อได้เลย→→ เก็บข้อมูลเพิ่ม (SharpHound รอบใหม่หลัง lateral)
ทำตาม edge จนถึง Domain Admin
| ขั้นตอน/งาน | เครื่องมือใน Kali | ติดตั้งเพิ่ม (ถ้าไม่มี) | เครื่องมือออนไลน์ |
|---|---|---|---|
| เริ่ม database | neo4j start | - | - |
| เก็บข้อมูล AD (มี creds) | bloodhound-python | - | - |
| เก็บข้อมูลจาก Windows join domain | - | SharpHound.exe (github) | - |
| วิเคราะห์กราฟ | bloodhound GUI | - | bloodhound-project.readthedocs.io |
| เขียน query เอง | Cypher ใน BloodHound | - | neo4j.com/docs cypher cheatsheet |
| sync เวลากับ DC (แก้ Kerberos error) | ntpdate, rdate | - | - |
| ต่อยอด edge ที่เจอ | impacket suite | - | gtfobins.github.io (ถ้าเจอ local admin) |
🚑 ถ้าตันสนิท ลองท่าถัดไป: (1) เจอ user มี SPN (hasspn) → ไป Kerberoasting ทันที (2) เจอ edge GenericAll/WriteDacl/ForceChangePassword → ไป ACL Abuse (3) เจอสิทธิ์ DCSync → ไป DCSync ดึง krbtgt แล้วต่อ Golden Ticket (4) กราฟไม่มีเส้นทางเลยแม้ mark owned → เก็บข้อมูลเพิ่มด้วย SharpHound หลัง lateral movement ไปเครื่องอื่น (บัญชีใหม่อาจเห็น session เพิ่ม)
หัวข้อที่เชื่อมโยง
BloodHoundเครื่องมือเดียวกันACL Abuseอยู่ใน workflowADCS Abuse (ESC1–ESC13)เครื่องมือเดียวกันShadow Credentialsเครื่องมือเดียวกันKerberos Delegation Abuseเครื่องมือเดียวกันNmap Playbookอยู่ใน workflowKerberoastingอยู่ใน workflowDCSyncอยู่ใน workflowSharpHoundเครื่องมือเดียวกันGolden TicketเทคนิคเดียวกันSilver TicketเทคนิคเดียวกันDCShadowเทคนิคเดียวกัน
โน้ตของฉัน
ยังไม่มีโน้ตสำหรับหัวข้อนี้