iT邦幫忙

2026 iThome 鐵人賽

DAY 16
0
Security

《朝 HTB CPTS 前進:資安新手的 30 天實作筆記》系列 第 16 篇

Day 16 — 使用者、群組、服務帳號:誰有什麼權限?

  • 分享至 

  • xImage
  •  

還記得之前顧問提出建議,服務帳號要定期更換密碼,並且落實時,心裡想:

「好喔……但為什麼要特別提服務帳號?」

帳號密碼不是都被說要定期更換嗎(雖然現在有一派說不需要)——但不管如何,為什麼服務帳號特別被拿出來盯 ><

管理者之類的帳號,不是更應該被重視嗎?為什麼被盯的是服務帳號而不是 Admin?

在看完 Academy 的 AD 課程的使用者、群組、服務帳號內容後,終於理解為什麼服務帳號被盯上 xddd

原來服務帳號不只被顧問特別關注,也常常是駭客眼中的寶物~~~

那我們就趕快一起深究使用者、群組與服務帳號,下次再遇到相似狀況,才不會知其然,不知其所以然 xddd


AD 的帳號類型

在開始講 AD 攻擊之前,先把帳號地圖建起來。之後每個攻擊手法才知道在打什麼。

https://ithelp.ithome.com.tw/upload/images/20260930/20184189SB5OUZB7ud.png

左邊是本機帳號,只有這台機器認得。右邊是網域帳號,由 AD 管理,加入網域的電腦可以使用這些網域帳號進行登入與授權。

機器有沒有加入網域,決定我們能不能用網域帳號登入它!!!

帳號類型 vs. 用途 vs. 常見風險

帳號類型 住在哪 用途 常見風險
Administrator 本機 這台電腦的內建管理員 很多人不改名、不停用,攻擊者第一個試
Guest 本機 訪客臨時用 預設停用,但開啟了要注意
SYSTEM(本機系統帳號) 本機 作業系統本身在跑的身分 Windows 很多核心資源都會以 SYSTEM 身分運作;拿到 SYSTEM 後,通常可以取得比一般管理員更高的本機存取能力,也更有機會讀取這台機器上的敏感 credential
Network Service 本機 需要對外連線的系統服務 對外用電腦帳號身分,本身攻擊價值低
Local Service 本機 不需要對外的低權限系統服務 權限最低,幾乎不是目標
Domain User 網域(DC) 員工的日常帳號 密碼弱或被釣魚;即使是最普通的帳號,也能列舉整個 AD
Domain Admins 網域(DC) 管理整個網域 拿到等於全盤皆輸,是攻擊者最終目標之一
服務帳號(SPN) 網域(DC) 跑服務或應用程式(SQL、IIS 等) 密碼是人設的、很久不換,有 SPN 就能 Kerberoast,離線爆密碼
電腦帳號(HOSTNAME$) 網域(DC) 這台機器在 AD 裡的身分 拿到本機 SYSTEM → 可能取得電腦帳號的 Kerberos 憑證 → 取得一個可用於網域操作的機器身分
KRBTGT 網域(DC) 簽發所有 Kerberos ticket 的核心帳號 拿到它的 hash 後,可能被用來偽造 Kerberos Ticket(Golden Ticket),造成非常嚴重的網域持久化風險

AD 小白融會貫通分享~~~

「SYSTEM 不是帳號吧?怎麼比 Admin 還厲害?」
Admin 是人的帳號,SYSTEM 是作業系統本身的身分。Windows 很多敏感的系統資源,會受到額外的權限與保護機制限制!取得 SYSTEM 後,通常能做比一般 Admin 更多的本機操作。這就是為什麼拿了 Admin 之後還要再升到 SYSTEM。

「機器帳號感覺不重要?」——這個卡了我好久
這段查了很多資料才終於搞清楚,趕快記錄下來跟大家分享!
機器帳號(HOSTNAME$)是從本機跳到網域的橋——但有一個前提:這台機器必須已經加入網域,DC 才會建立這個電腦帳號,LSASS 裡也才會有網域的 TGT。
沒加入網域的機器,SYSTEM 就只是本機的 SYSTEM,拿到了也出不了這台機器,對 AD 做不了任何事。

加入網域的機器就不一樣了:

拿到 SYSTEM
  ↓ 讀 LSASS
拿到電腦帳號的 Kerberos TGT
  ↓
等於手上有了一個合法的網域身分
  ↓
開始列舉 Domain 使用者、群組、電腦...

AD 的群組

為什麼要有群組?

公司的門禁系統,只有 Infra 跟總務單位的人可以進某些區域。
如果沒有群組——IT 要一個一個帳號去設定「這個人可以進」,幾十個人要設幾十次,哪天有人離職還要記得去刪。
有了群組——建一個「Infra 群組」跟「總務群組」,把對應的人放進去,門禁系統只設定「這兩個群組可以進」就好。新人進來加進群組就有權限,離職從群組移除就好。
這就是群組最基本的用途——不是一個人一個人設定,而是一次設定給一群人。


Group 有兩種 Type:

1. Security Group
用來控制誰有什麼權限——這是打 AD 最關注的群組類型。所有加入這個群組的帳號,都會繼承這個群組的權限。

2. Distribution Group
用來發 Email 的,跟權限較沒沒關係(對於目標是打AD,可以忽略一下他xddd


Group Scope(群組範圍)——這個群組可以在哪裡用?

這個是我一開始最看不懂的地方——「成員可以從哪裡來」跟「可以在哪裡授權」,聽起來很抽象!
用公司來比喻,有三家分公司(三個 Domain)都在同一個集團(Forest):

https://ithelp.ithome.com.tw/upload/images/20260930/201841892raFapEfcB.png

DomainLocal

  • 成員:可以來自任何 Domain(包括其他 Domain 的帳號)
  • 用途:只能用來控制本 Domain 的資源
    比喻:台北分公司的訪客名單——可以寫來自全台灣的人,但只能讓他們進台北分公司的門。
    實際例子: Administrators 是 DomainLocal——設計上就是用來管理「這台 DC 本身」的權限,不需要跑去管別的 Domain,所以限制在本 Domain。但成員可以來自任何 Domain——如果子公司的人也要能管這台 DC,把他們加進來就好,只是這個群組只對這台 DC 有效。

Global

  • 成員:只能是本 Domain 的帳號
  • 用途:可以被加到任何 Domain 的資源裡
    比喻:台北分公司的員工名單——只有台北的員工,但這份名單可以拿去給其他分公司承認(授權)。
    實際例子: Domain Admins 是 Global——成員只能來自目前這個 Domain。而 Global 群組的特性是可以被加進其他 Domain 的群組裡,所以在多 Domain 環境下,可以透過群組巢狀與授權設計,讓這些帳號取得其他 Domain 資源的權限。
    從攻擊者角度: 拿到 Domain Admins 當然很值錢,但不代表直接就能管理其他 Domain。如果它被巢狀加入其他 Domain 的高權限群組,或存在其他跨 Domain 的權限關係,就可能進一步取得其他 Domain 的資源權限,成為橫向移動的路徑。

Universal

  • 成員:可以來自整個 Forest 任何 Domain
  • 用途:可以在整個 Forest 任何地方授權
    比喻:集團總部的名單——全集團的人都可以加入,也可以拿去給集團任何一家公司授權。
    實際例子:Enterprise Admins 是 Universal Group,屬於 Forest 層級的重要高權限群組,成員通常具有跨 Domain 的管理能力。

Nested Group(巢狀群組)——最有趣也最危險的概念
群組可以包含群組——A 是 B 的成員,B 是 C 的成員,C 有某個高權限。
所以一個帳號的實際權限,可能不只來自它直接所在的群組,而是透過一連串的群組繼承而來——這條路往往很難靠肉眼看出來。


實作時間~~~

這是今天在Forest機器拿到的target ip 10.129.95.210

https://ithelp.ithome.com.tw/upload/images/20260930/20184189fUffTAcMCZ.png

Step 1:登入 Forest

用昨天沒有帳密就列出的帳號 svc-alfresco,搭配破解出的密碼,直接登入:

evil-winrm -i 10.129.95.210 -u svc-alfresco -p s3rvice

https://ithelp.ithome.com.tw/upload/images/20260930/20184189BlqmmbqQpu.png


Step 2:確認我是誰

whoami 
  • whoami:顯示目前登入的帳號是誰

https://ithelp.ithome.com.tw/upload/images/20260930/20184189vqXfiPj51B.png

登入後確認自己是 htb\svc-alfresco——htb 是 Domain 名稱,svc-alfresco 是帳號名稱。


Step 3:確認我有什麼權限

whoami /priv
  • whoami /priv:列出這個帳號有哪些系統權限(Privileges)
  • 可以看到哪些權限是 Enabled(啟用)、哪些是 Disabled(停用)
    服務帳號通常不會有太多特殊權限——但有些環境設定不當,服務帳號反而被給了不必要的高權限,這就是安全漏洞。

https://ithelp.ithome.com.tw/upload/images/20260930/20184189kESXvqMXri.png


Step 4:確認我的群組

whoami /groups

https://ithelp.ithome.com.tw/upload/images/20260930/20184189vW4ZOrvZQf.png
https://ithelp.ithome.com.tw/upload/images/20260930/20184189hmX3Yzg4Wo.png

  • whoami /groups:列出這個帳號屬於哪些群組
    透過這樣,可以看到我們拿到的服務帳號 svc-alfresco 屬於哪些群組——初步看出這個帳號的群組關係><(但光靠這樣還看不出 Nested Group 的攻擊路徑,要等過幾天用 BloodHound 才能看清楚!

Step 5:查 svc-alfresco(自己) 的詳細資訊

net user svc-alfresco /domain
  • net user:查詢使用者帳號的詳細資訊
  • svc-alfresco:要查詢的帳號名稱
  • /domain:查 Domain 層級
    About output:
  • Password last set:密碼上次換的時間——越久沒換越危險
  • Password expires:密碼有沒有設定到期時間
  • Global Group memberships:這個帳號屬於哪些群組

https://ithelp.ithome.com.tw/upload/images/20260930/20184189wWt21wQMEc.png
https://ithelp.ithome.com.tw/upload/images/20260930/20184189X6YPoKCL27.png

等等,這跟剛才 whoami /groups 不一樣?

對,差別在:

指令 顯示什麼
whoami /groups 所有 Scope 的Group 都顯示(Global、DomainLocal、Universal + 系統自動加入的),最完整但很雜
Global Group memberships 只顯示 Global Scope 的群組

所以 whoami /groups 輸出很多是正常的——Global Group memberships 只列這個帳號直接被加進去的 Global 群組,繼承鏈它看不到。

用 PowerShell 查更多屬性:

Get-ADUser -Identity svc-alfresco
  • Get-ADUser:PowerShell 的 AD 模組指令,查詢使用者詳細資訊
  • -Identity svc-alfresco:指定要查的帳號名稱

https://ithelp.ithome.com.tw/upload/images/20260930/20184189kwg0YIaoCA.png

Get-ADUser 預設顯示的是帳號的屬性——帳號名稱、有沒有啟用、密碼設定、上次登入時間這些,不包含群組資訊。

要看群組要另外加 -Properties MemberOf:

Get-ADUser -Identity svc-alfresco -Properties MemberOf | Select MemberOf
  • CN=Service Accounts:群組叫 Service Accounts
  • OU=Service Accounts:它在 Service Accounts 這個 OU 裡
  • DC=htb,DC=local:在 htb.local 這個 Domain 裡

CN 跟 SamAccountName 差別?

  • CN:Distinguished Name 裡的 Common Name,用來表示這個 AD 物件的名稱(例如 CN=Kitty Cat)
  • SamAccountName:登入用的帳號名稱,就是你輸入帳密時打的那個(例如 kitty)

https://ithelp.ithome.com.tw/upload/images/20260930/20184189w9irF3M4qe.png
不只是群組名稱,而是這個群組在 AD 架構裡的完整位置——讓我們知道它住在哪裡。

三個指令的完整對比:

指令 我可以拿來確認什麼
whoami /groups 我目前這個 Token 有哪些群組身分
net user svc-alfresco /domain svc-alfresco 這個網域帳號有哪些 Global Group memberships
Get-ADUser -Properties MemberOf svc-alfresco 在 AD 裡直接隸屬哪些群組

Step 6:查所有群組

net group /domain

https://ithelp.ithome.com.tw/upload/images/20260930/20184189ic9ULm9oBJ.png
https://ithelp.ithome.com.tw/upload/images/20260930/20184189uZ0Xq5H0lB.png
https://ithelp.ithome.com.tw/upload/images/20260930/201841896x2QLAPfss.png

第一次看到這個輸出,有點嚇到——72 個群組,比想像中多很多。

用 PowerShell 可以看到更多細節,包括群組的 Scope:

Get-ADGroup  -Filter * |select samaccountname,groupscope
  • Get-ADGroup:PowerShell 的 AD 模組指令,查詢群組資訊
  • -Filter *:列出所有群組
  • Select SamAccountName, GroupScope:只顯示群組名稱跟Scope

https://ithelp.ithome.com.tw/upload/images/20260930/20184189DdgcC3EsAu.png
https://ithelp.ithome.com.tw/upload/images/20260930/20184189gGi8uQC8zI.png
https://ithelp.ithome.com.tw/upload/images/20260930/20184189h6E3SQMxqo.png
https://ithelp.ithome.com.tw/upload/images/20260930/201841893q6rP47bGQ.png
https://ithelp.ithome.com.tw/upload/images/20260930/20184189bQdW0VrzxX.png

看到 Domain Admins 是 Global,Administrators 是 DomainLocal——這是有意義的,Domain Admins 設計上就是要可以跨 Domain 使用。


Step 7:查特定群組的詳細資訊

不是每個群組都要看——先掃一眼,找出這些有意義的名字,再個別深入:(這裡跟大家一起用兩種查特定群組的資訊的方法,看其中兩個群組的詳細資訊!!!)

在 Step 6 我們看到這個網域有72 個群組,比想像中多很多!!!

不是每個群組都要看——先掃一眼,找出看起來有意義的群組,再多看個幾眼就可可!!!(其他解題,我們交給BloodHound

群組名稱 為什麼要看
Domain Admins 最終目標,看有誰在裡面
Enterprise Admins 比 Domain Admins 更吸引人,是整個 Forest 的最高權限
Account Operators 可建立/修改帳號(能留後門)
Backup Operators 可以做備份相關操作,在權限設定不當時,可能變成取得 DC 敏感資料的路徑
Remote Management Users 可以用 WinRM 遠端登入,跟 evil-winrm 有關

但光靠手動查,很難看出攻擊路徑—— 關於這個,我們後幾天用BloodHound來解決!

BloodHound會把 AD 裡所有帳號、群組、權限的關係,全部視覺化成一張圖,幫我們找「從這個帳號出發,可以透過哪些權限與群組關係,一路走到高權限帳號或 Domain Admin」

查特定群組的詳細資訊
查 Domain Admins 群組

net group "Domain Admins" /domain
  • net group:Windows 內建的群組查詢指令
  • "Domain Admins":要查詢的群組名稱,有空格要加引號
  • /domain:查整個 Domain,不加只會查本機

從群組清單裡能看出什麼?

  • 裡面有哪些帳號?Administrator 通常都在
  • 有沒有服務帳號在裡面?如果有,這是嚴重的設定問題
  • 成員越少越好——Domain Admins 不應該有太多人

https://ithelp.ithome.com.tw/upload/images/20260930/20184189HUI2b2Uv05.png

查Enterprise Admins的詳細資訊

Get-ADGroup -Identity "Enterprise Admins" -Properties *
  • -Identity "Enterprise Admins":指定要查的群組名稱
  • -Properties *:顯示所有屬性,不只是預設的幾個

https://ithelp.ithome.com.tw/upload/images/20260930/20184189cdjTA6o38q.png
https://ithelp.ithome.com.tw/upload/images/20260930/20184189BSZHsA6jyy.png
https://ithelp.ithome.com.tw/upload/images/20260930/20184189EMIHwh0kwl.png


還記得之前我們有拿到shell後的SOP,今天我們來替AD,整理一個進入AD後的SOP

https://ithelp.ithome.com.tw/upload/images/20260930/20184189cEam4YLM2f.png


本日回顧

Linux 單機 vs AD 環境——偵查的思路完全不一樣

以前打 Linux 單機,進了 shell 之後:

目標是「找原本身分看不到的資訊」,慢慢往上爬,慢慢提權~

但 AD 環境不一樣——

進了 shell 之後,偵查當然還是重要,但目標更重要。

在這類 AD 滲透測試裡,常見的高價值目標就是 DC 與高權限帳號,例如 Domain Admin。

滲透測試有時間壓力,不可能把每個帳號、每個群組都翻一遍——要知道「我現在需要什麼資訊,才能往高權限目標前進」,然後有效率地找那些資訊~

不同環境,不同偵察任務~今天更深刻體會到這件事 xdd

明天我們來看一個對驗證非常重要,同時也是駭客眼中很值得研究的 Kerberos 相關議題~
明天見啦~~~


上一篇
Day 15 — Active Directory:從零開始,這個陌生的世界長什麼樣?
下一篇
Day 17 —Kerberos 認證:TGT 跟 Service Ticket 到底差在哪
系列文
《朝 HTB CPTS 前進:資安新手的 30 天實作筆記》 共 17 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言