คลัง
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ยึดบัญชี
CanRDPRDP เข้าได้เข้าถึงเครื่อง
AllowedToDelegateconstrained delegationปลอมตัวเป็น user
คลิกที่ edge ใดๆ ในกราฟ → tab 'Abuse Info' มีคำอธิบาย + คำสั่งทีละขั้น (ทั้ง Windows/Linux) สำหรับ abuse edge นั้น — ใช้เป็นคู่มือ exploit ได้เลย

5. Workflow สู่ Domain Admin

  1. 1Collect (SharpHound -c All) → import .zip
  2. 2Mark บัญชีที่คุมได้เป็น Owned
  3. 3รัน 'Shortest Paths from Owned to Domain Admins'
  4. 4ตามแต่ละ edge ในเส้นทาง — คลิกดู Abuse Info
  5. 5abuse ทีละขั้น (เช่น Kerberoast → crack → ใช้สิทธิ์ → ACL abuse)
  6. 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 แบบไหน?
KerberoastableKerberoasting → crack
GenericAll/WriteDaclACL Abuse
DCSync rightsDCSync → krbtgt
AdminTo / Sessionslateral 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. 1เช็คว่ามี bloodhound + neo4j ไหม: `bloodhound --version`, `neo4j version` (Kali มีมาให้ หรือ `sudo apt install bloodhound neo4j -y`)
  2. 2เริ่ม neo4j ก่อนเสมอ: `sudo neo4j start` แล้วรอสัก 10-20 วิ ให้ database พร้อม (เช็คที่ http://localhost:7474)
  3. 3ตั้ง password neo4j ครั้งแรก (ถ้ายังไม่เคยตั้ง) ผ่านหน้าเว็บ localhost:7474 (default neo4j:neo4j)
  4. 4เปิด BloodHound GUI: `bloodhound` แล้ว login ด้วย neo4j + password ที่ตั้ง
  5. 5เก็บข้อมูลจาก Kali (มี credential แล้ว): `bloodhound-python -u -p '' -d -ns -c All`
  6. 6ถ้า error 'no such user'/auth fail → เช็ค clock skew กับ DC (`ntpdate -u `) เพราะ Kerberos ไวต่อเวลา
  7. 7ได้ไฟล์ .zip → ลากเข้าหน้าต่าง BloodHound GUI เพื่อ import
  8. 8ไป tab Analysis → รัน 'Shortest Paths to Domain Admins' ก่อนเสมอ
  9. 9ไม่เห็นเส้นทาง → คลิกขวา node บัญชีที่เรามี credential → Mark as Owned → รัน 'Shortest Paths from Owned Principals'
  10. 10เจอเส้นทาง → คลิกที่แต่ละ edge ดู tab 'Abuse Info' มีคำสั่งทีละขั้นให้เลย
  11. 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ติดตั้งเพิ่ม (ถ้าไม่มี)เครื่องมือออนไลน์
เริ่ม databaseneo4j 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 เพิ่ม)

โน้ตของฉัน

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