血獵犬給了O1一條路。這一天,他要走上去。
那條路從一個雜役開始,經過四個人,通到那個家族的門。O1 站在第一個人,管鑰匙的——面前,然後遇到了第一個問題:
這個管鑰匙的,不認得他。
他手上有雜役的身分。可是管鑰匙的不會因為「你是個雜役」就替你開門。他需要的是管鑰匙的所信任的那個人的身分。
而那個身分,不在他身上。
O1退回去,重新看那條路。
他發現自己想錯了。他一直以為「順著關係走上去」的意思,是他從雜役變成管鑰匙的、再變成下一個人,像爬階梯一樣,一階一階換身分。
不是。
他不需要變成那些人。他需要的是,讓每一道門,以為來的是它認得的人。
門不會看臉。門這種東西,從來不看站在它面前的是誰。門只認一樣東西:印。
拿著它認得的那個印,門就開。它不會抬頭確認那個印是不是真的長在你身上。
O1 蹲下來,開始想:那個管鑰匙的認得誰的印?
他回到那個雜役待過的地方翻找。雜役地位低,但雜役每天要進出很多房間,而每一次進出,都會在門框上留下一點痕跡——那些痕跡裡,藏著雜役用過的印的影子。
他找了很久,在門框的一道縫裡,找到一片很淡的影。
那不是印本身。是印蓋下去之後留下的殘影,像蓋章蓋在紙上,紙的背面會透出一點痕跡。影很淡,但夠了。
他把那片影拓下來,拿到管鑰匙的門前。
他沒有假裝自己是誰。他只是把那片影亮出去。
門開了。
門沒有問他是誰。門只看到一個它認得的影,然後它就開了。
這一招O1一連用了幾次。
管鑰匙的門前,一片影。跑過腿的那個人門前,另一片影——那片影他是從管鑰匙的房間裡找到的,因為跑過腿的人,以前替管鑰匙的做過事,留過印。
一片影帶他到下一片影。每一個人的房間裡,都藏著通往下一個人的影。
這正是血獵犬圖上那些線的真正意思——不是「這些人互相認識」,是「這些人的印,在彼此的房間裡留過影」。
O1 一路拓影、一路叩門,走得越來越順。他甚至有點恍惚,這件事太安靜了。沒有破口術式的火光,沒有撞門的巨響。他只是一次又一次,把一片別人的影亮在門前,然後門就開了。
這座城最堅固的地方,是靠信任守的。而信任,是這座城裡最好偷的東西。
走到那個留著舊鑰匙的老僕門前,他停了一下。
那個老僕特別重要。血獵犬在他身上標了一個很粗的記號——因為那個老僕,因為一個很久以前的舊約定,手裡還留著一把通到那個家族內院的鑰匙。
那個約定,那個家族早就忘了。但系統還記得。系統從來不會忘記它承諾過的信任,哪怕承諾的對象已經沒有人記得。
O1 從前一個人的房間裡,拓到了老僕的影。
他站在老僕門前,把影亮出去。
門開了。而門後面,那把通往內院的舊鑰匙,就掛在牆上。
他拿到那把鑰匙的時候,天快亮了。
他坐在老僕的房間裡,看著手上那把舊鑰匙,忽然想起一件事。
他想起自己在公會的最後那幾年。他其實也是一把「被系統忘記的鑰匙」,他做過很多事,有過很多貢獻,那些貢獻理應在某個地方留下一點什麼。可是沒有人記得了。派令官不記得,公會不記得。
他一直以為,被忘記,就等於不存在。
可是這個老僕教了他另一件事:系統忘記你,不代表那個信任消失了。它只是躺在那裡,等一個知道怎麼用它的人。
那個老僕不知道自己手裡的鑰匙有多重要。是 O1,是那隻狗,讓那把被遺忘的鑰匙重新變得有意義。
他坐在那裡,想了很久一件事,他自己身上,是不是也有一把這樣的鑰匙?一個被所有人忘記、包括他自己都快忘記,但其實一直都在的東西?
他沒有推開內院的門。
離天亮還有一點時間,他大可以走完最後這一步。但他沒有。
他把那把舊鑰匙握在手裡,退了出來,走出王城,走回自己的石室。
因為他想乾乾淨淨地,在一個完整的白天,清醒地,走完最後那一步。
不是在一個熬了整夜、快要天亮的恍惚裡。
他這幾個月太常在恍惚裡做決定了。這一次,他想清醒著贏。
他在王城那一頁的最後,寫下一行:
「門不看臉,門只看影。
而這座城最堅固的地方,剛好是它最好騙的地方。」
寫完他闔上冊子。
明天,或者說今天晚一點,他要去推開那道內院的門。
第三次進王城,他終於,看得懂它了。
Day 16 用 BloodHound 看見了路。這一篇走完它——AD 攻擊真正的手起刀落,都在這一段。
拿 DC 當目標、一路橫向到底,那是紅隊演練的範疇。一般滲透測試很少直接以整座網域為目標——AD 太核心,客戶通常不會讓你在正式環境裡這樣搞。自己這些年,真正在客戶端碰 AD 的次數,一隻手數得完,而且幾乎都是紅隊案。
所以對多數人來說,AD 的主戰場是靶機和考試:OffSec 的 PG Practice、Lab,或考試那組。而且很多靶機是單機收尾,真正「整個 AD 環境」的靶機不算多。
核心觀念一句話:
在 AD 裡,你很少「變成」某個人。你更常做的,是拿著那個人的『證明』,讓系統以為你是他。
系統驗證身分,靠的不是「你本人」,是你能不能出示正確的憑證。而憑證,是可以被偷、被傳遞、被偽造的。這就是故事裡那句「門不看臉,只看影」。
先分清楚會撿到的東西是什麼形態,因為用法完全不同:
| 形態 | 是什麼 | 怎麼用 |
|---|---|---|
| 明文密碼 | 最直接 | 直接登入 |
| NTLM 雜湊 | 密碼的「影」——不是密碼,但系統認它 | Pass-the-Hash |
| Kerberos 票證 | 一張「通行證」 | Pass-the-Ticket |
| 可破解的雜湊 | 服務帳號的加密憑證 | Kerberoasting |
重點:你常常不需要知道密碼。 你只要那個「影」,雜湊或票證——就能讓門開。故事裡「拓下印的殘影」就是這個:你沒有印本身,你有它留下的影,而門只認影。
拿到一台機器的存取後,第一件事是搜刮憑證。機器的記憶體、登錄檔、快取裡,藏著登入過這台機器的人的憑證。
故事裡「每個人的房間裡都藏著通往下一個人的影」講的就是這件事:你拿下的每一台機器,記憶體裡都可能有別人的憑證。 那個「別人」如果權限比你高,你就往上走了一階。
「哪個高權限帳號登入在哪台機器」是黃金情報(Day 16 的會話列舉),那台機器的記憶體裡,就躺著那個高權限帳號的影。
Windows 的一個古老設計:驗證身分時,很多情況下系統比對的是密碼的 NTLM 雜湊,不是密碼本身。
所以如果挖到某個帳號的 NTLM 雜湊,你不用破解它,直接拿雜湊去登入。
crackmapexec smb 172.16.5.0/24 -u Administrator -H <NTLM雜湊>
impacket-psexec -hashes :<NTLM雜湊> Administrator@目標
(crackmapexec 後來改名 NetExec,舊指令有時跑不動我才換新版。)
這就是故事裡「一片影帶你到下一片影」,在 A 機器挖到管理員的雜湊,拿去開 B 機器的門。
AD 裡有些帳號是給「服務」用的。有一個設計是:任何一個網域使用者,都可以跟系統要一張「用來存取某個服務」的票證,而那張票是用該服務帳號的密碼雜湊加密的。
所以,,用最低權限的帳號,去要一張票,帶回家慢慢暴力破解它的加密,就能還原出服務帳號的密碼。
impacket-GetUserSPNs -request domain/user:password
# 然後 hashcat 離線爆破
故事裡「拿走一張符,回家慢慢烤」就是它。可怕在於:不需要任何特殊權限,一個最低階帳號就能發動。 前提只是那個服務帳號設了爆得開的爛密碼——而這種帳號的密碼常常很多年沒改。
AS-REP Roasting 是近親:某些帳號若設了「不需預先驗證」,你連密碼都不用就能要到可破解的票。
下面這條是完整的教科書路徑。它很正統,但不見得每次都走完整條,靶機常常是第 1 步進去、第 2 步就直接挖到 hash,中間全跳過。:
實務上第 3 步的命中率很高,所以,常常是「進去 → secretsdump → 直接拿到往上的憑證」,Kerberoast 反而不是我的起手式。每個人的順序會依打過的環境長出不同的偏好,這很正常。
寫報告的時候,客戶問的是「那我怎麼辦」,所以防禦面要講清楚:
做滲透測試,價值不在「我打進去了」,而是「告訴客戶這條路怎麼堵」。 報告裡每一個攻擊步驟,都要對應一個修補建議——寫太簡單客戶還會追問細節。 這一點 Day 28 完整談。
這一篇的工具(mimikatz 尤其)在真實環境裡動靜很大,防毒和 EDR 幾乎都認得。
技術是同一套,但在哪裡、用多兇,是授權和環境決定的。(又一次回到 Day 14。)
門不看臉,門只看影。
一座城最堅固的地方,如果是靠信任守的——那也是它最好騙的地方。