ペネトレーションしのべくん

さようなら、すべてのセキュリティエンジニア

taskctf2022 Writeup

はじめに

task4233さんが開催したtaskctf2022に参加していました。 問題数、難易度、期間全てが絶妙で楽しかったです。チュートリアルを置くお人柄も素敵です。ありがとうございました。そしてお誕生日おめでとうございました。:tada:

私はと言いますと、3問残し、ヒント2つ見て25位でした。ヒントを見た問題はfirstとanti_detectionで、どっちも解けませんでした*1

以下、解けた問題だけWriteup書いていきます(Tutorial除く)。解けなかった問題は、他の方や公式Writeupを読んで精進します。

osint

welcome

「taskctf 2019 writeup」とググって出しました。

ramen

Googleレンズで検索したら店名が出てきました。

kofun

まず画像を見て思ったことは以下のとおりです。

  • 古墳の周りはなんか森っぽい
  • 入口の上に木が生えてたっぽい

とりあえず、from:task4233 古墳 という条件でツイート検索をしました。 問題の画像に加えて、埴輪がこっち?を見てるシュールな画像が添付されていました。

お友達と一緒に行ったとのことなので、お友達がヒントになるようなツイートをしてるかもと思って、このツイート前後に古墳についてつぶやいているツイートを検索しました。結果、狙ったものはヒットしなかったものの、たまたま埴輪の画像と同じ場所っぽい画像を添付しているツイートが見つかりました。このあたりが龍角寺古墳群であることが分かりました。

ただ、「龍角寺n号墳」という感じですごくたくさんあるようです。Googleマップでしらみ潰しに見ようにも、きりがありません。

「千葉 古墳」などでGoogle検索していたら、有志の方が公開している、県毎に古墳をリストアップしたGoogleマイマップに辿り着きました。

www.google.com

千葉県の古墳リストを上から見ていると、どうやら「龍角寺111号墳」が森の中にあるっぽいです。問題の入口の周囲の雰囲気と近い気がして、「龍角寺111号墳」でGoogle検索すると、以下の画像が見つかりました。木の位置が問題の画像とドンピシャです。

www.google.com

このサイトから古墳名を確認してflag投げました。インターネットに感謝。

douro

画像を見て思ったこと。

  • 右側通行っぽいのでたぶんアメリ
  • ヤシの木みたいなのが生えてる。マイアミ?(偏見)
  • 信号が特徴的な気がする
  • ぜったい無理やん

最初マイアミを見てたんですが、どうも信号の感じが違います。

早々と方針を切り替えて「アメリカ 十字路」で画像検索していたら、かなり似てる信号が写っている画像が見つかりました。

www.google.com

この記事からはここがどこなのか分からなかったので、更に画像検索すると以下の記事にたどり着きました。Google検索でざっくり読んだ感じ、道の舗装か何かを頑張ったんですかね?とにかく、この似た感じの道路はIrvine Center Driveみたいです。

www.oe-eng.com

GoogleマップIrvine Center Driveにある十字路をひたすら見ていって、ここに辿り着きました。インターネットに感謝。

www.google.com

全ての問題に言えることですが、実際Writeupで書いているほどスムーズには進んでいないです。特にこの問題に関しては、from:task4233 旅行 とか from:task4233 留学from:task4233 渡航from:task4233 パスポートfrom:task4233 海外 などなど、task4233さんのそれっぽいツイートを延々探す時間があり、我ながらだいぶキモかったです*2

web

robots

TryHackMeか何かでrobots.txtに一杯食わされてからというもの、Web問は最初にrobots.txtを見るようにしていて。今回は問題名もそのものズバリだったので、確認すると/admin/flagというパスがあることが分かりました。

アクセスすると、internalからでないとアクセスできない様子。Burp Suiteを使って X-Forwarded-Forヘッダーを追加し、ローカルIPアドレス帯を一通り試した後127.0.0.1でflagが見られました。

misc

ransomware

暗号化スクリプトと、暗号化されたflagが提供されています。 暗号化のアルゴリズムは、C2サーバーから取得したkey(int)と、各文字のXORをとっているようです。 C2サーバーはすでに公開されておらず、以下がポイントっぽいと思いました。

  • 復号はどうやるのか?
  • keyは何だったのか?

まず復号については、XORは2回演算したら元に戻るみたいです。

keyについては、とりあえずパワー回答しようと思って、以下のスクリプトを書きました。

key = 0
data = None

while True:
    with open('taskctf_flag.txt.encrypted', 'r') as f:
        data = f.read()        
        plain = ""
        for ch in data:
            plain += chr(ord(ch) ^ key)
        if 'taskctf' in plain:
            print(f'key: {key}, flag: {plain}')
        else:
            key += 1
            data = None

これを動かして、無事復号できました。

key: 17772, flag: taskctf{x0r_1s_e4sy_70_1mplemen7}

*1:firstは残り2分ぐらいでエクスプロイトが通ったんだけど、100番目のユーザーを見つけてflagを登録するのが間に合わなかったの……本当なの……。

*2:今ですら、ポートフォリオを拝見してそっちで検索するのもありだったと思っている始末。