wtfCTF 2022 writeup

wtfCTF2022に参加しました。第0002回です。適当にwriteup書きます。

f:id:Berrys:20220301065011p:plain

前回のwriteupと言っても昨日まで開催されたcodegateCTFでは、大会終了後もチャレンジを閲覧できたために、どの大会でも同様に落とさないものだと勝手に解釈していた。そのため今回は、記憶の範囲内でwriteup書こうと思う。




Vault

問題から以下のファイルが与えられる。

  • vault.gpg
  • bot (ELF 64-bit)

vault.gpgファイルは、パスワードが掛かっている。botファイルは、そのパスワードを生成するための実行ファイルであると考えられる。

f:id:Berrys:20220301095000p:plain

botファイルにおける上記の部分で、英小文字の適当な3文字のパスワードが生成される。ランダムに生成されるが、その他の情報がないため、総当たりにパスワードを入力した。以下はブルートフォースを実行するためのpythonコード。
import gnupg

data = open("vault.gpg", "rb").read()

moji = "abcdefghijklmnopqrstuvwxyz"

gpg = gnupg.GPG()

for cnt1 in moji:
    for cnt2 in moji:
        for cnt3 in moji:
            now = cnt1 + cnt2 + cnt3
            ans = gpg.decrypt(data, passphrase=now)
            if ("ok" in ans.status):
                print("found")
                f = open("out.txt", "x")
                f.write(ans.data.decode('utf-8'))
                f.close()
                exit()
else:
    print("done")
正直なところ、こんなスクリプトで解けるのか心配だった。実行している間はノートパソコンのファンがブンブン回っていたが、ある時パタリと止んだ。お!と思った。この「お!」は、映画「イミテーション・ゲーム」でクリストファーを用いたエニグマの解読が成功した時(1:16:20)にアラン(=ベネディクト・カンバーバッチ)がハッ!と驚く場面と同じくらい興奮したことを鮮明に覚えている。
これによりout.txtが生成される。以下のコマンドを用いるとFLAGをゲット。
strings out.txt | grep wtf




redherring wtfCTF

問題から以下のzipファイルが与えられる。

  • redherringwtfCTF.zip

解凍後、redherringwtfCTF-masterディレクトリに進むとDockerfileが置いてある。そのディレクトリ内で以下のコマンドを叩く。
docker compose up
するとコンテナ(?)が起動し、127.0.0.1:portに接続できる。Dockerfileを扱うことが初めてだったため、コンテナ(?)の作成が上手くいかず頭がパンクしそうになった。
docker: 'compose' is not a docker command.
上記のようなエラーが出る場合には、以下のコマンドを実行し、rootになると上手くいくはず。またコンテナの起動に伴い、ubuntuOSインストール時にインストールされるdocker composeのバージョンでは、課題を進めることができなかった。.ymlファイルのバージョンと対応させることで、コンテナを起動することができる。バージョン2.0以上のインストール方法を示す。https://berryberry.hatenablog.jp/entry/2022/03/01/104249
sudo su -
docker-compose.ymlにあるport番号を確認し、127.0.0.1:portとしてurl欄に入力すると、接続することができる。
F12の開発者モードでソースコードを閲覧する。Get Hashed Flagボタンを押すと、Consoleに何かが出力されることが分かる。

f:id:Berrys:20220301094120p:plain

Objectにフラグが表示される。FLAGをゲット。