iT邦幫忙

2026 iThome 鐵人賽

DAY 6
0

【故事】

他回去的時候,屋子是暗的。

他把門帶上,伸手往左邊牆上摸,開燈。

這個動作他做了一年多。


摹室裡那道門,是他第一次真正面對的門。

導典教的第一個能用的東西是破口術式,所以他做的第一件事就是用它。他把術式套上去,門紋亮了一下,然後滅了。

他換了一個。滅了。

他換了第三個。這次連亮都沒亮。

O1 站在那道門前面,手心開始出汗。這種感覺他很熟——是那種「我明明學過,為什麼不會」的感覺。他在公會的頭兩年常常有這種感覺,後來那種感覺消失了,他一直以為是自己變強了。

現在他知道不是。那是因為後來的七年,沒有人再給過他不會的東西。


他退後兩步,坐在地上。

他想起導典的五根柱子。他自己抄目錄的時候整理出來的那五根:

怎麼看、怎麼進、怎麼動、怎麼待著、怎麼寫下來。

「怎麼看」是第一根。

而他剛剛跳過了它。

他忽然覺得有點難為情。他在公會做了七年的卷宗,每一次他做得比別人好的地方,都不是他手比較快,是他看得比較細。他會把一面牆的斷面畫出來,會去數那些別人懶得數的東西。

結果他拿到自己的第一道門,第一件事就是拿槌子。

他站起來,把所有術式都收起來。

然後他開始看。


那道門所在的那面牆,遠看是平的。

他走近,蹲下,開始數上面的孔。

第一遍他數到七個。都是常見的那種,位置標準,邊緣整齊,一看就是照規制開的。他把七個孔的位置、大小、深度抄在冊子上。

第二遍他換了個角度,從側面看。

側面看過去,牆上的光影不一樣。他在第三個孔的下方發現一道淺淺的痕——不是孔,是磨損。那個位置有東西長期進出過。

第三遍他趴下來,看牆根。

牆根的泥比較厚,顏色也比較深,看起來就是牆根該有的樣子。他伸手撥了撥。

泥底下有一個孔。

很小,位置也不對——不在規制上,不在任何一張標準圖裡。它的邊緣很光滑,是被磨出來的,不是被開出來的。有人用過它,而且用了很久。

O1 在那個孔前面蹲了很久。

他沒有立刻動手。他把它的位置、大小、磨損的方向都抄下來,然後回頭把前面七個孔又看了一遍——因為他想知道,這第八個孔是為了繞過哪一個而存在的。

抄完之後,他才把手伸進去。

門開了。


他坐在那間終於打開的房間裡,看著自己的冊子。

前面三個多小時,他什麼都沒做,只是看。最後開門的動作,花了不到一分鐘。

他忽然想明白一件事,而且這件事讓他有一點難過:

他不是比較會砸。他只是比較會看。

這一直是他唯一的長處。七年來沒有人因為這個誇過他,因為「看得比較細」不是一件會被看見的事——看是安靜的,砸才有聲音。

而派令官從來只聽聲音。


那天晚上,他在導典第一頁又加了一行。

那一頁現在有三行字了:

桌子是我的。
先做,再讀。
先看完,再動手。

他把書闔上的時候,屋子還是亮的。整棟樓大概只剩他這一盞。

他關掉摹室,關燈,去睡。

第二天回來,屋子又是暗的。他伸手往左邊牆上摸。


【解咒筆記】Enumeration:九成的門是勘開的

這一篇談 OSCP 整條路上最重要、也最被低估的一件事:列舉(enumeration)

先講結論:如果你卡關,九成的情況不是你不會攻擊,是你沒看完。

一、預設值會害你:那 1000 個 port

nmap 不加參數的時候,只掃最常見的 1000 個 TCP port。

這個預設值對網管很合理,對叩門者是災難。

說實話,我第一次踩到這件事,不是自己發現的。

那是在 OffSec 的實驗室,一台我卡了很久的機器。掃出來的東西我全部試過,該看的都看了,就是進不去。後來是別人點了我一句,我才回頭把全 port 掃一次——那台機器的服務,被刻意放在一個你不會想到的高號 port 上。

那次之後我再也不敢只掃前一千個。

現在我的順序固定是:先掃全 port,看哪些開著;再回頭看每個是什麼服務、什麼版本。

# 1. 全 port 快掃(只要知道哪些開著)
nmap -p- --min-rate 5000 -oA scans/01-allports <target>

# 2. 針對開著的 port 深掃(服務、版本、預設腳本)
nmap -p 22,80,445,49152 -sCV -oA scans/02-detail <target>

分兩階段的理由:全 port 掃描要快,所以不做服務偵測;服務偵測很慢,所以只對真正開著的做。一次全掃又全偵測,你會等到天亮。

二、UDP:練習要做,實務看類型

先誠實說:我實務上掃 UDP 的機會不多。 因為接的案子以網站滲透為主,UDP 幾乎用不到。

練習和考試一定要做,因為靶機環境會把突破口放在那裡,而且真實的內網案子、AD 環境是另一回事。

別全掃,會慢到不可接受:

sudo nmap -sU --top-ports 100 -oA scans/03-udp <target>

值得注意的 UDP 服務:SNMP(161)TFTP(69)NFS(2049)DNS(53)

三、輸出一定要留檔

-oA 一次產生三種格式(normal / greppable / XML),全部留著。

  1. 你會需要回頭比對。 三小時後你會想確認「那個 port 一開始就開著嗎?」
  2. 報告需要原始證據。 這條線一路連到 Day 28

搭配 Day 4 的目錄規範:scans/ 裡的檔名帶時間戳與階段編號。

四、真正的列舉不是「掃 port」

這是本篇的核心。

掃描只是第一步。列舉的產出不應該是一張 port 清單,而是一句話:

這台機器在做什麼?為誰服務?

同一個 80 port,背後可能是公司官網、內部管理介面、或某個設備的設定頁——三者的攻擊路徑完全不同。所以每一個開放的 port 你都要問:

問題 從哪裡看
是什麼服務、什麼版本 -sCV 的輸出、banner
有沒有已知漏洞 版本號 → searchsploit / CVE 查詢
有沒有預設憑證 產品文件、廠商預設帳密
它洩漏了什麼 HTTP title、憑證的 CN 與 SAN、SMB 的主機名與網域名、錯誤訊息

憑證的 CN/SAN 和 SMB 洩漏的網域名特別重要——在 AD 環境裡,那常常是你第一次看到網域名稱的地方(Day 15 會用到)。

五、Web 的列舉是另一整套

只要有 80/443,工作量就會翻倍。

當年我只用 gobuster。 一個工具、一份字典,跑完就當作掃完了。

現在我會跑三個——gobuster、dirsearch、feroxbuster,必要時再加 dirb。

為什麼?因為它們的預設行為、遞迴策略、對回應碼與長度的處理都不一樣,同一個目標,三個工具跑出來的結果不會完全相同。我被這件事坑過,所以現在寧可多花十分鐘交叉確認。

(Day 5 提過「目錄列舉從一行長成三個工具」,指的就是這件事。)

# 目錄與檔案
gobuster dir -u http://<target> -w <wordlist> -x php,txt,html

# 虛擬主機
ffuf -u http://<target> -H "Host: FUZZ.<domain>" -w <wordlist> -fs <filter-size>

外加一定要用眼睛做的部分:原始碼與註解、robots.txt、favicon、錯誤訊息的框架版本、登入頁的行為差異(帳號存在與否的回應時間或訊息)。

工具跑完只是把地圖畫出來,讀地圖的還是你。

六、列舉不是一次性的

拿到 shell 之後,要從裡面再勘一次

外面看到的和裡面看到的是兩台不同的機器:本機開了哪些只綁 127.0.0.1 的服務、有哪些使用者、跑著哪些排程、掛載了什麼、有沒有第二張網卡(Day 14 借道的入口)。

很多人拿到 shell 就急著提權,結果提權的答案其實在一個他沒看過的內部服務上。

七、卡住的時候怎麼辦

一句話:回到第一行,這次看得更細。

  • 全 port 真的掃完了嗎?UDP 呢?
  • 每個服務的版本都查過了嗎?
  • 有沒有哪個回應我「大概看了一下」就跳過?
  • 有沒有哪個字串我看到了但沒查?(一個奇怪的使用者名稱、一個產品名、一個路徑)
  • 我有沒有假設了什麼沒驗證的東西?

最後一項最致命,那是 Day 11〈幻廊〉的主題。

八、為什麼這一節是全系列最重要的

兩個理由。

第一,列舉決定你接下來能做什麼。

很基本但常被跳過的一件事:你得先列舉,才知道要用哪個工具。 不是先挑工具再去找目標。卡關的人常常是反過來的——手上握著一把很熟的槌子,就一直找釘子。

第二,它是唯一一件努力一定會有回報的事。

破口術式有沒有用,看的是那台機器裝了什麼,你控制不了。提權成不成,看的是管理員犯了什麼錯,你也控制不了。

但「有沒有看完」,百分之百由你決定。

在一條充滿運氣成分的路上,它是少數你能完全掌握的東西。

九成的門是勘開的,不是砸開的。
而砸有聲音,看沒有。


【工會箴言】

九成的門是勘開的,不是砸開的。
而砸有聲音,看沒有。



上一篇
Day 5|破封導典
下一篇
Day 7|讀牆上的字
系列文
《再叩一次》—一個中年轉職叩門者的 OSCP 三十夜13
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言