資安 CTF 2024-05-09

picoCTF - Static ain't always noise 實戰解析

兩種解法——直接用 strings 搭配 grep 撈出 flag,或照題意執行 ltdis.sh 這支反組譯腳本。順帶處理 Permission denied。

#picoCTF#Linux#strings#objdump#writeup

前言

熱騰騰的文章又來囉~

在開始之前想先聊聊為甚麼我想些 picoCTF 這系列的文章。

會寫這系列的文章除了因為不知道要寫甚麼以外,還有因為,其實 CTF 的 writeup 很少中文版的。雖然有可能是我單純沒看到,不過,我也想藉此來宣傳「資安是很有趣的東西」這樣的概念。


Static ain’t always noise

題述

  • link:picoCTF - picoGym Challenges
  • Description:Can you look at the data in this binary: static? This BASH script might help!
  • hint:none (OwO)

打開 static 檔案後會發現裡面一推亂碼,而 BASH script 下載下來後是一個叫 ltdis.sh 的檔案,裡面有一串看不懂的程式碼

好,所有該看的都看完了,我們開始解題吧~。

開始解題

看到一推亂碼我的第一反應是用 linux 中的指令----strings

官方的說法是說它可以幫我映出檔案裡可以印出的字元,不過,個人使用起來是覺得它本身有點將 binary 解碼的感覺。

不管如何用 strings 空格 static,enter 按下去後會跑出一推看似比較看得懂的英文字。前後找一下就可以看到 flag 了。

如果怕慢慢找眼睛會花掉,可以在後面加一行 |grep pico 意思就是我們要從 strings 輸出的文字中找含有 pico 的字串。

strings 搭配 grep pico 的執行結果

當然,我想這應該也不是作者想要的方式,畢竟我們連第二個檔案都沒用到。

因此,用 google 大神查了一下看到了第二種解法。

首先,我們要了解地個檔案室甚麼牛鬼蛇神。

其實,從檔名就可以知道它是 bash 腳本,一個 linux 裡很常見的程式語言。不過,因為我沒學過😅,所以我請 AI 幫我解讀了一下裡面的內容,如下。

用於反組譯二進制文件並從中提取字符串。以下是腳本的主要步驟:

  • 開始反組譯:使用 objdump 命令對指定的二進制文件進行反組譯,只針對 .text 段落。
  • 檢查結果:確認生成的文本文件 $1.ltdis.x86_64.txt 是否非空。
  • 提取字符串:如果反組譯成功,則使用 strings 命令從二進制文件中提取字符串並附上文件偏移量。
  • 錯誤處理:如果反組譯失敗,則顯示錯誤信息並終止腳本。

簡單來說,它將檔案反組譯後會用 strings 指令處理過後再輸出。跟我們在做的事情有點像呢。

不過在我們下 ./ltdis.sh 後他跑出 Permission denied,這個原因大機率是權限不符,所以我們要再下一個指令 sudo chmod +R 777(+R 是遍歷所有子目錄,理論上是不用,不過別人的 writeup 有用到我就把它秀給大家看),這樣我們就可以取得 ltdis.sh 的所有權限了。

將要反組譯的檔案 static 放在 ./ltdis.sh 後面—> ./ltdis.sh static,我們就開心的拿到 flag 啦~。


結語

其實,這題是許多在學 linux 基礎指令時會看到的類似題型,所以如果還想在練習看看其他題可以到 picoCTF 上輸入 strings it。這題就單純是在考 strings 的用法了。

駭客們正監聽著你的電腦,看你有沒有幫這篇按讚😎