LoginSignup
2
0

More than 3 years have passed since last update.

初心者がSECCON Beginners CTF 2020を解いていく+感想

Last updated at Posted at 2020-05-24

2020年05/23~24に実施されたSECCON Beginners CTF 2020に参加してきました。
結果としては、250位ほどでしたが僕は一個も正解できませんでした…
これからはセキュリティについても学んでいくので、ネットに公開されたWrite Upを参考に解いていきます。

ちなみに問題数が多いのでちょくちょく更新していきます

更新

  • 2020/05/27 Misk問題readmeの解法を追加しました

Web問題

Spy

問題文

As a spy, you are spying on the "ctf4b company".

You got the name-list of employees and the URL to the in-house web tool used by some of them.

Your task is to enumerate the employees who use this tool in order to make it available for social engineering.

てっきり僕はパケット監視でもするのかとか勘違いして、OWASP ZAP使ったのは内緒

解いていく

添付されているapp.pyを見てみるとこんなのが

# auth.calc_password_hash(salt, password) adds salt and performs stretching so many times.
# You know, it's really secure... isn't it? :-)

とりあえず、意味は
ソルトを何回も追加して何度もストレッチしてます。本当に安全だと思いませんか?:-)
とのこと。どうやら実在するユーザはソルトを何回もかけるため処理が遅くなるらしい。

存在するユーザ名を入力して、適当なパスワードを入力してLoginをしてみると、それぞれのユーザのログイン処理の時間が表示される。
その中で、時間が遅いユーザを洗い出してGo to challenge pageでそのユーザを選択してみると、見事フラグが入手できます。

感想

こういった処理時間によって、どういったユーザが利用しているのかがわかってしまう、、、、コワイ
あと、ちゃんとソースコードは見ましょう(重要)

Misk 問題

emoemoencode

問題文

Do you know emo-emo-encode?

いやしらんがな。

そんなことはさておき、emoemoencode.txtを見てみると

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

楽しそう()

余談ですが、この問題は友人が解いていたのですが、CyberChefというサイトを知らなかったので、一個一個調べてやってました(笑)

解いていく

こういった絵文字というのはunicodeというやつらしく、Charcodeを調べるとできるらしい。

Charcode:大文字・小文字が存在しない場合の、Unicodeにおける符号位置を示す。
引用:https://ja.wikipedia.org/wiki/Template:CharCode

CyberChefのInputに先ほどの絵文字の羅列、Operationsより、To Charcodeを選択。すると、Outputに

01f363 01f374 01f366 01f334 01f362 01f37b 01f373 01f374 01f365 01f367 01f361
01f36e 01f330 01f367 01f372 01f361 01f370 01f368 01f379 01f35f 01f362 01f379 
01f35f 01f365 01f36d 01f330 01f330 01f330 01f330 01f330 01f330 01f36a 01f369 01f37d

これで、絵文字がCharcodeになりました。
これだけではなにもわからないので、ためしに答え方であるctf4b{}を入れてみると、

63 74 66 34 62 7b 7d

絵文字のCharcodeと比較すると、文末2文字が一致しているのがありますね。

文末2文字を抽出する

63 74 66 34 62 7b 73 74 65 67 61 6e 30 67 72 61 70 68 79 5f 62 79 5f 65 6d 30 30 30 30 30 30 6a 69 7d

これを逆にOperationsFrom Charcodeに設定してみると、フラグが入手できます。

感想

こういった暗号系で、解答方法にも着目するのは頭がいいなーと思いました。
僕のチームはそれに気づけば答えまで行けましたね… 惜しい

readme

最初はただ.txtファイルを見るだけかと思ったら全然違くて萎えました

問題文

nc readme.quals.beginners.seccon.jp 9712

???
と思いました。
ncとは何ぞ?と思い調べてみると

nc:サーバのプロセスを起動するコマンド

とのこと。とりあえず実行してみると、

File:

と出力された。文字を入力できるので適当に入れても何も応答なし。
添付されているreadmeファイルを解凍すると、server.pyというPythonのソースコードが


import os

assert os.path.isfile('server.py') # 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")

とりあえず、パスを入力してフラグを入手するんだろうなーという意図はわかりました。
あと、ctfがパスに入っていると怒られるっぽい

解いていく

この問題では。プロセスについての知識がいるみたいです。プロセスに関する情報が入っているディレクトリは/prop/{PID}というところ
今回は/proc/self/というディレクトリの中にあるのを使う

僕はこの辺が無知なので、どういったことができるかを確認。

$ cat /proc/self/cmdline
cat/proc/self/cmdline

cmdlineというのはプロセスを開始するときに発行されるコマンドを含むもの、とのこと
そのほかに
cwd:そのプロセスで現在稼働しているディレクトリへのシンボリックリンク
environ:プロセスの環境変数の一覧。環境変数は大文字、値は小文字
exe:このプロセスの実行可能ファイルのシンボリックリンク
と、数が多いのでこのへんにしますが、結構何でもできそう…

まず、環境変数を確認しましょう

$ 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=13113SOCAT_PPID=1SOCAT_VERSION=1.7.3.3SOCAT_SOCKADDR=172.21.0.2SOCAT_SOCKPORT=9712SOCAT_PEERADDR=126.140.175.84SOCAT_PEERPORT=49718

ここにある

PWD=/home/ctf/server

この環境変数PWDにはカレントディレクトリの情報があります。よってカレントディレクトリは/home/ctf/serverとなります。
つまり、/proc/self/cwdというのは、/home/ctf/serverと同じ意味になります。
で、問題のフラグの場所なんですが、とりあえず/ctfにあるのかなーという予想はできます。答えなんですが、これはCTF上の雰囲気的なものなんでしょうか、、、/ctf/flagというのがあり、そこをたたけばフラグが取得できます。

これはほぼ勘で指定している人がいたので、そうゆうことかと

感想

プロセスを用いてこんなことができるとは思ってもいませんでした。
なんかctfっぽい問題が解けたので個人的にはすごく気持ちがいいです。

参考にした記事

SECCON Beginners CTF 2020 Write-Up @DyingFrog

SECCON Beginners CTF 2020 作問者Writeup @ptr-yudai

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0