iT邦幫忙

2024 iThome 鐵人賽

DAY 24
0
佛心分享-刷題不只是刷題

新手村預備,CTF 小菜雞跌跌撞撞的旅程系列 第 24

Day24 - [Skills] 萬用字元(Wildcard Characters)

  • 分享至 

  • xImage
  •  

萬用字元(Wildcard Characters)

在處理大量文件或自動化任務時,萬用字元幫助我們簡化操作,特別是處理大規模文件時,使用簡單的符號來匹配文件名稱或路徑,替代手動輸入文件名稱,讓指令更為簡潔。以下是常見的萬用字元及其應用方式:

  1. *(星號)
    是最常用的萬用字元,代表匹配任意數量的字元,包括零個字元。可以匹配名稱相似的文件,不論文件名稱長短。

列出目錄下所有 .txt 結尾的文件

ls *.txt 

當需要刪除該目錄底下所有以 .tmp 為結尾的文件時,可以這樣操作:

rm *.tmp
  1. ? (問號)
    用來匹配單一字元,在文件名中具有特定字元變化的情況下非常有用。

匹配所有名稱為 file 開頭,並有一個任意單一字元的 .txt 文件。例如,file1.txt 和 fileA.txt 會被匹配,但 file12.txt 則不會。

ls file?.txt
  1. [] (中括號)
    中括號表示可以匹配文件名稱中範圍內的任意一個字元,列出所有可能匹配的字元或字元範圍。

以下將會匹配 file1.txt、file2.txt 和 file3.txt,但不會匹配 file4.txt。

ls file[1-3].txt
  1. {} (大括號)
    能夠批量生成多個選項組合,適合一次操作多個相似文件名稱的情況。

將 file1.txt、file2.txt 和 file3.txt 一次性複製到 /backup/ 目錄,提升操作的效率。

cp file{1,2,3}.txt /backup/
  1. [^] (排除匹配)
    當需要匹配不包含某些字元的文件時,可以使用 [^],表示排除中括號內指定範圍之外的字元。

匹配 filed.txt 和 filee.txt 等文件,因為這些文件的名稱中不包含字母 a ~ c。

ls file[^a-c].txt

在某些挑戰或環境中,操作字母或符號可能受到限制,這時可以使用萬用字元來替代操作。

  1. 使用 * 探索文件結構
    查看當前目錄的文件結構。若無法使用字母來輸入命令,* 可作為 ls 的替代方案。

列出當前目錄下的所有文件和子目錄

ls *

將所有子目錄中的文件一併列出

ls ./*/*
  1. 特殊變數 $_
    Bash 的特殊變數 $_,該變數保存了上一個命令的最後一個參數。

假設上一個指令執行了 ls *$_ 將會保存最後一個文件名稱,我們可以對其進行後續操作。

echo $_
  1. Parameter Expansion
    Bash 提供的 Parameter Expansion 功能允許我們從變數中提取特定字元。

想從文件名 file.txt 中提取首字母 f,可以透過以下指令。從變數 $_ 的值中提取出第一個字元(即 f)。同樣的,可以逐步提取文件名稱中的字元,進行進一步的操作。

${_:0:1}

知道萬用字元的好用之處後,進入到 Lab 進行今天練習吧 ~

Lab - SansAlpha

https://ithelp.ithome.com.tw/upload/images/20241008/20169462hzGmtIWs07.png

使用題目給的資訊 ssh 連線進入到環境後,發現是一個可以輸入指令但不多的地方。一些基本的指令都被 ban,系統不認這些指令

https://ithelp.ithome.com.tw/upload/images/20241008/20169462VGy4ZBK7i6.png

開始想辦法利用其他輸入來達到像是 cdcat 的效果。運用前面提到的萬用字元 * 試試,給出了新的東西 blargh

https://ithelp.ithome.com.tw/upload/images/20241008/20169462HaiE0kltRh.png

再試試 */* 看有什麼效果,blargh 是一個檔案夾,裡面有 flag.txt,但我們沒辦法讀取他的內容

https://ithelp.ithome.com.tw/upload/images/20241008/20169462ERQGzqv45V.png

使用前面說的 $_,來看看上一個指令執行 * 時,究竟最後一個參數是什麼。結果是一個名為 on-calastran.txt 的文件

https://ithelp.ithome.com.tw/upload/images/20241008/201694628vKwpWFKCU.png

這邊參考 Parameter Expansion 的操作,從on-calastran.txt 提取出我們想要的字元,拼湊出 cat 看可不可以就由他印出 flag

${_:0:1} -> {參數:字元位置:字元個數}
所以 ${_:3:1} 將抓取出 on-calastran.txt 的字元 c

https://ithelp.ithome.com.tw/upload/images/20241008/20169462kEVE6U0HTO.png

依此類推,找出 at,接著搭配剛剛我們使用 */ 切換到下一層目錄,進而印出 flag

${_:3:1}${_:4:1}${_:8:1} */*

https://ithelp.ithome.com.tw/upload/images/20241008/20169462Ygl5g49s3C.png

今天的練習就到這邊,以下是參考資料,請搭配服用:

wildcard character
launch bash without using any letters
Shell Parameter Expansion
取得 shell 上一次命令的參數

內文如有錯誤,還請不吝指教~


上一篇
Day23 - [Skills] 常用 Linux 指令
下一篇
Day25 - [Skills] SSH 與 位元運算
系列文
新手村預備,CTF 小菜雞跌跌撞撞的旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言