คลัง
active-directory

SharpHound

SharpHound เป็น data collector ของ BloodHound — เก็บข้อมูลจาก Active Directory (users, groups, computers, sessions, ACL, trusts) มาสร้างกราฟ บทนี้ลงลึก collection methods ทั้งหมด, การรันจาก Windows (SharpHound) และ Linux (bloodhound-python), OPSEC, และ troubleshooting (เนื้อหาเพื่อทดสอบในระบบที่ได้รับอนุญาตเท่านั้น)

IntermediateAdvanced#sharphound#active-directory#collector#bloodhound#collection-method#ctf

1. SharpHound เก็บอะไร

SharpHound query ข้อมูลจาก AD ผ่าน LDAP และเทคนิคอื่น แล้ว export เป็น JSON (zip) ให้ BloodHound import ข้อมูลที่เก็บ: โครงสร้าง user/group/computer/OU/GPO, ความสัมพันธ์ (membership, ACL, trust), session (ใคร login เครื่องไหน — สำคัญมากสำหรับหา path), และ local admin

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

2. Collection Methods

methodเก็บอะไรหมายเหตุ
Defaultgroup, ACL, trust, containerเบื้องต้น เงียบ
Sessionuser session บนเครื่องสำคัญหา path (ดังกว่า)
LoggedOnsession (ต้อง admin)แม่นกว่า Session
ACLDACL ของ objectหา GenericAll/WriteDacl
Trustsdomain trustcross-domain attack
LocalAdminใคร admin เครื่องไหนหา AdminTo edge
Allทุกอย่าง (ยกเว้นบางตัว)ครบสุด (ดังสุด)
DCOnlyเฉพาะจาก DC (LDAP)เงียบสุด ไม่แตะ host อื่น

3. รันจาก Windows (SharpHound)

SharpHound.exe / .ps1Windows
# เก็บทุกอย่าง
SharpHound.exe -c All

# เลือก method + ระบุ domain
SharpHound.exe -c All,LoggedOn -d domain.local

# เงียบสุด — เฉพาะจาก DC (ไม่แตะ host อื่น)
SharpHound.exe -c DCOnly

# ระบุ DC + output path + zip ชื่อ
SharpHound.exe -c All --domaincontroller 10.10.10.10 --outputdirectory C:\temp --zipfilename loot

# PowerShell version
Import-Module .\SharpHound.ps1
Invoke-BloodHound -CollectionMethod All
-c All ครบแต่ดัง; -c DCOnly เงียบสุดเหมาะ OPSEC; ได้ไฟล์ .zip → import เข้า BloodHound

4. รันจาก Linux (bloodhound-python)

bloodhound-python (ไม่ต้องอยู่บน Windows)Linux
# ติดตั้ง
pip install bloodhound

# เก็บด้วย credential
bloodhound-python -u user -p 'Password' -d domain.local -ns 10.10.10.10 -c All

# ใช้ NTLM hash (pass-the-hash)
bloodhound-python -u user --hashes :NTHASH -d domain.local -ns 10.10.10.10 -c All

# ใช้ Kerberos ticket
export KRB5CCNAME=ticket.ccache
bloodhound-python -k -u user -d domain.local -ns 10.10.10.10 -c All

# ได้ไฟล์ .json หลายไฟล์ → zip แล้ว import
zip data.zip *.json
bloodhound-python สะดวกจาก Linux/Kali; -ns = DNS server (มัก DC IP); รองรับ pass-the-hash/ticket

5. OPSEC

  • -c All ดัง — query session ทุกเครื่อง = traffic เยอะ ตรวจจับได้
  • -c DCOnly เงียบสุด — แค่ LDAP query ที่ DC ไม่แตะ host อื่น (แต่ขาดข้อมูล session)
  • --stealth — ลด query ที่ noisy
  • --jitter / --throttle — หน่วง query เลี่ยง pattern
  • EDR/defender ตรวจ LDAP query จำนวนมากผิดปกติ + SharpHound signature
  • เลือก method ตามความเสี่ยง: เริ่ม DCOnly → ถ้าต้องการ session ค่อย All ทีหลัง

6. Troubleshooting

  • เก็บได้น้อย/ไม่มี session: ต้องใช้ -c All หรือ LoggedOn (ต้อง local admin บน target)
  • clock skew error (Kerberos): sync เวลากับ DC — ntpdate DC_IP หรือ rdate
  • DNS resolve fail: ตั้ง -ns เป็น DC IP; เพิ่ม domain ใน /etc/hosts
  • import แล้วกราฟว่าง: zip ผิด/ไฟล์ไม่ครบ — zip ทุก .json รวมกัน
  • เวอร์ชันไม่ตรง: SharpHound version ต้องตรงกับ BloodHound (legacy vs CE)

7. Quick Reference

  • collector ของ BloodHound — เก็บ user/group/ACL/session/trust
  • Windows: SharpHound.exe -c All (ครบ) / -c DCOnly (เงียบ)
  • Linux: bloodhound-python -u user -p pass -d domain -ns DC_IP -c All
  • pass-the-hash: --hashes :NTHASH; ticket: -k + KRB5CCNAME
  • method: All(ครบ/ดัง), DCOnly(เงียบ), Session/LoggedOn(หา path)
  • OPSEC: DCOnly เงียบสุด, --stealth/--jitter
  • clock skew → sync เวลา; DNS → -ns DC IP

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

สมมติ BloodHound ยังไม่มีข้อมูลพอ (หรือ bloodhound-python รันแล้ว error) มีแค่ Kali ทำตามนี้เพื่อเก็บข้อมูลให้ครบและแก้ปัญหาที่เจอบ่อยทีละขั้น

  1. 1ยืนยันว่ามี credential ใช้ได้จริงก่อน: netexec smb <DC_IP> -u user -p pass
  2. 2ถ้าเวลาเครื่อง Kali ต่างจาก DC เกิน 5 นาที Kerberos จะ fail ก่อนเสมอ — sync เวลา: sudo ntpdate <DC_IP> หรือ sudo rdate -n <DC_IP>
  3. 3รันเก็บข้อมูลแบบเงียบก่อน (ปลอดภัยสุด): bloodhound-python -u user -p pass -d domain.local -ns <DC_IP> -c DCOnly
  4. 4ถ้าต้องการ session/local admin เพิ่ม (path ดีกว่า) ค่อยรันแบบครบ: bloodhound-python -u user -p pass -d domain.local -ns <DC_IP> -c All
  5. 5ตรวจว่าได้ไฟล์ .json ครบไหม: ls *.json แล้ว zip data.zip *.json
  6. 6ถ้า DNS resolve ไม่ได้ ให้ตั้ง -ns เป็น DC IP ตรงๆ และเพิ่ม domain ลง /etc/hosts
  7. 7ถ้ามี shell บน host ที่ join โดเมนแล้ว (Windows) ใช้ SharpHound.exe -c All แทนได้ (บางกรณีครบกว่า python collector)
  8. 8import ผลเข้า BloodHound แล้ววิเคราะห์ path ต่อ
เก็บข้อมูลให้ครบ ก่อนไปวิเคราะห์
รัน bloodhound-python -c DCOnly ก่อน (เงียบสุด)
bloodhound-python -u user -p pass -d domain.local -ns DC_IP -c DCOnly
✅ เก็บสำเร็จ→ ดูว่าต้องการ session/admin เพิ่มไหม
❌ error เชื่อมต่อ/auth fail→ ไล่ดูอาการ error
อยากได้ session/local admin เพิ่มไหม (path ดีขึ้น)?
✅ ต้องการ→ รันซ้ำด้วย -c All
❌ พอแล้ว→ ไปวิเคราะห์ที่ BloodHound
รัน -c All (ดังขึ้นแต่ข้อมูลครบกว่า)
✅ สำเร็จ→ import เข้า BloodHound
❌ ยัง error (session/admin ไม่พอ)→ LoggedOn ต้องมี admin บนเครื่องเป้าหมายจริง — ข้ามไปเก็บแบบ DCOnly พอ
อาการ error คืออะไร
clock skew (Kerberos)→ sync เวลา ntpdate/rdate แล้วลองใหม่
DNS resolve fail→ ตั้ง -ns เป็น DC IP ตรงๆ + เพิ่ม /etc/hosts
auth fail จริงๆ→ กลับไปยืนยัน credential ใหม่ (netexec)
ขั้นตอน/งานเครื่องมือใน Kaliติดตั้งเพิ่ม (ถ้าไม่มี)เครื่องมือออนไลน์
เก็บข้อมูล AD (Linux)-pipx install bloodhound (bloodhound-python)-
เก็บข้อมูล AD (มี shell Windows)-SharpHound.exe/.ps1 (GitHub BloodHoundAD)-
ยืนยัน creds ใช้ได้netexec (crackmapexec)apt install netexec-
sync เวลากับ DCntpdate / rdateapt install ntpdate-
query LDAP/DNS ตรวจ domainldapsearch, dig--
import/วิเคราะห์กราฟ-BloodHound CE (docker compose)bloodhound.readthedocs.io
🚑 ถ้าตันสนิท ลองท่าถัดไป: BloodHound (พอเก็บข้อมูลได้ก็ไปวิเคราะห์ path ต่อทันที) · Kerberoasting/AS-REP Roasting/ACL Abuse (ถ้าข้อมูลกราฟชี้ทางชัดเจนแล้ว ไม่ต้องเก็บซ้ำ) · DCSync (ถ้า -c All เผยว่ามีสิทธิ์ replication อยู่แล้ว)

โน้ตของฉัน

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