CPCTFに参加しました(+Write-Upもどき)

楽しかった!!!

traPの新歓として行われた競プロとCTFの体験会(#575)に参加しました。

今年も競プロとCTFの体験会(CPCTF)を新歓でやると聞いて、
去年CPCTFを経験してtraPに入部した僕は、今年こそはいい成績を!!と燃えていました。

ちなみに去年の順位は23位でした。

去年はオンラインでやりましたが、
今年はオンサイト(会場に来て競プロ・CTFを解くこと)でやりました。

競技時間は13:30から19:30の6時間で、問題は90問近くあり、休憩してる暇なんてありませんでした。(実際トイレいったり飲み物飲んだり以外の休憩は一切取らなかった)

めちゃくちゃ疲れました。
疲れすぎて南4号館入り口の自動ドア(透明)に思いっきりぶつかりました。

それで結果はというと…

全体で6位、オンサイトでは4位でした!!!

ちなみに同学年では1位でした。
(まあ僕よりも学年が下の人がランキングの上に2人いるんですけど)

素直にうれしいです。ありがとうございます!

 

以下は自分が解答した問題のWrite-Up(もどき)です。
雑に解説していきます。

解けたときの時間も一緒に書いていくのでどういう順に解いていったかも一緒にお楽しみください。

Write-Up もどき

スタートです!!!

13:33 Pwn score 100点

ソースコードみてマイナス対策されてないやんけってことに気付いてマイナスの数字を5回入力しました。

FLAG{1nt3ger_mag1c}

13:49 PPC apulsb 100点

競プロの入門的問題(?)
a + bを出力します。

ソースコード(Ruby)

n = gets.chomp.to_i
for i in 1..n
    a,b = gets.chomp.split.map(&:to_i)
    res = a + b
    puts(res)
end

FLAG{a_plus_b_is_very_easy_isnt_it?}

13:51 Shell hidden 100点

ls -aするだけ。

FLAG{c@n_y0u_re@d?}

13:52 Shell nc 100点

ncするだけ。

FLAG{nc_test}

13:54 Web you are postman 100点

POSTするだけ。

FLAG{h77p_h45_53v3n_m37h0d5}

13:55 Shell cat 100点

cat flag.txtするだけ。

ちなみにnyan catという有名な曲があります。

FLAG{c@t_flag}

14:20 Flag_POST_Service 178点

POSTを受け取ってくれるサービスがあるんですね(知らなかった)

何故か自鯖にPOSTして頑張って解析しようとしてました(アホ)

FLAG{fl46_p057_53rv1c3}

14:37 Misc Dirty text 100点

文字化けhtml問題ですね。

InternetExplorerを使ってエンコードをよしなにしました。

FLAG{Unicode_Transformation_Format_8}(全角を半角にしてね)
FLAG{Unicode_Transformation_Format_8}

14:41 Misc Pincode 200点

10000通りあるPincodeをなんとかして当てようという問題です。

10000通りも試してたら競技時間終わってしまうので、自動化させました。

require 'socket'

for i in 0..9999 do
    port = TCPSocket.open("pincode.problem.cpctf.site",4004)
    puts(port.gets())
    puts(port.gets())
    port.puts(i.to_s)
    str = port.gets()
    puts(i)
    puts(str)
    if !str.include?("Please login") then
        break
    end
end 

これやってる間は休憩できた。

FLAG{6rut3f0rc3}

14:57 OSINT FLAG in the garbage heap 100点

Twitter検索問題。
成瀬順さんのFLAGツイートを探し出します。

ちなみに成瀬さんのツイートにFLAG{114514}っていうのがあって、入力しても通らなくてキレてた。

FLAG{twitter_tanoshii}

14:58 Binary easy_strings 100点

stringsコマンド使うだけ。

FLAG{w31c0m3}

15:01 PPC apulsbtimesc 100点

競プロ問題。

a + b * cを返します。

ソースコード(Ruby)

n = gets.chomp.to_i
for i in 1..n
    a,b,c = gets.chomp.split.map(&:to_i)
    res = a + (b * c)
    puts(res)
end

FLAG{Wow_You_can_also_multiply!?___you_C4N_do_everything!!}

15:09 Crypto Code From Sobaya 2nd 300点

そばやさんYoutuberデビューしてて草。

手旗信号っぽいので頑張って解読しました。

FLAG{SOBAYA007}

15:26 Misc calculation 200点

足し算1000回できるかな。

僕は出来ないので、自動化しました。

require 'socket'

port = TCPSocket.open("pincode.problem.cpctf.site",4005)
for i in 1..1003 do
    ha,a,po,b,po2 = port.gets.split.map(&:to_s)
    p("#{ha} #{a} #{po} #{b} #{po2} ")
    res = a.to_i + b.to_i
    port.puts(res)
    puts(res)
    puts(port.gets())
end 
puts(port.gets())
puts(port.gets())
puts(port.gets())   

FLAG{39e33ea42d7e244428cd284bffd23dfe}

15:43 Shell open file 178点

僕は個人的にこれが一番好きな問題でした。

jpegをなんとかしてシェル使って見たい問題。
ヒントと下の記事を参考にしました。

結果

FLAG{3V3RY7H1N6_15_8IN4RY}

15:57 Forensics back of the poster 300点

通称チラ裏問題と呼ばれている問題です。

画像のEXIF情報を抜き出して、場所を特定します。

みんな散歩散歩言ってたんですけど、
意外とオンサイト会場から近くて散歩になりませんでした()

階段を下りたら、FLAGが書かれた紙がありました。

FLAG{unapproved_poster_is_forbidden_in_titech}

16:09 Shell Undo 100点

vimでuを押しまくります。

vimスゲー!

FLAG{vim_can_save_history}

16:23 Web NoThankYou 267点

sw.jsを見たら発言を上書きしてる部分があるので、そこを消して保存します。

FLAG{h3Re_y0U_4rE!}

16:25 Web PasswordCracking 1st 200点

(1+2*3**4+5*6**7+8*9**10).toString(36);がパスワードなので、コンソールで実行します。

FLAG{you_must_not_include_password_into_js}

16:31 Web PasswordCracking 2nd 200点

なんか顔文字で難読化されてるんですけど、ググったら復号できるサイトでてきました。

FLAG{aaencode_obfuscates_js}

16:35 Web PasswordCracking 3rd 200点

10文字しか文字が打てないので、ソースコード見て10文字制限を解除します。

FLAG{maxlength_is_no_meaning}

16:59 Web PasswordCracking 4th 300点

strcmpが怪しいのでググったら配列にしたらNULLを返すみたいなことが書いてあったので、
<input type="text" name="pass">
<input type="text" name="pass[]">にして、適当な値をSubmitしたらFLAGが降ってきました。

FLAG{false_equals_zero}

17:02 Web PasswordCracking 5th 400点

ソースコード見たら、データベースに問い合わせしてるっぽいので、SQLインジェクションを疑いました。

' OR '1'='1を入力したらFLAGが降ってきました。

FLAG{sql_injection_is_fun}

17:32 Shell minus 200点

mv ./-flag.txt- ./flag.txtします。

FLAG{5pecia1_ch@r}

17:38 Forensics The Image 100点

どう見てもQRコードなので、画像を45度回転させてQRコードの角を塗りつぶしました。

ちゃんと読み込んでくれました。

FLAG{qu1ck_r3sponse_c0de}

17:44 Forensics Into The Image 200点

stringsしたらフラグが隠れてました。

FLAG{png_can_contain_text_data!}

17:45 Web Hidden Flags 1st 100点

ソースコード見ると、FLAGがコメントアウトされてました。

FLAG{1_this_is_only_a_comment}

17:50 Web Hidden Flags 2nd 100点

ページのヘッダ情報見ると、FLAGが書いてありました。

FLAG{2_00_OK}

17:57 Web Hidden Flags 3rd 100点

とりあえず難読化されたmain.jsを整形するところまではいきました。

復号の方法が分からなかったので気合で読んで

コンソールで

$.$($.$($.$$ + "\"" + (![] + "")[$._$_] + $._$ + $.$$__ + $.$_$_ + (![] + "")[$._$_] + "\\" + $.__$ + $._$_ + $._$$ + $.__ + $._$ + "\\" + $.__$ + $.$$_ + $._$_ + $.$_$_ + "\\" + $.__$ + $.$__ + $.$$$ + $.$$$_ + ".\\" + $.__$ + $.$$_ + $._$$ + $.$$$_ + $.__ + "\\" + $.__$ + $.__$ + $.__$ + $.__ + $.$$$_ + "\\" + $.__$ + $.$_$ + $.$_$ + "(\\\"\\" + $.__$ + $.___ + $.$$_ + "\\" + $.__$ + $.__$ + $.$__ + "\\" + $.__$ + $.___ + $.__$ + "\\" + $.__$ + $.___ + $.$$$ + "\\\",\\\"\\" + $.__$ + $.___ + $.$$_ + "\\" + $.__$ + $.__$ + $.$__ + "\\" + $.__$ + $.___ + $.__$ + "\\" + $.__$ + $.___ + $.$$$ + "{" + $._$$ + "_" + $.$$$_ + $.$_$_ + "\\" + $.__$ + $.$$_ + $._$$ + "\\" + $.__$ + $.$_$ + $.__$ + (![] + "")[$._$_] + "\\" + $.__$ + $.$$$ + $.__$ + "_" + $.$$_$ + $.$$$_ + $.$$__ + $._$ + $.$$_$ + $.$_$_ + $.$_$$ + (![] + "")[$._$_] + $.$$$_ + "}\\\")" + "\"")())

を打つとFLAGが降ってきました。

(想定解じゃない自信がある)

FLAG{3_easily_decodable}

18:06 OSINT Cyber stalker 100点

成瀬さんの2017年9月13日の午後2時頃のツイートを探します。

14:30ごろに江川邸にいたのでFLAG{055-940-2200}したんですが、通らず。
うそ~~~って思って成瀬さんに確認したら「違います」と言われました。

よく見たら14:15ごろに韮山反射炉にいました。

(これ韮山反射炉って分かりにくい…)

FLAG{055-949-3450}

18:17 OSINT Guessing 356点

ヒントを見て、kakinumabot@以下略にメール送ればいいんだなあってGuessingしました。

@google.comに送ったら存在しませんって返ってきました。

@yahoo.co.jpにメール送ったらFLAGが降ってきました。

これも解法違う気がします。

FLAG{guessing_is_very_very_difficult}

 

ここから1時間近くなにも解けなくてつらかった。

PPC学籍番号のWAと格闘してました。

さすがにまずいと思ったので、学籍番号は諦めて、作戦をみんなが解いている問題(解いてる人が多い問題)を順番に解いていく方針に転換しました。

19:09 Forensics RGB 100点

問題名がRGBなので、RGBをいじりました。

FLAG{this-text-is-not-visible-but-visible-you-know}

19:20 Misc Wayback Into The Past 100点

FLAGはこのページにありましたが、削除されました。とあるので、
Wayback MachineでURL入力したら、魚拓ありました。

ソースコードみたらFLAG載ってました。

FLAG{y0u_1eapt_t1m3,_ru?}

19:22 Crypto even_number 100点

SYNT{This_text_is_encoded_by_ROT26}なので、even_numberしたROT13でググって復号しました。

FLAG{Guvf_grkg_vf_rapbqrq_ol_EBG26}

19:25 Shell HugeFile 99点

vimで/FLAGと入力して検索します。(なんでヒント見てしまったんだ)

FLAG{vim+is+god}

19:25 Misc SixtyFour 100点

後ろに=がついてたのでBASE64だろと決め打ちして復号しました。(焦って問題名を見てない)

FLAG{base64_no_pro}

 

終了です!!!

反省

これやっとけばもうちょっと点とれたかもな~という反省をしていきます。

高得点問題につられて時間をかけすぎた

僕が(特に)時間をかけて解けなかった問題は、

  1. Web Tsubuyakiss! 1st 178点
  2. Binary see_stack 178点
  3. PPC Student Number 300点
  4. Crypto input 267点

です。

ここらへんの問題は30分かけて解けなかったので、割と早めに見切りをつけて別の問題にいくべきでした。

問題を全部見なかった

問題多すぎィ!!!

競技終了後に聞いたんですけど、
みんな解いてないけど、実は簡単だったみたいな問題がたくさんあったようです。

問題だけでもみればよかった~

睡眠不足で頭がまわらなかった

実は前日、このブログのカスタマイズをしてました。

寝たのは午前4時です。普通に寝不足。

万全な体調で臨むべきでした。

おしまい

とても楽しかったです。

運営のみなさんはこの日のために連日徹夜して準備をしたと聞きました。
お疲れ様です。

 

来年もやるならもっと順位上げたいぞ~~~