ぶちのブログ

競プロとCTFが趣味なWebエンジニアのアウトプットの場

令和CTFに出場しました

SECCON 令和CTFに出場しました!
CTF初出場でしたが、非常に楽しかったので記事にします。

解けた問題

MISCの1問目

はい。

MISCの2問目

『平成令和「」。』の7種類の文字からできているBrainF*ckのコードらしきものが与えられる。
全通り試すのは少し大変だが、フラグの文字列を出力するコードだろうとあたりをつけ、HelloWorldのサンプルコードと見比べたりメタ読みをした。

>→令 +→和 「→[ 」→] 。→.

までは正しい気がしたので、残り2通りは試してみて、ググって出てきたBrainF*ckインタプリタで実行したらできた。
ちなみに、文字の変換はRubyを使ってirb上でString#trメソッドでベタ書きした。

MISCの3問目

ncコマンドでアクセスすると

[1/100]
0=?-15
?=

のような形式で問題が与えられる。関数電卓を叩きながら単純に解いてみたが、右辺の項数が徐々に増えていき、15秒くらい?でTimeOutするので、人力では不可能っぽい。
面倒なことはRubyに任せよう、ということでこんな感じのコードを書いて実行したら通った。

require 'socket'
$sockin = TCPSocket.open(host, port)
$sockout = $sockin

100.times do
  response = $sockin.gets
  response2 = $sockin.gets
  puts response
  puts response2
  (0..).each do |i|
    equation=response2.sub(/\?/, i.to_s).sub(/=/, '==')
    if eval(equation)
      $sockout.write(i.to_s)
      break
    end
  end
end

while true
  response = $sockin.gets
  puts response
  if response == nil
    break
  end
end

文字列中の=を==に置換し、文字列の?をiに置換し、evalメソッドで評価する。
20問ほど手動で頑張ったときに、iが0以上っぽいことが判明していたので単純に線形探索した。99問目で答えが出るのに10秒弱かかったときは結構焦りましたが、運良く通ってくれました。ダメだったら二分探索書くことになっていたので結構めんどくさかったかもしれない。

FORENSIC

pdfファイルに埋め込まれている画像を抽出して、合成して出てきたQRコードを読み込む。Macで画像編集したことがなかったので、時間だけがかかってつらかった。

ここまでを2時間で解き終わって、終了かなと思ってnotificationを見たら延長のお知らせが来てた。

解けなかった問題

BINARYの1問目

初めて触るBINARY。まず、Mac環境じゃ起動すらできなかったので、dockerでlinux環境を立ち上げるところからスタートした。逆アセンブリをしたが、全くわからなかった。最初から諦めていたらWEB問が間に合ったかもしれない。悲しい。

WEB

今度はWindowsじゃないと起動できなかったので久しぶりにWindows機を起動。CTFはMac不利だったりする?
SQLinjectionの問題。ログイン画面でいくら試してもSQL文が実行されなかったが、登録画面でSQL文を登録してから、その情報でログインを試みるとSQL文が実行された。USERテーブルなどがないか手探りでSELECTしまくったが、それっぽいものは見つからず時間切れ。
後で調べたところ、Schemeを覗きに行けば行けた気がする。最初から存在していたユーザーでログインできれば、答えにたどり着けると読んでいたので、もう少しでした。

結果

310点で45位でした! f:id:betit0919:20190501124037p:plain

感想

初めてでしたが非常に楽しかったです。普段、業務ではあまりしないような操作をたくさんできるので、勉強にもなりますし、好奇心も満たされました。
競プロもCTFも続けていきます!