taskctf2022 Writeup
はじめに
task4233さんが開催したtaskctf2022に参加していました。 問題数、難易度、期間全てが絶妙で楽しかったです。チュートリアルを置くお人柄も素敵です。ありがとうございました。そしてお誕生日おめでとうございました。:tada:
誕生日CTFことtaskctfは今週の土曜日開催です
— task4233 (@task4233) 2022年12月1日
初心者〜中級者向けの趣味CTFになります
もし良ければご参加ください!#taskctf https://t.co/EQ8WiRTQQC
私はと言いますと、3問残し、ヒント2つ見て25位でした。ヒントを見た問題はfirstとanti_detectionで、どっちも解けませんでした*1。
以下、解けた問題だけWriteup書いていきます(Tutorial除く)。解けなかった問題は、他の方や公式Writeupを読んで精進します。
osint
welcome
「taskctf 2019 writeup」とググって出しました。
ramen
Googleレンズで検索したら店名が出てきました。
kofun
まず画像を見て思ったことは以下のとおりです。
- 古墳の周りはなんか森っぽい
- 入口の上に木が生えてたっぽい
とりあえず、from:task4233 古墳
という条件でツイート検索をしました。
問題の画像に加えて、埴輪がこっち?を見てるシュールな画像が添付されていました。
お友達と一緒に行ったとのことなので、お友達がヒントになるようなツイートをしてるかもと思って、このツイート前後に古墳についてつぶやいているツイートを検索しました。結果、狙ったものはヒットしなかったものの、たまたま埴輪の画像と同じ場所っぽい画像を添付しているツイートが見つかりました。このあたりが龍角寺古墳群であることが分かりました。
ただ、「龍角寺n号墳」という感じですごくたくさんあるようです。Googleマップでしらみ潰しに見ようにも、きりがありません。
「千葉 古墳」などでGoogle検索していたら、有志の方が公開している、県毎に古墳をリストアップしたGoogleマイマップに辿り着きました。
千葉県の古墳リストを上から見ていると、どうやら「龍角寺111号墳」が森の中にあるっぽいです。問題の入口の周囲の雰囲気と近い気がして、「龍角寺111号墳」でGoogle検索すると、以下の画像が見つかりました。木の位置が問題の画像とドンピシャです。
このサイトから古墳名を確認してflag投げました。インターネットに感謝。
douro
画像を見て思ったこと。
- 右側通行っぽいのでたぶんアメリカ
- ヤシの木みたいなのが生えてる。マイアミ?(偏見)
- 信号が特徴的な気がする
ぜったい無理やん
最初マイアミを見てたんですが、どうも信号の感じが違います。
早々と方針を切り替えて「アメリカ 十字路」で画像検索していたら、かなり似てる信号が写っている画像が見つかりました。
この記事からはここがどこなのか分からなかったので、更に画像検索すると以下の記事にたどり着きました。Google検索でざっくり読んだ感じ、道の舗装か何かを頑張ったんですかね?とにかく、この似た感じの道路はIrvine Center Driveみたいです。
GoogleマップでIrvine Center Driveにある十字路をひたすら見ていって、ここに辿り着きました。インターネットに感謝。
全ての問題に言えることですが、実際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}