iT邦幫忙

2026 iThome 鐵人賽

DAY 16
0

【故事】

O1在王城門口卡了三天。

那個過路人說的他都懂,攻的是信任,不是牆,要找一條關係的鏈子順著走上去。道理他懂。

但他看不到那條鏈子。

他站在第一間石室裡,手上有一把過路人給他的鑰匙,一個最底層的身分,一個誰都不會多看一眼的雜役。他用這個身分能進門,能在裡面走動,能看到很多人。

可是他看到的是一堆人。

一個一個的人。這個是管燈的,那個是管帳的,那邊那個是看門的。他能看到每一個人是誰,卻看不出來他們之間有什麼關係。

誰聽誰的?誰能用誰的名義?誰替誰保管過鑰匙?哪個雜役其實掛在一個他看不見的名冊上,而那個名冊剛好通到很裡面?

他站在人群中間,覺得自己像個瞎子,眼前明明全是人,他卻連他們怎麼連在一起都看不見。

那三天他很懵。他把每一個人的名字、職稱都抄下來了,抄了滿滿三頁。可是那三頁只是一份名單。名單不會告訴你,誰的背後站著誰。


第三天晚上他又去找史帝凡。

這次史帝凡有空。他聽完 O1 的描述,沒有說話,從自己的行囊裡牽出一樣東西。

那是一隻狗。

不是很大,瘦瘦的,鼻子很長,眼睛是那種一直在聞、一直在找的眼睛。牠一被牽出來,鼻子就開始動,對著王城的方向。

「這是血獵犬。」史帝凡說,「牠聞的不是人。是血脈。」

「血脈?」

「誰跟誰有關係,誰的權能從誰那裡繼承來的。」史帝凡把繩子遞給他,「你看不到的那些線,牠聞得到。」


O1 牽著那隻狗走進王城。

他做的事情很簡單,簡單到他一開始懷疑有沒有用——他只是牽著狗,讓牠把城裡每一個人都聞一遍。這個雜役聞一下,那個管事聞一下,牆上掛的每一面職稱牌都湊上去聞一下。

聞了很久。牠什麼都聞,不挑。

然後他把狗牽回通道口,蹲下來。

那隻狗抖了抖身體,然後,牠聞到的東西,在地上顯出來了。

一張圖。


那張圖是 O1 這輩子沒看過的東西。

城裡所有的人,都在圖上。但重點不是那些人,是人跟人之間的線。

密密麻麻的線。這個雜役連到那個管事,那個管事連到一個更高的職位,那個職位又連到另外三個人。有的線很粗,有的線很細;有的線是單向的,有的是雙向的。

整張圖看起來像一團亂麻。

但那不是亂麻。那是這座城真正的樣子。

外面那些牆、那些門、那些職稱牌,是這座城給人看的表面。而這張圖,是它底下真正在運作的東西——誰的權力從哪裡來,誰其實能碰到誰。


然後 O1 遇到了新的問題。

圖太大了。

那隻狗把整座城都聞了,所以整座城都在圖上。幾百條線,交纏在一起,他一時之間根本不知道要看哪裡。

他在那張圖前面蹲了很久——久到膝蓋都麻了。他一條線一條線地追,追到一半忘記自己從哪裡出發,只好回到起點重來。他試著先找那些「看起來很粗」的線,發現粗的不一定有用;他試著先找最靠近王座的人,發現那些人守得最嚴。

半天過去了。他還在讀那張圖。

他一度以為是自己太笨。 一張圖而已,怎麼會看半天。

後來他才明白:這張圖本來就要看這麼久。 那隻狗負責把線聞出來,可是「哪一條線能走」,狗不會告訴他。牠只把城攤開在他面前,剩下的是他的事。

看圖是慢的。因為看圖不是用眼睛,是用腦子。


到了下午,那隻狗做了一件事:牠用鼻子,在圖上點出了一條線。

不是最短的那條——最短的那條,中間卡著一個守得死死的人,過不去。狗點的是第二條,繞遠一點,但每一步都走得通。

那條線從 O1 手上那個最底層的雜役開始,穿過幾個人,一路連到最裡面那個家族的門。

中間經過的人,沒有一個是「管事的」——全是些不起眼的角色:一個管鑰匙的、一個以前替主人跑過腿的、一個因為某個舊約定還留著一把舊鑰匙的老僕。

一個一個看,他們都不重要。

但把他們連起來,就是一條從門口通到王座的路。


O1 盯著那條線,忽然覺得胃有點涼。

因為這隻狗做的事情,他認得。

這隻狗做的事,就是派令官做的事。

派令官也是這樣看人的。他不看一個人會什麼、做過什麼——他看的是關係:這個人是誰帶進來的,這個人跟誰走得近,這個人的名字最近從誰嘴裡出現過。他順著那些線判斷一個人能到哪裡、不能到哪裡。

O1 這輩子最恨的就是這個。他恨那些看不見的線比他的能力更重要,恨自己的名字因為不在對的線上就被劃掉。

而現在,他蹲在這裡,手裡牽著一隻做著同樣事情的狗。

只是這一次,那雙看關係的眼睛,長在他手上。


他在王城那一頁的下面,補了一行字。

他寫的時候手停頓了一下,因為這行字他自己讀起來都覺得複雜:

「那些線一直都在。以前它們用來擋我。現在我得學會讀它們。」

寫完他看著那行字。

他發現他對那些線的感覺變了。不是不恨了,那七年的帳不會這麼容易就消。

而是他第一次意識到:那些把人連在一起的線,本身沒有善惡。 派令官用它們來排擠人,那個過路人用它們來拉人一把,而現在他要用它們來攻進一座城。

線是同一種線。差別在讀它的人。


有兩條線他怎麼看都看不懂,狗把它們聞出來了,可是他不明白那代表什麼。

他去找了那個過路人。他把圖攤開,指著那兩條線,問:「這個我讀不出來。」

過路人看了一眼,講了兩句。就兩句,那兩條線的意思就通了。

「這也要問喔?」過路人笑他。

「嗯。」O1 說,他沒有覺得不好意思,「這個我不會。」

那是他這輩子,第一次能把「這個我不會」四個字,講得這麼平常。

那天他牽著狗,把那條路走了一遍。

從雜役,到管鑰匙的,到跑過腿的,到那個留著舊鑰匙的老僕,一步一步。每一步他都不是用砸的——他是用「上一個人的名義」,讓下一個人替他開門。

走到那個家族門口的時候,天快亮了。

他沒有推門。他知道自己還差最後一步,那一步是明天的事(Day 17)。

但他第一次,看見了整條路。


【解咒筆記】AD 列舉與 BloodHound:把「關係」變成一張圖

Day 15 說 AD 攻的是信任。這一篇講:信任怎麼被看見。

因為問題就在這裡,信任是看不見的。登入一台機器,看不到「這台機器信任哪個帳號」;看著一個使用者,看不到「他能不能走到管理員」。AD 攻擊最難的第一步,是把看不見的關係變成看得見的東西。

一、先有立足點,才有列舉

AD 攻擊通常從一個已知的網域身分開始:

  • 一組網域帳號密碼
  • 或一台已經加入網域的機器(你先用單機手法拿下的)

這就是故事裡那把「過路人給的鑰匙」。 它不強,通常只是個最低權限的網域使用者。但它的價值不在權限,在視野:有了一個網域身分,你就能開始「查戶口」。

二、查戶口:AD 列舉在列什麼

有了立足點,先把整個網域的「戶籍資料」撈出來:

  • 使用者:有哪些帳號、哪些是服務帳號、哪些很久沒改密碼
  • 群組:誰在高權群組裡、群組是怎麼層層包含的
  • 電腦:網域裡有哪些機器、哪台是 DC
  • 權限關係:誰對誰有特殊權限(能改密碼、能加群組)
  • 會話:哪個高權限帳號,現在登入在哪一台機器上(這一項是黃金)

我實際慣用的工具,老實講不多:

  • enum4linux-ng:我的第一手。綜合列舉,一次把使用者、群組、共享大致掃出來
  • CrackMapExec:AD 測試的瑞士刀,列舉、密碼噴灑、橫向移動都靠它。(目前指令都還是打這個名字;它後來改名 NetExec,舊指令有時跑不動或出問題,才會換新版跑)
  • ldapsearch:偶爾用,需要直接查 LDAP 某個特定屬性的時候

至於 rpcclient,只有在少數幾台「剛好開著 RPC 而且有東西可問」的靶機上用過,不是常備。windapsearch、PowerView 這些我列出來讓你知道有,但不是我的主力。

工具不用多。這幾個能把「網域裡有誰、他們大概怎麼分群」問清楚。

但清單有個先天的問題:它告訴你有哪些人,不告訴你他們怎麼連在一起。而 AD 攻擊要的正是「怎麼連」。

三、BloodHound:把清單變成關係圖

這就是故事裡那隻狗。

BloodHound 把上面那些零散的清單,組成一張關係圖:節點是使用者、群組、電腦,邊是它們之間的關係(「是成員」「能改密碼」「登入在」「能遠端登入」……)。

它分兩部分:

  • 蒐集器:我用 SharpHound(在已入侵的 Windows 上跑)。故事裡「牽著狗把每個人聞一遍」就是它——去網域裡把所有能查到的關係抓回來。(另有 BloodHound.py 可以從 Linux 端跑,適合手上只有 Kali 的情境)
  • 分析介面:把抓回來的資料畫成圖。我用的是開源社群版

它最強的功能,是故事裡那隻狗「用鼻子點出一條線」的動作:

「從我現在這個帳號,到網域管理員,最短的路徑是什麼?」

按下去,它幫你把路徑標出來。

四、為什麼「圖」比「清單」重要一百倍

這是本篇的核心,也是很多人卡在 AD 的原因。

用清單,看到的是:「Bob 是 IT 群組成員」「IT 群組對 Server01 有本地管理員權限」「Alice 最近登入過 Server01」「Alice 在網域管理員群組裡」。

四條各自獨立的事實。分開看,沒有一條是漏洞。

但把它們連起來:

控制 Bob → Bob 能管 Server01 → Alice 登入在 Server01(憑證還在記憶體裡)→ 我拿到 Alice → Alice 是網域管理員。

一條從 Bob 到整個網域的路。

而這條路上,沒有任何一個「漏洞」——每一步都是正常的權限設計。弱點不在任何一個節點,弱點在它們的連法。

這就是為什麼故事裡那句話是「別找門,找關係」。

五、讀圖會很慢,而那是正常的

我讀一張 BloodHound 的圖,常常要花半天以上。

有很長一段時間,為這件事很焦慮。一張圖而已,工具都幫我畫好了,怎麼還要看半天?是不是我特別笨?

後來想通了:不是。這張圖本來就要看這麼久。

BloodHound 最容易騙人的地方,就是它給你一種「答案都在圖上了」的錯覺。好像路徑都畫出來了,剩下的只是照著走。

不是的。工具給你的是「有哪些關係」,不是「哪一條關係走得通」。

  • 最短路徑,中間可能卡著一個你動不了的節點
  • 一條邊寫著「能改密碼」,但實際能不能改,要看一堆前提
  • 圖上沒有畫出來的東西(某台機器上剛好躺著的一組憑證),可能才是真正的鑰匙

而且很多圖,到最後也不是自己讀懂的。

常常是拿著那張圖去問人,「我這樣解讀對不對?」「這條路我走不通,是哪裡卡住?」把自己卡住的地方講給一個走過的人聽,他一句話就點開了。

AD 這種東西,關係複雜到一個程度,本來就不是一個人關起門來能全部想通的。 去問,不是因為弱,是因為這條路本來就是很多人一起走出來的。

如果也在為「BloodHound 開著卻不知道下一步」而焦慮,沒有比較差。只是在做一件本來就慢的事。

六、讀圖的紀律

工具給圖,讀圖是你的事(跟 Day 10 巡紋鏡一樣)。實務順序:

  1. 標記已經控制的節點(Mark as Owned)
  2. 標記目標(通常是 Domain Admins)
  3. 跑路徑查詢:Shortest Path to Domain Admins from Owned
  4. 先看有幾條路,從最短的開始試——但最短的常常卡著過不去的節點,所以要準備好第二、第三條
  5. 對每一條邊,問「這個關係我要怎麼利用」——進入 Day 17

第 4 點是實戰的節奏:先看最短,從短的開始試,卡住就換下一條。 不要死磕一條路,這又回到 Day 11 的幻廊,AD 裡一樣有幻廊。

七、給委託的一個提醒

BloodHound 的蒐集動作在真實環境裡很吵——它會對網域發出大量查詢,防守方偵測得到。

  • 紅隊演練時,蒐集的強度與時機要控制(有隱蔽選項、可只收部分資料)
  • 一般 AD 滲透測試通常沒這麼敏感,但仍要在報告裡誠實記錄你跑了什麼
  • 蒐集回來的資料是整個網域的結構,高度敏感,保管與銷毀按合約走

呼應 Day 4:你的每一個動作都會留下痕跡,而你要為那些痕跡負責。

八、回到那顆新的腦袋

Day 15 說「換一種眼睛」。BloodHound 就是那種眼睛的義肢。

但工具給圖,不會給直覺。讀圖的能力是慢慢養的——每打一台 AD 環境,就多認得幾種「關係的形狀」:哪一種連法代表可以 Kerberoast,哪一種代表有委派可以濫用,哪一種代表憑證就躺在某台機器上等你。Day 17 會拆開講。

圖是工具畫的。但看懂圖的是你,而看懂它需要時間——很多時間。


【工會箴言】

別找門,找關係。
那些線一直都在——差別只在,這一次讀它的人是你。



上一篇
Day 15|王城的形狀
系列文
《再叩一次》—一個中年轉職叩門者的 OSCP 三十夜 共 16 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言