iT邦幫忙

2026 iThome 鐵人賽

DAY 0
0
Security

從 Linux 到 Pwn:30 天學習資安攻防系列 第 23 篇

Day 22|使用 find 尋找檔案

  • 分享至 

  • xImage
  •  

前言
前幾天我們已經陸續學會了不少 Linux 檔案操作

  • ls:查看目錄內容
  • cat:讀取檔案
  • touch:建立檔案
  • mkdir:建立目錄
  • cp:複製檔案
  • mv:移動或重新命名檔案
  • rm:刪除檔案

但是當檔案很多,而且我們不知道它到底放在哪裡時,總不能一個目錄一個目錄慢慢找。
這時候就要使用今天的主角 find
find 可以依照條件搜尋檔案或目錄,甚至可以直接從整個檔案系統開始搜尋。
今天的題目就是把 flag 藏在檔案系統中的某個隨機目錄,要求我們把它找出來。


一、認識 find 指令

最基本的 find 可以直接使用 find

如果沒有指定搜尋條件,也沒有指定搜尋位置,find 預設會

  1. 從目前工作目錄開始搜尋
  2. 尋找所有檔案與目錄
    例如目前的目錄結構
.
└── my_directory
    ├── my_file
    └── my_subdirectory
        └── my_subfile

執行 find
就會列出:
.
./my_directory
./my_directory/my_subdirectory
./my_directory/my_subdirectory/my_subfile
./my_directory/my_file

這代表 find 不只是尋找檔案,也會把目錄列出來。


二、指定搜尋的位置

除了直接使用 find,我們也可以指定要從哪個目錄開始搜尋。
例如 find my_directory/my_subdirectory
就會從 my_directory/my_subdirectory 開始搜尋
my_directory/my_subdirectory
my_directory/my_subdirectory/my_subfile

所以可以把 find 想成
find + [搜尋位置] + [搜尋條件]

如果沒有指定搜尋位置,就會使用目前工作目錄 .。


三、使用 -name 尋找指定名稱

如果我們知道檔案名稱,就可以搭配 -name。
例如 find -name my_subfile
會尋找名稱叫做 my_subfile 的檔案。
結果可能是 ./my_directory/my_subdirectory/my_subfile
如果要找目錄 find -name my_subdirectory
也可以找到 ./my_directory/my_subdirectory
因此 find -name + 檔案名稱
就是很常見的檔案搜尋方式。


四、從整個檔案系統搜尋

今天真正重要的地方就在這裡。
如果我們不知道檔案在哪個目錄,可以直接從 / 開始搜尋 find /

因為 / 是 Linux 檔案系統的根目錄,所以從 / 開始搜尋,就代表搜尋整個檔案系統。
例如 find / -name hacker
可能會找到 /home/hacker
這表示 find 可以一路從根目錄往下搜尋所有符合條件的位置。


五、今天的實際挑戰

題目:finding files
今天的題目把真正的 Flag 藏在檔案系統中的某個隨機目錄。
而且有一個很重要的提示:
Flag 的檔案名稱仍然叫做 flag。

所以我們其實已經知道搜尋條件 檔案名稱 = flag

但不知道它在哪裡。
因此可以從根目錄 / 開始搜尋:
find / -name flag

這個指令可以拆成:

find
│
├── /       → 從根目錄開始搜尋
│
└── -name flag
            → 尋找名稱為 flag 的檔案

執行後可能會看到很多結果,因為題目也特別提醒 There are other files named flag on the filesystem.
也就是說,找到 flag 不代表一定是真正的 Flag。


六、為什麼會出現很多錯誤?

在執行 find / -name flag 的時候,有可能看到一些類似 find + /某個目錄 + Permission denied
這不用太緊張。
https://ithelp.ithome.com.tw/upload/images/20261008/20183180n8sDIlbOSu.png
因為 Linux 中有些目錄只有特定使用者或 root 才有權限存取。
我們目前是一般使用者,所以 find 搜尋到某些受限制的目錄時,就會因為沒有權限而產生錯誤。
題目也已經提醒我們:These will cause find to generate errors, but you can ignore those.
所以看到 Permission denied 時,不代表指令失敗。
只要繼續等待 find 搜尋即可。


七、找到 flag 之後

因為系統裡可能存在很多名稱相同的 flag,所以找到結果後不能直接認定第一個就是答案。
但可以推論 flag 可能在 /usr/lib/x86_64-linux-gnu/perl/5.38.2/auto/File/DosGlob/flag
/usr/lib/python3/dist-packages/pwnlib/flag 這兩個其中一個檔案裡

這時候就可以使用 cat + /完整路徑/ + flag 查看內容。
https://ithelp.ithome.com.tw/upload/images/20261008/20183180j3GgHk82wT.png
那就代表我們找到真正的 Flag 了。


八、今天的心得

今天第一次真正感受到 find 在 Linux 裡面的實用性。以前如果不知道檔案在哪裡,可能會想到用 ls 一層一層查看,再搭配 cd 慢慢找。但是當檔案系統變得非常龐大時,這種方法就會非常沒有效率。find 可以讓我們直接告訴 Linux**「從這個位置開始,幫我找符合這個條件的東西。」**今天的題目也讓我注意到一件事情,找到檔案不代表找到答案。因為系統裡可能有很多同名的 flag,所以搜尋之後還是要進一步使用 cat 查看內容,確認是不是我們真正要找的 Flag。這也讓我開始了解到,在實際 Linux 環境中,搜尋、篩選與確認通常是連在一起的操作。


上一篇
Day 21|使用 mkdir 建立目錄:從檔案到目錄
下一篇
Day 23|Symbolic Link:用符號連結找到真正的 Flag
系列文
從 Linux 到 Pwn:30 天學習資安攻防 共 24 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言