iT邦幫忙

2026 iThome 鐵人賽

DAY 19
0
Security

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

Day 19 — BloodHound:原來 svc-alfresco 可以走到這裡!

  • 分享至 

  • xImage
  •  

終於來到 AD 最後一天了!!!

說實話,一開始規劃鐵人賽每日主題時,知道 CPTS 的 AD 很重要、一定得面對,才規劃了五天的 AD 初探與實作之路~

但真的超害怕的——AD 完全沒碰過,很怕自己做到一半直接斷更 QQ

一路努力下,雖然不敢說已經搞懂 AD 大計(?),
但不只真的完成了原本的計畫,還把一些之前一直覺得很困惑、很難記的名詞——像是 TGT、TGS、Golden Ticket、NTLM、Kerberos 這些

透過實際操作、看輸出、卡關、問 AI,讓自己真的一個一個想過一輪~

沒想到原本霧颯颯的東西,現在居然真的有慢慢進到腦袋裡了 ><

今天是 AD 的最後一天——
我們邀請到神奇的工具:BloodHound,
把前面蒐集到的線索全部串起來,看看AD 環境裡到底藏著什麼我的攻擊捷徑!👀


BloodHound 是什麼?

說實話,一開始對 BloodHound 的認識就只有——

「好像是個自動化工具,可以找到攻擊路徑><」

完全不知道怎麼用QQ (問了 AI 並實作後才搞清楚 xdd

前幾天我們用 net group、PowerView、setspn.exe......等做information gathering、vulnerability assessment、exploitation時,總有一種感覺:

「我知道有這些帳號、這些群組,但知道後又要怎麼透過他們走到 Domain Admin?」

靠肉眼根本看不出來——這就是 BloodHound 存在的原因~

而且BloodHound 還是工具三兄弟~~~

bloodhound-python / SharpHound 是助手 : 負責出征 AD 環境,蒐集所有線索——有哪些帳號、哪些群組、誰有什麼權限、誰跟誰有關係,蒐集完上繳~

  • SharpHound:要進到 Windows shell 裡面才能蒐集
  • bloodhound-python:在 Kali 上就能蒐集,只需要一組帳密

BloodHound 是分析師 : 拿到助手帶回來的資料,把所有關係畫成一張圖,告訴我們:「從這個帳號出發,怎麼有效率的走到 Domain Admin~」
https://ithelp.ithome.com.tw/upload/images/20261003/20184189OLDoMwYEMe.png


開始實作囉~~~

這是今天在Forest機器拿到的target ip 10.129.95.210
https://ithelp.ithome.com.tw/upload/images/20261003/20184189xqLKaeRPiq.png


Step 1:bloodhound-python 蒐集AD資料

bloodhound-python -u svc-alfresco -p s3rvice -d htb.local -ns 10.129.95.210 -c all
  • -u svc-alfresco -p s3rvice:用這組帳密登入——就是 Day 15 破解出來的
  • -d htb.local:指定要蒐集哪個 Domain 的資料
  • -ns 10.129.95.210:指定 DNS 伺服器——bloodhound-python 需要 DNS 才能找到 DC,這裡直接指定 DC 的 IP
  • -c all:蒐集「所有」資訊——使用者、群組、電腦、ACL(權限設定)、GPO 我全部都要

https://ithelp.ithome.com.tw/upload/images/20261003/20184189UlSBOXk479.png
https://ithelp.ithome.com.tw/upload/images/20261003/201841896dbf61r6lS.png

這個domain有 32 個使用者、76 個群組——他們能做什麼、屬於哪個群組、有什麼特權取得成功!!!


Step 2:啟動 neo4j

sudo neo4j start

https://ithelp.ithome.com.tw/upload/images/20261003/20184189FyldkJoRgx.png
https://ithelp.ithome.com.tw/upload/images/20261003/20184189j6670LD3Y1.png
https://ithelp.ithome.com.tw/upload/images/20261003/20184189i4C0jj9RGr.png
https://ithelp.ithome.com.tw/upload/images/20261003/20184189ICyERftwT9.png
https://ithelp.ithome.com.tw/upload/images/20261003/20184189wiOigNYrBO.png
出現Started neo4j (pid:18616),neo4j成功啟動

neo4j是BloodHound 背後用的資料庫——就像 BloodHound 的倉庫,所有蒐集回來的 AD 資料都存在裡面~~~
沒有它,BloodHound 跑不起來~~~


Step 3:啟動 BloodHound GUI

bloodhound &

https://ithelp.ithome.com.tw/upload/images/20261003/20184189veQIyqOq6n.png

帳號密碼預設是:

  • 帳號:neo4j
  • 密碼:neo4j

成功登入
https://ithelp.ithome.com.tw/upload/images/20261003/20184189XA6bV1OTdo.png


Step 4:確認有資料&上傳

開新的terminal,打ls *.json
https://ithelp.ithome.com.tw/upload/images/20261003/20184189MfNeCfwEVY.png

  • ls:列出檔案
  • *.json:只列出副檔名是 .json 的檔案

找到 bloodhound-python 蒐集回來的資料檔案——七個 JSON 檔:

  • computers.json:Domain 裡的電腦
  • groups.json:所有群組
  • containers.json:AD 預設幫我們建好的資料夾,例如 CN=Users、CN=Computers,不能套用 GPO
  • ous.json:OU (自己建的資料夾,可以套用 GPO)
  • domains.json:Domain 資訊
  • users.json:所有使用者
  • gpos.json:群組原則

這些就是 BloodHound 要分析的原始資料——上傳進去之後,BloodHound 才能把帳號、群組、權限的關係畫成圖。

現在去 BloodHound 視窗:

右上角點 Upload Data,把這七個 JSON 檔案(會在家目錄!!!)全部選起來上傳或是直接把檔案拖進 BloodHound 視窗裡。
https://ithelp.ithome.com.tw/upload/images/20261003/20184189vh02WSYTPM.png

但匯入後,畫面上Users 顯示 0,Groups 只有 10——明明 bloodhound-python 說找到 32 個 users、76 個 groups,差很多!


Step 5:發現匯入的資料人數不對,重新跑一次加上 --zip — 打包成 zip 檔:

bloodhound-python -u svc-alfresco -p s3rvice -d htb.local -ns 10.129.95.210 -c all --zip
  • -u svc-alfresco -p s3rvice:用這組帳密登入——就是 Day 15 破解出來的
  • -d htb.local:指定要蒐集哪個 Domain 的資料
  • -ns 10.129.95.210:指定 DNS 伺服器——bloodhound-python 需要 DNS 才能找到 DC,這裡直接指定 DC 的 IP
  • -c all:蒐集「所有」資訊——使用者、群組、電腦、ACL(權限設定)、GPO 全部都要
  • --zip:把所有資訊檔案,打包成一個 zip 檔
    https://ithelp.ithome.com.tw/upload/images/20261003/20184189VeUGvlCqF9.png
    https://ithelp.ithome.com.tw/upload/images/20261003/20184189RIgt0uSxKd.png

Step 6:把資料庫刪掉重建

sudo neo4j stop                                     # 停掉 neo4j
sudo rm -rf /var/lib/neo4j/data/databases/neo4j    # 刪掉舊的資料庫
sudo rm -rf /var/lib/neo4j/data/transactions/neo4j # 刪掉舊的記錄
sudo neo4j start                                    # 重新啟動,自動建新資料庫

確認資料庫狀態——
在瀏覽器,輸入 http://localhost:7474
https://ithelp.ithome.com.tw/upload/images/20261003/20184189r55dTIRWsO.png

下

:sysinfo

https://ithelp.ithome.com.tw/upload/images/20261003/2018418941DTM8wMD4.png

確定資料庫被我們停掉又重啟後,確實有online


Step 7:重開 BloodHound

bloodhound &

https://ithelp.ithome.com.tw/upload/images/20261003/20184189XrVxXOsjM9.png
在登入畫面輸入:

  • 帳號:neo4j
  • 密碼:neo4j,按Login

https://ithelp.ithome.com.tw/upload/images/20261003/20184189z9dVVKGe8Z.png


Step 8:清掉舊資料

在 BloodHound 的 Raw Query 輸入:

MATCH (n) DETACH DELETE n
  • MATCH (n):找到所有節點
  • DETACH DELETE n:把所有節點跟關係全部刪掉
    按 Enter 執行,把所有舊資料刪掉。
    https://ithelp.ithome.com.tw/upload/images/20261003/20184189mBbXjMkSJX.png

然後去 BloodHound 上傳剛剛的 zip 檔解壓縮版!


Step 9:上傳新的 zip 檔

右上角點 Upload Data,上傳剛才重新跑的 zip 檔

先解壓縮剛剛的zip檔
https://ithelp.ithome.com.tw/upload/images/20261003/20184189XTbWLryzxo.png

把解壓縮後的資料夾上傳
https://ithelp.ithome.com.tw/upload/images/20261003/20184189SZ9OmFYPDC.png


Step 10:搜尋 svc-alfresco

在 BloodHound 左上角的搜尋欄——輸入 svc-alfresco,按Enter
https://ithelp.ithome.com.tw/upload/images/20261003/20184189DaLOAzRT1o.png


Step 11:Mark User as Owned

在圖上對 svc-alfresco 這個節點,按右鍵

https://ithelp.ithome.com.tw/upload/images/20261003/20184189GxbQqp9PDz.png

點 Mark User as Owned
https://ithelp.ithome.com.tw/upload/images/20261003/20184189DV0jnfTApS.png
告訴 BloodHound「這個帳號是我控制的」——標記之後,BloodHound 才能幫我們找「從這個帳號出發,最短幾步走到 Domain Admin」。


Step 12:Raw Query 找攻擊路徑

MATCH p=shortestPath((u:User {name:"SVC-ALFRESCO@HTB.LOCAL"})-[*1..]->(g:Group {name:"DOMAIN ADMINS@HTB.LOCAL"})) RETURN p
  • shortestPath:找最短路徑
  • [*1..]:可以經過任意多個節點
  • 從 SVC-ALFRESCO 出發,找到 DOMAIN ADMINS 的最短路徑
    https://ithelp.ithome.com.tw/upload/images/20261003/20184189VgIZ9SoJtc.png

看懂這張圖

看到這張當下,整個人愣住 — 一堆圓圈跟線,完全不知道從哪裡開始看 xdd

問了 AI,AI 點出「那些線上面有字!!!」——我才發現,原來線上面的字就是兩個節點之間的「關係」!

從自己控制的帳號出發,沿著線往外看——線上的字告訴我們目前這個節點跟下一個節點是什麼關係,幫助我們觀察如何從目前身分走到最高權限~

先認識圖上的節點:

圖示 顏色 代表什麼
👥 兩個人 🟡 黃色 群組(Group)
👤 一個人 🟢 綠色 使用者帳號(User)
📦 箱子 🟠 橘色 Container/OU
🖥️ 電腦 🔴 紅色 Domain Controller
🌐 internet 🟢 青綠色 整個網域(Domain)
💎 鑽石 🔴 紅色 高價值目標 ⚠️

📦 Container/OU是什麼?

Container 跟 OU 都是 AD 裡用來「裝東西」的資料夾——

  • OU(Organizational Unit):我們自己建的資料夾,可以套用 GPO
  • Container:AD 預設幫我們建好的資料夾,例如 CN=Users、CN=Computers,不能套用 GPO

再看節點之間的「線」
我一開始完全沒注意到線上有字 xdd 問了 AI 才發現!

線上的字就是兩個節點之間的關係~

  • MemberOf:是...的成員(跟著這條線走 = 繼承它的關係)
  • CanPSRemote:可以遠端登入那台電腦
  • DCSync:可以把整個網域的帳密全部偷出來 ⚠️(最致命的一條)

來看看我們的圖~~~

SVC-ALFRESCO(就是我!)
  ↓ MemberOf → 是 SERVICE ACCOUNTS 的成員
  ↓ MemberOf → SERVICE ACCOUNTS 是 PRIVILEGED IT ACCOUNTS 的成員
  ↓ CanPSRemote → 可以遠端登入 FOREST.HTB.LOCAL(DC)
  ↓ DCSync → 可以把 HTB.LOCAL 整個網域的帳密全部偷出來

沿著這條路走,有機會從當前身分,拿到整個網域的最高權限 🎯


回顧一下~

看到 BloodHound 的攻擊路徑圖,忍不住就想試著照著走><

但圖上的 shortestPath 只顯示關鍵節點,省略了中間步驟~

搭配 Day 16 的 whoami /groups,看到 BUILTIN\Account Operators——

svc-alfresco 繼承了 Account Operators 的成員身份,所以有管理群組的權限!

再看 BloodHound 的圖,終點是 DCSync~~

才想到「我們有 Account Operators 的權限,那是不是可以利用這個權限,把自己加進關鍵群組,往 DCSync 的方向走?」

BloodHound → 告訴我們終點在哪、大方向是什麼
whoami /groups → 告訴我們手上有什麼權限可以用
兩個合在一起 → 才能真正走這條路

嘗試利用繼承來的 Account Operators 權限,把自己加進關鍵群組,試著走到 DCSync ><

加入成功了,但還是沒辦法真的執行 DCSync——而且發現加入後又會自己消失,不太確定是什麼問題 QQ

雖然沒有真的拿到 Domain Admin,但這五天讓我真的搞懂了 Nested Group 的概念——原來權限可以透過群組一層一層串起來,最後形成一條往高權限前進的路徑(我們的目標!xddd

當然,還是有一些知識盲區,所以沒辦法順利走完整條路 QQ(但至少已經知道路長怎麼樣了!)

比起五天前,現在對 AD 世界的這些名詞:

TGT、TGS、SPN、Kerberoasting、Nested Group、DCSync、BloodHound……

也開始有感覺了!這些以前看到頭很痛的名詞們,現在竟然可以講出它們在幹嘛了 xdd 真棒! 🥹

明天會往下一個目標機器——Cronos 前進~~~

AD 的部分我會私下繼續努力,延續這五天的衝勁,持續拉近我與 AD 間的距離 xddd

五天前還很焦慮「AD 會不會讓我斷更」,沒想到我做到了!!!開心

那我們就明天見囉~~~


上一篇
Day 18 — AD 常見攻擊手法:需要什麼條件、利用什麼機制、能拿到什麼
下一篇
Day 20 — DNS 服務開著,代表什麼?Zone Transfer 實戰
系列文
《朝 HTB CPTS 前進:資安新手的 30 天實作筆記》 共 20 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言