前言
前幾天,我們學會使用 man 查閱 Linux 程式的使用手冊,也練習了透過 man -k 搜尋隱藏的手冊。
不過,並不是每個程式都有提供 man page。有些程式會在執行時提供 --help 或 -h 等參數,直接顯示程式的使用說明。
今天的 pwn.college 題目,就是要練習透過 --help 閱讀程式文件,找出取得 Flag 的正確方法。
這次除了需要找到正確的選項之外,還要注意選項是否需要額外的參數值,以及程式是否提供其他可以協助我們的功能。
題目:Helpful Programs
首先,我們在終端機輸入 /challenge/challenge --help
執行後,程式顯示以下內容
從這份說明可以看出,程式提供了幾個不同的選項
| 選項 | 功能 |
|---|---|
-h、--help |
顯示使用說明 |
--fortune |
顯示 fortune 內容 |
-v、--version |
顯示版本資訊 |
-g、--give-the-flag |
提供正確的值以取得 Flag |
-p、--print-value |
顯示能讓 -g 成功取得 Flag 的值 |
其中,最值得注意的是最後兩個選項。
既然說明文件已經告訴我們 --print-value 的用途,接下來就直接執行/challenge/challenge --print-value
終端機輸出如下
因此,我們找到了正確的參數值833
這個步驟讓我理解到,閱讀程式說明時,不應該只注意看起來像答案的主要選項,也要留意其他輔助功能。
如果沒有仔細閱讀 --help,就可能忽略 --print-value,花更多時間猜測正確的數值。
找到正確的值後,我們就可以使用 -g 選項取得 Flag。
執行結果如下
成功取得本次挑戰的 Flag!
回顧整個操作流程
--help 查看程式說明。-g、--give-the-flag 的功能。-p、--print-value 可以提供正確的參數值。/challenge/challenge --print-value。833。/challenge/challenge -g 833。今天的題目也讓我接觸到命令列參數的另一個觀念,同一個功能可能同時提供短選項與長選項。
例如
| 短選項 | 長選項 | 功能 |
|---|---|---|
-h |
--help |
顯示使用說明 |
-v |
--version |
顯示版本資訊 |
-g |
--give-the-flag |
提供參數值以取得 Flag |
-p |
--print-value |
顯示正確的參數值 |
短選項通常比較精簡,長選項則比較容易從名稱理解用途。
實際上應該使用哪種寫法,仍然要以程式的說明文件為準。
今天的題目讓我發現,有時候取得 Flag 的關鍵並不是複雜的操作,而是能不能正確閱讀程式提供的資訊。這次只要執行 --help,就能看到程式支援的所有選項。其中,--print-value 更直接提供了 --give-the-flag 所需要的正確數值。如果只看到 -g 需要一個值,就開始嘗試不同數字,反而會浪費時間。對我來說,今天最大的收穫是學會從程式的使用說明中尋找解決問題的線索。未來使用 Linux 工具或資安測試工具時,我也可以先查看文件,理解工具提供的功能,再決定如何操作。比起盲目嘗試,先理解工具的使用方式,通常能更有效率地解決問題。