たくみん成長日記

開発したアプリやプログラミングの備忘録を不定期に上げていきます。

SECCON Beginners CTF 2019 WriteUp

はじめに

こんちか!たくみんです。2019年05月25日 15:00から26日 15:00まで行われたSECCON Beginners CTFに友人と2人で参加しました。 結果は以下の通りで、666チーム中150位でした。 f:id:takuminv:20190526201904p:plain:w500

今回僕が解くことができたのは、以下の2問なのですがMisc Welcomeは解説してもしょうがないので、WebのkatsudonだけWriteUpしていきます。

  • Web katsudon
  • Misc Welcome

Web katsudon

問題文

Rails 5.2.1で作られたサイトです。

https://katsudon.quals.beginners.seccon.jp

クーポンコードを復号するコードは以下の通りですが、まだ実装されてないようです。

フラグは以下にあります。 https://katsudon.quals.beginners.seccon.jp/flag

# app/controllers/coupon_controller.rb
class CouponController < ApplicationController
def index
end

def show
  serial_code = params[:serial_code]
  @coupon_id = Rails.application.message_verifier(:coupon).verify(serial_code)
  end
end

解法

とりあえず、https://katsudon.quals.beginners.seccon.jp/flagにアクセスすると以下のようなページに飛ぶ。

f:id:takuminv:20190526202834p:plain:w500

ここに表示されているコード(クーポンコード)を復号するとフラグ(シリアルコード)がゲットできると思うため、どのように暗号化されているかを調べる。 暗号化に関わってくるのは、問題文中の以下のコードである。

@coupon_id = Rails.application.message_verifier(:coupon).verify(serial_code)

message_verifierについて調べると以下のQiitaの記事が見つかった。

qiita.com

この記事には、 Rubyオブジェクトを文字列化しBase64エンコードした文字列と、Base64エンコードしたものを鍵と組み合わせてSHA1でハッシュ化した文字列を--で繋げます。 と書かれているため、暗号化されたコードの最初から、--までの文字列をBase64で復号すれば、フラグがゲットできる事になる。

よって以下のように、暗号化されたコードのうち、--までのBAhJIiVjdGY0YntLMzNQX1kwVVJfNTNDUjM3X0szWV9CNDUzfQY6BkVUBase64で復号することでフラグゲット!!

$ echo "BAhJIiVjdGY0YntLMzNQX1kwVVJfNTNDUjM3X0szWV9CNDUzfQY6BkVU" | base64 -D
I"%ctf4b{K33P_Y0UR_53CR37_K3Y_B453}:ET%

おわりに

ほとんど足を引っ張ったまま終わってしまったなという印象でした。来年にはWebの問題をもっと解けるようになりたいなと思ったので、他の人のWriteUp等を参考にしながら勉強しようかなと思います。ではでは。