SECCON Beginners CTF 2019 WriteUp
はじめに
こんちか!たくみんです。2019年05月25日 15:00から26日 15:00まで行われたSECCON Beginners CTFに友人と2人で参加しました。 結果は以下の通りで、666チーム中150位でした。
今回僕が解くことができたのは、以下の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
にアクセスすると以下のようなページに飛ぶ。
ここに表示されているコード(クーポンコード)を復号するとフラグ(シリアルコード)がゲットできると思うため、どのように暗号化されているかを調べる。 暗号化に関わってくるのは、問題文中の以下のコードである。
@coupon_id = Rails.application.message_verifier(:coupon).verify(serial_code)
message_verifier
について調べると以下のQiitaの記事が見つかった。
この記事には、
Rubyオブジェクトを文字列化しBase64エンコードした文字列と、Base64エンコードしたものを鍵と組み合わせてSHA1でハッシュ化した文字列を--で繋げます。
と書かれているため、暗号化されたコードの最初から、--
までの文字列をBase64で復号すれば、フラグがゲットできる事になる。
よって以下のように、暗号化されたコードのうち、--
までのBAhJIiVjdGY0YntLMzNQX1kwVVJfNTNDUjM3X0szWV9CNDUzfQY6BkVU
をBase64で復号することでフラグゲット!!
$ echo "BAhJIiVjdGY0YntLMzNQX1kwVVJfNTNDUjM3X0szWV9CNDUzfQY6BkVU" | base64 -D I"%ctf4b{K33P_Y0UR_53CR37_K3Y_B453}:ET%
おわりに
ほとんど足を引っ張ったまま終わってしまったなという印象でした。来年にはWebの問題をもっと解けるようになりたいなと思ったので、他の人のWriteUp等を参考にしながら勉強しようかなと思います。ではでは。