アオカケスの鳥かご

日々の出来事を綴っていきたい

MaidakeCTF2020 writeupと感想とか

サーバー周りで色々問題が発生していましたが、なんとかMaidakeCTF2020は終了しました。


開始前から予想以上にMaidakeCTFが拡散されていて終始落ち着かなかった上に、スコアサーバーが不調だったことと一部の環境からは問題サーバーが全て404になってしまったりでずっと画面に張り付いていました。

色々とご迷惑をおかけしてしまい申し訳ありませんでした。


さて、MaidakeCTF2020は12時間という比較的短めな期間での開催となりましたが、最終的に登録者数は44人、1問以上Flagを通したのは30人でした。

前回のMaidakeCTF2019が1週間で100人弱だったことを考えると今回は最初から多くの人に遊んで頂けたようで大変嬉しく思います。本当にありがとうございました。


ただ、「初心者向け」と謳っておきながら意図せず難しめとなってしまっていたようでこの点も申し訳なく思います。
もう少し吟味するべきでした。


なお、MaidakeCTF2020で出題した問題は全て以下のURLに置いてあります。
https://aokakes.work/MaidakeCTF2020/

今後ずっと公開したままにしておく予定です。
Flagの入力などは出来ませんが何かの役に立てていただければ幸いです。


以下writeupとなりますが、あえて簡略版にしてあります。
これらを見ながら上記のURLから実際に問題を解いてみるといいかもしれません。

Web

爆速

https://aokakes.work/MaidakeCTF2020/fast/

ボタンを押すと4f1d4bda3.htmlに飛びますが、すぐに元のページに戻されます。
元のページに戻されないように止めてあげるだけです。

Burp Suiteとかview-sourceなどでやるのが簡単です。

残像

https://aokakes.work/MaidakeCTF2020/zanzou/

ROT13っぽいFlagのようなものがありますが、当然13ずつずらしてもFlagにはなりません。
しかもリロードするたびに変わります。


ソースコードを見ると難読化されたJSになっているので整形してあげるとすぐに怪しい部分が見えてくるかと思います。

中身が16進数の怪しい配列があるので、これをascii変換してあげればFlagになります。
デベロッパーツールなどでrot関数あたりにブレークポイントを張って1文字ずつFlagを確認していく手もアリかと思います。

社内用検索エンジン

https://aokakes.work/MaidakeCTF2020/shanai/

何か入力して検索するとURLにbase64文字列がくっつきます。


中身はIPアドレスと検索ワードになっているので、問題タイトルが「社内」となっているようにIPアドレスを社内とみなせるものに偽装してあげればFlagが得られます。


問題が置いてあるaokakes.workのIPアドレスを特定する方法についてはググればたくさん出てきます。

タスク管理

https://aokakes.work/MaidakeCTF2020/task/

MaidakeCTF2020の問題児。
すぐに解かれるだろうと思っていたら結局最後まで解かれずに終わってしまいました。

CTFの猛者たちにも解かれなかったので純粋に悪問だったんだなと思います。
こんなはずでは...。


問題文でSQLi対策は完璧と謳っている通り、どうがんばってもSQLiは刺さりません。
※私が認識している限りでは

XSSは刺さるようにはなっていますが、これはほんの出来心で仕込んだ罠です。
XSSに惑わされて全完されるまでの時間稼ぎをしようという邪な気持ちでやっちまいました。

つまりSQLiでもXSSでもないわけです。


この問題は仕事でとある製品の基本検証をやっているときに得た知見から作成しました。

それが、「MySQLでは文字コードをutf8mb4ではなくutf8に設定していると絵文字などの4バイト文字列が判別されなくなる」というものです。


基本検証では英数字ひらがなカタカナ漢字、そしてマルチバイト文字を片っ端から入力して正常に表示されるかどうかなんていう項目があったりすのですが、「タスク管理」ではまさにそんなことをやる問題です。


DBの文字コードがutf8になっているため、テキトーな絵文字(ここでは🍣)を入力するとタスク一覧では「?」になって表示されます。

MySQLのバージョンによっても左右されますが、utf8では対応していない🍣などのようなマルチバイト文字をinsertしようとするとバグってしまうため、🍣を?に置き換えています。

そして、マルチバイト文字が?になることからなんとなく「Flagにはマルチバイト文字が含まれているのだろう」と推測して欲しかったんですよね...


タスクの検索ではLIKE句が使われていることは少し試せばすぐに分かると思うので、🍣を単騎で検索すればFlagが得られます。


誰にも解かれないと問題自体に不備があったのではないかととても不安でした。
大丈夫ですよね...?

やらかし

https://aokakes.work/MaidakeCTF2020/yarakashi/

いかにもSQLi出来そうな入力フォームがありますが、そうはいきません。
(簡単なSQLiはもう色々なところで出尽くしているしつまらないかな、と思って出題しませんでした)


ソースコードを見ると「?source」がコメントアウトされているので、どんな処理が行われているのか確認できて、KazutoKirigaya.dbというsqliteのDBファイルをカレントディレクトリから読み込んでいることが分かります。


パスが分かるのでURLから直アクセスするとKazutoKirigaya.dbがダウンロード出来るので、ローカルからDBの中身を確認するとログインに必要なIDとパスワードが得られます。

Misc

SVG

https://aokakes.work/MaidakeCTF2020/SVG/

Flagと書かれた青い画像がありますが、この画像はSVGファイルになっています。
SVGファイルの実態はXMLなので、テキストエディタなどで開いてみると普通にFlagが書いてあります。

SVG 2nd

https://aokakes.work/MaidakeCTF2020/SVG2/

今度は赤いFlagです。


当然こちらもテキストエディタで開くことが出来ますが、今度は分かりやすくFlagは書いてありません。

SVGでは文字列を始めすべてのオブジェクトの位置は座標で表されます。
改めて中身を確認すると1つ目のSVGよりも圧倒的に座標の数が多いことが分かるかと思います。


つまりはそれらの1つ1つがFlagになっているわけなのですが、それらはうまいこと隠されています。
そう、Flagの上に四角形を重ねることによって。


ということで、下のほうに記述されているrectというタグで囲われている図形を消してあげればFlagが見えるようになります。
inkscapeなどの編集ソフトを使ってSVGファイルを開き、グループ化を解除して普通に四角形をどかすのもアリです。

🐭🐭🐭🐭

🐭→ねずみ→マウス

ということで、マウス操作の座標データです。


少し下のほうまで確認するとPressedやRereasedとあるように、マウスのクリックなども記録されていることが分かります。
...マウスで文字を書いているということを察していただけるでしょうか。


いい感じにマウスをクリックしている間だけその座標を画像に出力するようなプログラムを書けばFlagが得られます。

焼肉W

https://aokakes.work/MaidakeCTF2020/niku/

aokakes的渾身のクソ問です。


「焼く」ボタンを押すと尋常じゃないスピードで骨付きが回ります。
某日、なんとなく「肉を食べたいなぁ...」と思っていたらこの問題が完成しました。


いらすとやで肉の画像を探していると骨付き肉の画像が見つかり、骨付き肉といえばモンハン、モンハンの肉といえば「上手に焼けました~♪」です。

そうだ、上手に焼いてもらおう。


モンハンでこんがり肉になる時間をググってみると、トップに5秒~5.5秒と出てきたのでそれをそのまま採用しました。
ただ、この5秒~5.5秒という数字はモンスターハンターワールドすなわちMH"W"限定だったので問題名に「W」をつけたのでした。


ということで「焼く」を押してから5秒後ぐらいに「焼き上げる」を押すとFlagを得られます。


ソースコードに「上手に焼けました」があるのでこのままググるとモンハンの肉を焼く動画が出てくること。
そして「焼く」と「焼き上げる」それぞれのボタンを押した時間の差分、すなわち「焼いた時間」を送信していることからヒントが得られるかな~と考えていました。


思いの外難しかったようです。

Crypt

ひらがな64

base64をひらがなにしただけです。
Flagを暗号化する手順はソースコードを見れば分かるので逆のことをするだけ。

さいごに

実はMaidakeCTF2020の開催はかなりギリギリまで迷っていました。

問題の作成自体は2、3ヶ月ぐらい前から始めていたのですが、別に専念したいことが出来てしまったりであまりモチベーションがありませんでした。
しかし、自分の中のCTF担当の人がどうしても開催しろと囁いてきたのでほかにやりたいことを無理矢理押しのけて開催に至りました。


去年は大学4年生でバイト以外の時間をほぼ全て持て余していたような日々だったのでわりとCTFに費やすことが出来ていましたが、今では就職して社会人になりました。

とはいいつつも現状在宅ワークのおかげでわりと自由な時間は多いので好きなことに時間を割こうと思えばそれなりに割くことができたりします。
(入社してから会社には2回ぐらいしか行ってません)


ただ、ハマってしまったんですよね...ホロライブに...。
もうホロライブにハマってからというもの、人生が狂わされてしまいました。


最高。毎日が楽しい。百鬼あやめが最高にかわ余。