iT邦幫忙

2026 iThome 鐵人賽

0
Security

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

Day 30|Shell Builtins:使用 help 查詢 Shell 內建指令 前言

  • 分享至 

  • xImage
  •  

前言
前面幾天,我們學習了如何透過 man 查閱手冊,以及使用 --help 查詢程式提供的使用說明。
不過,Linux 中的指令並不全都是獨立的程式。有些指令其實是由 Shell 本身提供的,稱為 Shell Builtins(Shell 內建指令)。
這次的 pwn.college 挑戰,就是要我們使用 help 查詢內建指令的說明,進一步找出取得 Flag 所需的參數。


一、什麼是 Shell Builtins?

Shell Builtins 是由 Shell 直接實作的內建指令,執行時不需要另外啟動獨立的外部程式。
之前接觸過的 cd 就是一個常見例子。
為什麼 cd 需要是 Shell 內建指令呢?
因為每個程序都有自己的工作目錄。如果 cd 只是獨立執行的外部程式,它改變的會是該程式自己的工作目錄,而不是我們目前使用的 Shell 的工作目錄。
因此,像 cd 這類需要直接影響目前 Shell 狀態的功能,通常會由 Shell 內部處理。

Shell Builtins 與外部程式的差異

比較項目 Shell Builtins 外部程式
執行方式 由 Shell 直接處理 啟動獨立程式
查詢方式 通常可使用 help 常使用 man 或 --help
常見例子 cd、help、export cat、grep、ls

要注意的是,不同 Shell 提供的內建指令可能有所不同;某些常見指令也可能同時存在內建版本與外部程式版本。


二、使用 help 查詢內建指令

Shell 提供了 help 這個內建指令,可以列出或查詢內建指令的使用方式。

1. 列出內建指令

輸入 help
這會顯示目前 Shell 所支援的內建指令及其簡要說明。

2. 查詢特定指令

如果只想了解某個指令,可以將指令名稱傳給 help。
例如 help cd
這樣就能查詢 cd 的使用方式。

這次挑戰的關鍵也是相同的概念:我們需要查詢名為 challenge 的內建指令,而不是直接假設它是一個外部程式。


三、實際操作:尋找正確的秘密值

題目:Help for Builtins

步驟一:查詢 challenge 的說明

在終端機輸入help challenge
查詢後,我找到了以下資訊
https://ithelp.ithome.com.tw/upload/images/20261016/201831802dEGdBILda.png

從說明中可以整理出三個參數

  • --fortune:顯示一句運勢或格言。
  • --version:顯示版本資訊。
  • --secret VALUE:提供正確的秘密值後,就能取得 Flag。

其中,最重要的是 --secret,因為它明確指出取得 Flag 所需的參數。

步驟二:輸入正確的秘密值

根據剛才查詢到的說明,秘密值是 IBmr6n3P。
因此輸入
https://ithelp.ithome.com.tw/upload/images/20261016/20183180QpXL91D4SG.png
終端機成功回傳本關的 Flag!


四、這一關學到了什麼?

這一關的難度不在於複雜的指令操作,而在於判斷應該使用哪一種說明查詢方式。
之前遇到的挑戰,有些可以透過 man 查閱手冊,有些則能使用 --help 找到參數。
但這次的 challenge 是 Shell Builtin,因此應該使用 help challenge 查詢其使用方式。
從這個例子可以看出,面對不熟悉的指令時,不需要立刻猜測參數或反覆嘗試。先查詢說明文件,理解參數的用途,再依照文件提供的資訊操作,通常會更有效率。


五、今天的心得

這次的挑戰讓我進一步了解 Linux 指令背後的運作方式。過去學習指令時,我比較關注指令本身的功能,以及應該輸入什麼參數。但透過這次練習,我發現除了學會使用指令之外,也需要理解指令是由 Shell 內建處理,還是由外部程式執行。這會影響我們應該使用哪一種方式查詢說明。面對不熟悉的指令時,我會先確認它的使用方式,再根據說明逐步操作,而不是單純依靠猜測。這種先查閱文件、理解功能,再實際驗證的習慣,也是未來進行 Linux 系統管理與資安學習時很重要的基礎。


六、系列完賽心得

這次鐵人賽對我而言,是第一次將學習拆解成每日小目標的嘗試。比起一次閱讀大量的技術文件,每天完成一個小挑戰,並把過程整理成文章,讓我有機會重新思考自己究竟理解了什麼,以及哪些地方還需要補強。撰寫文章的過程也讓我發現,能夠成功執行指令,不代表一定能清楚解釋它的原理。當我試著將操作過程整理成文字時,才會進一步注意指令的用途、參數的意義,以及不同操作方式之間的差異。這段經歷讓我更加確定,學習技術不只是追求完成任務,也需要透過整理、實作與反覆驗證,逐步建立真正能運用的知識。對於還在學習資安的我來說,這次系列是一個階段性的成果,也是一個新的起點。感謝一路看到這篇文章的讀者,也謝謝自己願意花時間完成這個系列。從 Linux 的基本操作開始,到最後透過 help 找出 Shell Builtin 的秘密參數(btw 網站上還有非常多題目可以練習),這些看似零碎的小挑戰,逐漸累積成對終端機操作更完整的認識。鐵人賽雖然沒成功完賽,但學習不會在這裡結束。接下來,我會繼續朝 Linux、網路與資訊安全的方向學習,希望未來能將這些基礎轉化成更扎實的實作能力。我們下一個學習系列再見!


上一篇
Day 29|使用 --help 閱讀程式文件:找出正確參數值
系列文
從 Linux 到 Pwn:30 天學習資安攻防 共 31 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言