どうも、のみぞうです。2019/5/25 15:00~5/26 15:00に第2回 SECCON Beginners CTFがオンラインで開催されましたので参加しました。
3問しか解けずBeginner名乗るのもおこがましいレベルですが…私みたいな入門編の人もいると思うのでなるべく丁寧に書き残しておきます。
Misc[warmup] Welcome
サービス問題。IRCのアドレスとチャンネル名が乗ってるのでつなぐと最初のtopicのところにフラグが書いてある。
![f:id:nomizooon:20190527160646p:plain](https://yawaraka-sec.com/wp-content/uploads/2022/04/20190527160646-1024x490.png)
ところで皆さんIRCのクライアントって何使ってるんですか?
私はこちらを使わせていただきました、素人にもわかりやすいUIです。
(あとから追記:これ多分ブラウザでつながるやつですよね…わざわざクライアントいらんのでは…)
Web[warmup] Ramen
問題文のURLにアクセスするとシャレオツなラーメン屋さんのサイトが出てくる。ラーメンの写真がすごく美味しそうでCTFというより深夜の飯テロの様相を呈しています。
![f:id:nomizooon:20190527161241p:plain](https://yawaraka-sec.com/wp-content/uploads/2022/04/20190527161241-1024x612.png)
中央辺りに店員さんを検索するフォームがあり、他に入力できる場所もないので多分ここでなんかするんだろうなと予想。
![f:id:nomizooon:20190527162002p:plain](https://yawaraka-sec.com/wp-content/uploads/2022/04/20190527162002-1024x623.png)
まぁwarmupだし、そんなに難しい出題にはならないと思うので普通にSQLインジェクションを疑う。
カンマを入れて検索すると
![f:id:nomizooon:20190527162146p:plain f:id:nomizooon:20190527162146p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/n/nomizooon/20190527/20190527162146.png)
エラーになるのに
’ or 1=1 --
![f:id:nomizooon:20190527162341p:plain](https://yawaraka-sec.com/wp-content/uploads/2022/04/20190527162341-1024x569.png)
ではエラーにならないのでいよいよSQLインジェクションを疑えば良さそうです。(末尾の半角スペースを忘れてしばらく時間を無駄にしましたがハリネズミ本を読んだらちゃんと書いてあった)
ハリネズミ本(P230~)の通りまずカラム数を特定しようと思いました
' order by 1 #
' order by 2 #
' order by 3 #
順番に試すと3でエラーが出るようになったので、カラム数は2個にしたらいいとわかる。
次にテーブルの一覧とカラム名を抜き出すのが必要と思ったので、またハリネズミ本を参考にして
' UNION SELECT table_name,column_name from information_schema.columns #
と打つと、ビンゴー!なんか下に出てきたー!
![f:id:nomizooon:20190527165311p:plain](https://yawaraka-sec.com/wp-content/uploads/2022/04/20190527165311-1024x695.png)
ずらーっと縦に長かったのでflagで検索したら
![f:id:nomizooon:20190527165350p:plain](https://yawaraka-sec.com/wp-content/uploads/2022/04/20190527165350-1024x661.png)
flagテーブルにflagカラムだということがわかりました。
さっき作った文をちょっと変えて
' UNION SELECT flag,0 FROM flag #
![f:id:nomizooon:20190527170312p:plain](https://yawaraka-sec.com/wp-content/uploads/2022/04/20190527170312-1024x678.png)
出たー!フゥーーー!
Misc containers
問題で謎ファイルが渡されるのでそれを解析する。
Fileコマンドを実行してみたけど何のファイルかよくわかんなかったのでとりあえずStirlingで開いてみる。
途中に臼NGってところがあるのでpngファイルのマジックナンバーが隠れてるということがわかる。
こいつを先頭に持ってきたいので
![f:id:nomizooon:20190527171636p:plain](https://yawaraka-sec.com/wp-content/uploads/2022/04/20190527171636-1024x539.png)
いらん部分をなぞってカットして名前をつけて保存してみる
![f:id:nomizooon:20190527171957p:plain](https://yawaraka-sec.com/wp-content/uploads/2022/04/20190527171957-1024x357.png)
c?!
![f:id:nomizooon:20190527172156p:plain](https://yawaraka-sec.com/wp-content/uploads/2022/04/20190527172156.png)
よく見ると下にも何個か臼NGがあるので、同様に検索して上の部分を切り捨てて別名で保存してみる。
![f:id:nomizooon:20190527172404p:plain](https://yawaraka-sec.com/wp-content/uploads/2022/04/20190527172404-1024x905.png)
パターンミエテキタヨー!!(厚切りジェイソン風に)
…とここまでやって、臼NGが残り30個以上あることに気づき「これ最後までやるのさすがにめんどくせえな…」と思い、楽ができる方法を探しました。
ググり力が足りないのかコマンドに行き当たらず、最終的に使ったのが勉強会で教えてもらったこちら。
右上のInputのところに出題ファイルをドラック&ドロップ
左のOperationsから「Extract Files」を選んでRecipeにドロップ
![f:id:nomizooon:20190527185620p:plain](https://yawaraka-sec.com/wp-content/uploads/2022/04/20190527185620-1024x617.png)
すると右下のOutput欄から取り出されたpngファイル見れる(ダウンロードもできる)のでがんばって1文字1文字書き写しました…(ここは手動…)
こういうのはスクリプトとかさくっと組んでエレガントに解答できるようになりたい…
もうすこしがんばりましょう
去年の第1回CTF4B含め、何度かJeopardy形式のCTFは参加したことがありますがWriteupは初めてです。
CTFは終わったあとにWriteupを書く文化があることは知っていたのですが、ビギナーどころか入門レベルの私が解ける問題は「既に他の方々が素晴らしいWriteupを書いていらっしゃるし…」とずっと気後れして書けずにいました。
でも、去年から解ける問題が増えているわけでもなく…日々の勉強は書き残しておかないと蓄積されない!というかほぼCTFで遊んでるだけになってる!と気づきました。これからは稚拙ながら何か書いていこうと思います。