---
# System prepended metadata

title: Magikarp Ground Mission
tags: [' General Skills', ' picoCTF', CTF_Writeups]

---

---
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` 中了，難怪之後回家目錄不是一開始的樣子。