HTB - Windows Attacks & Defense
AD攻防
AD 基本介紹
Windows 常見驗證方式
- 帳密 / 雜湊(LM、NTLM、NetNTLM)
- Kerberos
- LDAP 驗證(帳密或憑證)
Kerberos:票證制度
KDC(Key Distribution Center) 在 DC 上,會發票證:
- TGT:登入成功的證明
- TGS(Ticket-Granting Server):你要存取某個服務時的服務票證,AS發行
Kerberos介紹影片(中)
Kerberos介紹影片(英)
Kerberoasting IoA
重要連接埠
- 53 DNS
- 88 Kerberos
- 135 WMI/RPC
- 137-139 / 445 SMB
- 389 / 636 LDAP
- 3389 RDP
- 5985 / 5986 WinRM
Windows event ID
AD / 帳密 / 橫向移動常看 Event ID
[登入與驗證]
4624 成功登入
4625 登入失敗
4648 使用明確帳密登入
4672 高權限登入
4768 Kerberos TGT
4769 Kerberos TGS
4771 Kerberos 預先驗證失敗
4776 NTLM 驗證
[帳號與群組]
4720 建立帳號
4723 嘗試修改密碼
4724 重設密碼
4738 使用者帳號屬性變更
4728 加入全域安全群組
4732 加入本機安全群組
4756 加入通用安全群組
[AD 物件]
5136 AD 物件修改
5137 AD 物件建立
5139 AD 物件移動
5141 AD 物件刪除
[共享 / 檔案 / 程序]
5140 存取共享
5145 檢查共享檔案存取權限
4663 存取檔案/物件
4688 程序建立
4104 PowerShell 腳本區塊
4742 電腦物件修改
證據鏈搜查用
AN=Account Name (帳戶名稱)
| Event ID | 檢查欄位 | ID意思 | 常見攻擊關聯 |
|---|---|---|---|
| 4624 | AN, Logon Type, Source Network Address | 成功登入 | 撿到帳密登入、RDP、SMB、橫向移動 |
| 4625 | AN, Status, Source Network Address | 登入失敗 | 暴力破解、噴密碼、帳號探測 |
| 4648 | Process Name, Account Whose Credentials Were Used, Target Server | 明確指定帳密登入 | runas、偷來的帳密被拿去用 |
| 4672 | AN, Privileges | 高權限登入 | 管理員登入、升權後活動 |
| 4768 | AN, Client Address | 請求 TGT | Kerberos 驗證起點、AS-REP 關聯 |
| 4769 | AN, Service Name, Client Address | 請求 TGS | Kerberoasting、SPN 服務存取 |
| 4771 | AN, Client Address, Failure Code | Kerberos 預驗證失敗 | 密碼錯誤、爆破 |
| 4776 | AN, Workstation | NTLM 驗證 | NTLM 登入、PtH 關聯 |
| 4720 | Target Account Name, Subject Account Name | 建立帳號 | 後門帳號、持久化 |
| 4724 | Target Account Name, Subject Account Name | 重設他人密碼 | 濫權、接管帳號 |
| 4738 | Target Account Name, Subject Account Name | 使用者帳號屬性變更 | 帳號設定異動、可疑屬性修改 |
| 4728 | Member Name, Group Name | 加入群組 | 升權、加入管理員群組 |
| 4732 | Member Name, Group Name | 加入群組 | 升權、加入管理員群組 |
| 4756 | Member Name, Group Name | 加入群組 | 升權、加入管理員群組 |
| 5136 | Object DN, Attribute LDAP Display Name, Value | AD 物件屬性被改 | description/info 被塞密碼、SPN 修改 |
| 5137 | Object DN | AD 物件建立 | 建立後門物件 |
| 5141 | Object DN | AD 物件刪除 | 清痕、破壞 |
| 5140 | Share Name, Client Address | 存取共享 | 探索共享、碰 SYSVOL |
| 5145 | Share Name, Relative Target Name, Accesses | 對共享內檔案做細部存取檢查 | 搜 XML、找 GPP、枚舉共享 |
| 4663 | Object Name, Process Name, Accesses | 實際存取檔案/物件 | 讀敏感檔案、碰 XML |
| 4688 | New Process Name, Command Line, Creator Process Name | 建立程序 | 執行 powershell/findstr/net/dsquery |
| 4104 | Script Block Text, User ID | PowerShell 腳本內容 | PowerView、AD 枚舉、SYSVOL 搜尋 |
| 5156 | Application Name, Destination Port | 程序建立允許連線 | 連 SMB/LDAP/Kerberos、橫向移動 |
| Sysmon 1 | Image, CommandLine, ParentImage | 程序建立 | 枚舉工具、惡意程序 |
| Sysmon 3 | Image, DestinationIp, DestinationPort | 網路連線 | 連 DC、SMB、LDAP |
| Sysmon 11 | TargetFilename, Image | 建立檔案 | 工具輸出、惡意放置 |
攻擊手法(重點是檢測,攻擊會放在其他筆記)
Kerberoasting vs AS-REP Roasting 對照表
| 項目 | Kerberoasting | AS-REP Roasting |
|---|---|---|
| 目標帳號 | 有 SPN 的服務帳號 | 啟用 Do not require Kerberos preauthentication 的帳號 |
| 取得的材料 | TGS 相關票證材料 | AS-REP / 認證回應材料 |
| 主要看哪個設定 | 有沒有 SPN | 有沒有關 pre-auth |
| 成功關鍵 | 服務帳號密碼強度 | 使用者帳號密碼強度 |
| 常見事件 | 4769 | 4768 |
| 常見防禦 | 強密碼、gMSA、清理 SPN、限制 RC4 | 關閉不必要的 no-preauth、長密碼、定期盤點 |
| 核心本質 | 針對服務票證離線爆破 | 針對免 pre-auth 帳號的認證回應離線爆破 |
GPP Passwords(2014年前建立環境才有此漏洞)
GPP 密码
GPP Passwords 攻擊可以從兩個面向偵測:一是監控 SYSVOL 中敏感 XML 檔案的讀取行為(4663),二是監控外洩帳號後續是否出現可疑登入或 Kerberos 驗證事件(4624、4625、4768)。
- 4663 有人存取了敏感檔案 / 物件
在這裡用來抓:誰去讀 Groups.xml - 4624 成功登入
在這裡用來抓:偷到 GPP 密碼後成功登入 - 4625 登入失敗
在這裡用來抓:嘗試使用舊密碼或錯誤密碼登入 - 4768 要求 TGT
在這裡用來抓:該帳號開始走 Kerberos 驗證流程
GPO Permissions/GPO Files(並非攻擊手法,單純講述如何查看被修改的文件)
如果攻擊者能改 GPO,那就可能透過 GPO 下發惡意設定、惡意排程、惡意檔案。
開啟 Directory Service Changes auditing
監控 5136
看誰改了哪個 GPO(GUID)
Windows 事件 ID 5136 表示「目錄服務物件已修改」(A directory service object was modified)。此安全性記錄檔事件用於稽核 Active Directory (AD) 中的變更,例如屬性修改、權限變更或成員新增(如 Domain Admins)。此事件會記錄執行操作的帳戶、修改的物件、屬性名稱以及舊值與新值。
帳密放在共享資料夾內
檢測方式:
- 4625 失敗登入
常見於帳號密碼錯誤導致登入失敗。 - 4771 Kerberos pre-auth failed
使用 Kerberos 嘗試登入,但密碼錯了。 - 4776 NTLM 驗證失敗 / 憑證驗證失敗
可用來看到對某帳號提供了錯誤密碼。
檢查是否有共享資料夾:
方法1.
1 | |
系統工具 → 共用資料夾 → 共用
方法2.
1 | |
共享檢查
第一步:列出所有 share
1 | |
或
1 | |
第二步:檢查可疑 share 的權限
1 | |
第三步:檢查對應資料夾 NTFS 權限
看資料夾內容 → 安全性
或:
1 | |
第四步:人工看內容
特別看:scripts、deploy、backup、install、config
第五步:從別台主機測試能不能列出或連入
1
net view \\主機名
1 | |
Credentials in Object Properties 物件屬性中的憑證
檢查是否有Credentials in Object Properties
- AD 使用者 description / info
先跑:1
2
3Get-ADUser -Filter * -Properties Description,Info |
Where-Object { $_.Description -or $_.Info } |
Select Name,SamAccountName,Description,Info - 關鍵字搜尋
1
2
3
4
5Get-ADUser -Filter * -Properties Description,Info |
Where-Object {
$_.Description -match 'pass|pwd|password|密碼|帳密' -or
$_.Info -match 'pass|pwd|password|密碼|帳密'
} - SYSVOL XML
1
Get-ChildItem "\\contoso.local\SYSVOL" -Recurse -Include *.xml - 本機 share
1
net share - 檢查共享權限
1
Get-SmbShareAccess -Name "<共享名稱>"
判斷4624登入IP是否正常
過濾4769確認是否有請求
Golden Ticket
無法直接看到 forge 過程
因此只能觀察偽造票後的使用行為
核心看:
4624 / 4625
4768 / 4769
重點觀察行為關聯:
- 非常用來源 IP
- 管理員不在 PAW 上登入
- 4769 沒有合理前置 4768
- 異常存取 DC / krbtgt / CIFS / LDAP
Kerberos Constrained Delegation
檢查4624 Transited Services,確認是否有:
- KCD abuse
- 服務代使用者登入
- 高權限帳號異常出現
檢查4769 - delegation 後續服務存取
- 異常票證請求
- 高價值服務存取

Print Spooler & NTLM Relaying
檢查4624:
- 來源是工作站、攻擊機、跳板機,而不是該電腦自己
- Authentication Package = NTLM
- Logon Type = 3
| 手法 | 主要服務面 | 協定 | 核心特色 |
|---|---|---|---|
| PrinterBug | Print Spooler | MS-RPRN | 最經典 coercion,靠列印 RPC |
| PetitPotam | EFSRPC | MS-EFSR | 很常拿來配 AD CS / relay |
| DFSCoerce | DFS Namespace | MS-DFSNM | 利用 DFS 管理 RPC |
| ShadowCoerce | FSRVP / VSS | MS-FSRVP | 利用檔案快照相關 RPC |
| PrivExchange | Exchange | Exchange-related | 偏 Exchange 場景的強制驗證 |
Coercing Attacks & Unconstrained Delegation
AD 攻防實戰演練 Day 17:Kerberos 無約束委派攻擊 - 從子域 DC 跨域提升至父域控制器
AD 提权-委派攻击
檢查windows防火牆:
- DC是否收到來自某主機的445 inbound
- DC是否送出outbound
- 是否在不該互通的網段/VLAN
- 是否短時間重複發生

PKI - ESC1
關於分分鐘拿下整個網域,你還疏忽了什麼?
Certified Pre-Owned
檢查可疑請求,對方是否真的登入成功。
- 檢查CA 4886/4887 (是否用敏感模板申請,例如DomainController)
- 檢查DC是否有4768(重點看來源IP是否為本身)
- 檢查是否有DC 4624
