--- tags: CTF_Writeups, picoCTF, General Skills --- # Magikarp Ground Mission * 解題 這題比較特別,題目提供了一個 On-Demand Instance (隨需實例) ,簡單來說就是一個有時間限制的虛擬主機,會計時1小時,時間到就會關閉。 按下右邊的 Launch Instance ,下方會出現讓你連線的命令,複製起來貼到你自己的 shell 中,格式如: ```shell $ ssh ctf-player@venus.picoctf.net -p 60635 ``` [ssh](https://zh.wikipedia.org/wiki/Secure_Shell) 是用來連結遠端主機的命令,並保證安全連線,上述的命令翻譯成 「連結到主機 `venus.picoctf.net` 埠號 60635 ,以帳號 ctf-player 登入」 其中 `-p` 這個 option (選項) 用來指定埠號。 連線時會出現: ``` The authenticity of host '[venus.picoctf.net]:60635 ([3.131.124.143]:60635)' can't be established. ECDSA key fingerprint is SHA256:[---一串英文跟數字---]. Are you sure you want to continue connecting (yes/no/[fingerprint])? ``` 鍵入 yes 即可。 連結成功後輸入題目給的密碼: ee388b88 ,成功登入取得 shell 操控權,就可以跟自己的 shell 一樣下命令。 你可以看到你的 shell `$` 前面的帳號與主機變成: ```shell ctf-player@pico-chall$ ``` 表示現在正在 pico-chall 這個名字的主機上,帳號是 ctf-player 。 --- 題目說先打 `ls` 命令,我們先照做,可以看到兩個檔案: ```shell ctf-player@pico-chall$ ls 1of3.flag.txt instructions-to-2of3.txt ``` 我們看 `1of3.flag.txt` 那個檔案: ```shell ctf-player@pico-chall$ cat 1of3.flag.txt picoCTF{xxsh_ ``` 看起來是 flag 的一部分,且我們可以猜測一共3個部份。 再來看看 `instructions-to-2of3.txt` : ```shell ctf-player@pico-chall$ cat instructions-to-2of3.txt Next, go to the root of all things, more succinctly `/` ``` 它請我們到根目錄 `/` 去: ```shell ctf-player@pico-chall$ cd / ctf-player@pico-chall$ ls 2of3.flag.txt boot etc instructions-to-3of3.txt lib64 mnt proc run srv tmp var bin dev home lib media opt root sbin sys usr ``` 可以看到有兩個跟剛剛差不多的檔案, `2of3.flag.txt` 應該是第二部份的 flag ,我們看看 `instructions-to-3of3.txt` : ```shell ctf-player@pico-chall$ cat instructions-to-3of3.txt Lastly, ctf-player, go home... more succinctly `~` ``` 咦?又要回去家目錄嗎,回去看看: ```shell ctf-player@pico-chall$ cd ~ ctf-player@pico-chall$ ls 3of3.flag.txt drop-in ``` 居然變了,有點神奇,看起來三個片段都拿到了,先看看 `drop-in` 是啥: ```shell ctf-player@pico-chall$ cd drop-in/ ctf-player@pico-chall$ ls 1of3.flag.txt instructions-to-2of3.txt ``` 原來是剛剛的第一片段,而第二片段在根目錄,我們用個命令將他們串起來吧! ```shell ctf-player@pico-chall$ cat {1of3.flag,/2of3.flag,../3of3.flag}.txt | tr -d '\n' picoCTF{xxsh_0ut_0f_\/\/4t3r_3ca613a1} ``` > 大括號是分配律的概念,意思等同於 > cat 1of3.flag.txt; cat /2of3.flag.txt; cat ../3of3.flag.txt; > 可參考[brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html)。 > > 然後 output 由管道 `|` 傳給 tr 當作 input , > 它會把換行符號 `\n` 去掉後輸出。 順利得到 flag。 p.s: 我重新連線後,發現一開始我們根本不在家目錄,一開始就在 `drop-in` 中了,難怪之後回家目錄不是一開始的樣子。