前言
前面幾天學習了 ls、touch、rm、mv 和 cp 等 Linux 基本指令。
原本我以為使用 ls 就可以看到目前目錄中的所有檔案,但今天才發現,Linux 中有一類檔案並不會直接出現在一般的 ls 結果裡。
這類檔案通常是以 . 開頭的檔案,也就是所謂的隱藏檔案(hidden files)。
今天的 Challenge 就是要利用 ls -a 找出隱藏在 / 目錄中的 Flag。
在 Linux 中,如果檔案名稱是以 . 開頭,預設情況下使用 ls 不會顯示它。
例如建立兩個檔案 touch pwn touch .college
接著使用 ls 只會看到 pwn
而 .college 不會出現。
這並不是代表 .college 不存在,而是因為 Linux 對於以 . 開頭的檔案有特殊的顯示規則。
ls -a 查看隱藏檔案如果想把隱藏檔案也顯示出來,可以使用 ls -a
其中 -a 代表 all。
例如 ls -a 就可以看到 .college pwn
因此 ls 和 ls -a
最大的差別就是:
| 指令 | 顯示內容 |
|---|---|
ls |
一般檔案與目錄 |
ls -a |
包含以 . 開頭的隱藏檔案 |
今天的題目把 Flag 藏在 / 目錄裡,而且檔案名稱是以 . 開頭。
所以如果只使用 ls /
可能無法直接看到 Flag。
這時候就需要使用 ls -a /
來查看 / 目錄中的所有檔案,包括隱藏檔案。
找到以 . 開頭的可疑檔案之後,再使用 cat 讀取它的內容。
首先查看根目錄 ls /
接著使用 -a 參數
這次應該會看到一些平常使用 ls / 不會顯示的檔案。
找到題目所說的「dot-prepended file」之後,可以使用 cat /.<檔案名稱> 讀取檔案內容。
可想而知我們的 flag 應該在 .flag 的檔案裡
這裡最重要的是要注意檔案名稱前面的 . 也是檔案名稱的一部分,不能把它省略。
Linux 中使用 . 開頭的檔案,常被拿來存放設定檔或其他不希望在一般目錄列表中直接出現的內容。
例如使用者的 Home Directory 中常見 .bashrc .profile 這些檔案通常和 Shell 或使用者環境設定有關。
因此「隱藏」並不代表真正的安全防護。
它只是讓檔案在一般 ls 的結果中不顯示。
只要知道 ls -a 就可以把這些檔案列出來。
ls 常用參數今天第一次接觸到 ls 的參數,也可以順便整理一下:
| 指令 | 功能 |
|---|---|
ls |
列出目前目錄的檔案 |
ls -a |
顯示包含隱藏檔案在內的所有檔案 |
ls / |
查看 / 目錄 |
ls -a / |
查看 / 目錄,包括隱藏檔案 |
今天最大的收穫是發現 Linux 的 ls 預設並不會顯示所有檔案。以前看到 ls 的結果,很容易直接認為「這個目錄就只有這些檔案」,但今天才知道,以 . 開頭的檔案會被預設隱藏。這個概念對資安也很重要,因為在分析 Linux 系統時,如果只依賴一般的 ls,可能會漏掉一些重要的檔案。今天透過 ls -a 找隱藏檔案,也讓我更熟悉 Linux 檔案系統的細節。