puzzle感想ちなみに去年のBeginners参加write-up。Misc1問だったので、少しは進歩した様子。CTFのIRCチャンネルで会いましょう。#seccon-beginners-ctfIRCに入ると、チャネルの説明にflagが。Seccomparehttps://score.beginners.seccon.jp/files/seccompare_44d43f6a4d247e65c712d7379157d6a9.tar.gzサイトにアクセスしてファイルをDLします。こんなファイルが出現しました。GNU/Linux実行してみます。flagということで、引数が一つ必要なようです。flagwrongこんな感じ。違ったら違うと言ってくれるようです。radare2で解析してみようとmain関数を見たら、flagが書いてありました。https://ramen.quals.beginners.seccon.jpこんなページが。ボタンが有るので、すでにいるっぽい「せくこん太郎」を入れてSEARCHしてみるHITしました。injection用クエリを投げてみます。シングルクォーテーション'が入ってるともうだめっぽい。今回はcookieも無いことから、検索機能・DB機能系の脆弱性を疑います。入れてみたところ、せくこん太郎・次郎・三郎の3人が表示されました。前方どころじゃないようです。ここで心当たりのある文字を総当たりで入力してみましたが、他に店員DBにはいないようでHitしません。0-9,a-z,A-Z,あ-ん,ア-ンくらいを試してみたんですけどね・・・。warmupだし、店員DBにFlag君がいて、一言にflagが書いてあることを期待していました。過去問をあさっていると下記の記事が。Qiita2016年のBeginnersのfinal問題です。この手順に沿ってやってみたら出来ました。クエリの組み立て方がわかっていたらいきなり最後のクエリを勘で組み立てて解けた気がします...。刺さっているかどうかの確認です。下記のように入れると全レコードがエラー無く出てきました。今回も最後にスペースが必要でした。次に、テーブルの列数を調べます。nullを増やしていくと2つでエラーでなかったので、テーブルは2列。欲しいtable_nameとcolum_nameを2列に表示するようなクエリを組み立てます。年よりラーメン道一本。美味しいラメーンを作ることが生きがい。好きな食べものはコッペパン。食材本来の味を引き出すことに全力を注ぐ。profileたくさん出てきました。テーブル・カラム名の特定は、勘でいった人のほうが多そう。最後に、flagテーブルのflagカラムを抜き出して表示してもらいます。5.2.1で作られたサイトです。https://katsudon.quals.beginners.seccon.jpクーポンコードを復号するコードは以下の通りですが、まだ実装されてないようです。フラグは以下にあります。endendなんか問題文にソースが書いてあります。指定のurlに行くとこんなページ。topが店舗一覧画面のようです。シリアルコードを入力するページがあります。ためしに店舗一覧ページに合ったシリアルコードをクーポンゲットページに入力してみました。ええー!ちなみにどのクーポンも使えませんでした。これが実装されていないので、まだクーポンが使えないとのこと。ちなみに、flag用のシリアル番号はBAhJIiVjdGY0YntLMzNQX1kwVVJfNTNDUjM3X0szWV9CNDUzfQY6BkVU--0def7fcd357f759fe8da819edd081a3a73b6052aのようです。動作を理解して上記シリアル番号を解析、クーポンをゲットできればそこにflagがありそう。ここでもう一度、既に与えられているクーポンを確認します。decodeしてみます。令和飯店I"reiwahanten:ET平成食堂I"heiseishokudou:ETレストラン昭和I"restaurantshowa:ETflagI"%ctf4b{K33P_Y0UR_53CR37_K3Y_B453}:ETなぁぁにぃぃぃぃっ!もうここでflagが出てきてしまった...!正攻法かわかりませんが、通ったので良し。ソースコード何も使わなかった...。Tired最強の暗号を作りました。暗号よくわからないけどきっと大丈夫!tarファイルが落とせたので解凍すると、encrypted.txtが出現。terminatorsまずはこのなかにflagがないかを確認。encrypted.txtなし。decodeしてみる。decode結果を見たところ、バイナリファイルだったので書き出してみました。f.write(decoded)書き出したファイルを調べてみます。datazlibでした。このファイルをdecompressしてやると、今度はまたbase64っぽい文字列。ルーっプッぽいぞ、ということで、汚いですが下記のコードを。できなくなったらエラーで止まるはずなので、止まったら成果物のファイルの中身を確認しようという作戦。意図通り(?)エラーで止まったので、成果物ファイルの一つdecompressedの中身を見ると、flagがありました。暗号パーティ落としたtarファイルを解凍すると、pythonコードとテキストファイルが。340685435384242111115333109687836854530859658515630412783515558593040637299676541210584027783029893125205091269452871160681117842281189602329407745329377925190556698633612278160369887385384944667644544397208574141409261779557109115742154052888418348808295172970976981851274238712282570481976858098814974211286989340942877781878912310809143844879640698027153722820609760752132963102408740130995110184113587954553302086618746425020532522148193032252721003579780125)]初めて知ったんですけど、coeffって多項式係数の抽出に使われる関数らしい。これを踏まえてencrypt.pyを眺めてみると、ただの3連立方程式に落とせそう。求まれば、これがflagです。numpyのlinalgやscipyなど、色々python用のモジュールやスクリプトを使って楽して方程式を解いてもらう方法を試してみましたが、桁が大きすぎてそのまま使えるものが見つからず。仕方ないので、下の数式を参考に、普通にcoeff[0]を計算する式の計算をゴリゴリ書きました。d//nprint(long_to_bytes(ans))コードが汚すぎてワケワカメですが...。参考リンクの方を参照して下さいまし。https://score.beginners.seccon.jp/files/e35860e49ca3fa367e456207ebc9ff2f_containersurlにアクセスすると、ファイルが貰えました。datastringコマンドで見てみると、下記のような気になる情報が書いてあります。かけてみると、沢山のpngイメージが出現。24912スライドパズルを解いてください。スライドパズルは以下のように表示されます。ブランクで動かすことが可能です。操作方法は以下のとおりです。最終的に以下の形になるように操作してください。|----------------操作手順は以下の形式で送信してください。2なんだか競プロとかpaizaの問題っぽい。スライドパズルを解くアルゴリズムの紹介はたくさんありましたが、時間勝負なので、できればpythonのスクリプトが落ちていることを願ってgithubを漁ります。動作環境がpython2なので、問題をとってきて配列にするところと、出力がグラフィカルな表示だったのをブランクを動かす手順に変えるところだけ、エイヤで書いて通しました。土日で耐久24時間って、用事があったり子守があったりで結局使える時間頑張っても6時間くらい。それでも今の実力だと十分だった気がするし、長くやりすぎても飽きそうなのでちょうどよかったかな。同じこと書こうとしてたよ。今回はもっと時間欲しかったので、やっぱり少しは前進したかな。Twitterでは愚痴ばっかりになってしまいましたが、子育て世代、特に育児メイン担当の週末CTFイベント参加は厳しいものがありますね。合宿とかで家にいないようにしてパートナーや他の方に育児を丸投げしないと育児イベントがちょこちょこ割り込むので、中々集中できる時間をまとまって確保するのが難しかったです。オンライン競技って理解してもらうのも難しいなぁと再認識。Beginners、本日15:00~18:00は無事参戦できた。̆)明日は旦那いないし、せめてラーメンは解きたい...。ワンオペ子守あるある。うまくいけば子供のお昼寝中に競技に参加できます。失敗した場合は・・・白目(꒪ཀ꒪)ちなみにラリホーマは未実装です...。なんだかんだ可愛いのです。