目次
- 楽しかった!!!
- Write-Up もどき
- 13:33 Pwn score 100点
- 13:49 PPC apulsb 100点
- 13:51 Shell hidden 100点
- 13:52 Shell nc 100点
- 13:54 Web you are postman 100点
- 13:55 Shell cat 100点
- 14:20 Flag_POST_Service 178点
- 14:37 Misc Dirty text 100点
- 14:41 Misc Pincode 200点
- 14:57 OSINT FLAG in the garbage heap 100点
- 14:58 Binary easy_strings 100点
- 15:01 PPC apulsbtimesc 100点
- 15:09 Crypto Code From Sobaya 2nd 300点
- 15:26 Misc calculation 200点
- 15:43 Shell open file 178点
- 15:57 Forensics back of the poster 300点
- 16:09 Shell Undo 100点
- 16:23 Web NoThankYou 267点
- 16:25 Web PasswordCracking 1st 200点
- 16:31 Web PasswordCracking 2nd 200点
- 16:35 Web PasswordCracking 3rd 200点
- 16:59 Web PasswordCracking 4th 300点
- 17:02 Web PasswordCracking 5th 400点
- 17:32 Shell minus 200点
- 17:38 Forensics The Image 100点
- 17:44 Forensics Into The Image 200点
- 17:45 Web Hidden Flags 1st 100点
- 17:50 Web Hidden Flags 2nd 100点
- 17:57 Web Hidden Flags 3rd 100点
- 18:06 OSINT Cyber stalker 100点
- 18:17 OSINT Guessing 356点
- 19:09 Forensics RGB 100点
- 19:20 Misc Wayback Into The Past 100点
- 19:22 Crypto even_number 100点
- 19:25 Shell HugeFile 99点
- 19:25 Misc SixtyFour 100点
- 反省
- おしまい
楽しかった!!!
traPの新歓として行われた競プロとCTFの体験会(#575)に参加しました。
今年も競プロとCTFの体験会(CPCTF)を新歓でやると聞いて、
去年CPCTFを経験してtraPに入部した僕は、今年こそはいい成績を!!と燃えていました。
ちなみに去年の順位は23位でした。
去年はオンラインでやりましたが、
今年はオンサイト(会場に来て競プロ・CTFを解くこと)でやりました。
競技時間は13:30から19:30の6時間で、問題は90問近くあり、休憩してる暇なんてありませんでした。(実際トイレいったり飲み物飲んだり以外の休憩は一切取らなかった)
めちゃくちゃ疲れました。
疲れすぎて南4号館入り口の自動ドア(透明)に思いっきりぶつかりました。
疲れすぎて自動ドアに激突した#traP18新歓 #CPCTF
— ながてち@CPCTF16内1位 (@syobon_titech) 2018年4月18日
それで結果はというと…
全体で6位、オンサイトでは4位でした!!!
ちなみに同学年では1位でした。
(まあ僕よりも学年が下の人がランキングの上に2人いるんですけど)
素直にうれしいです。ありがとうございます!
以下は自分が解答した問題のWrite-Up(もどき)です。
雑に解説していきます。
解けたときの時間も一緒に書いていくのでどういう順に解いていったかも一緒にお楽しみください。
Write-Up もどき
スタートです!!!
— ながてち@CPCTF16内1位 (@syobon_titech) 2018年4月18日
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
これやってる間は休憩できた。
がんばれ〜#traP18新歓 #CPCTF pic.twitter.com/bs8eUIo826
— ながてち@CPCTF16内1位 (@syobon_titech) 2018年4月18日
FLAG{6rut3f0rc3}
14:57 OSINT FLAG in the garbage heap 100点
Twitter検索問題。
成瀬順さんのFLAGツイートを探し出します。
FLAG{twitter_tanoshii}
— 🍥 (@N4RU5E) 2017年3月21日
ちなみに成瀬さんのツイートに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時頃のツイートを探します。
I'm at 江川邸 in 伊豆の国市, 静岡県 https://t.co/x1Zb8nqUbv
— 🍥 (@N4RU5E) 2017年9月13日
14:30ごろに江川邸にいたのでFLAG{055-940-2200}したんですが、通らず。
うそ~~~って思って成瀬さんに確認したら「違います」と言われました。
よく見たら14:15ごろに韮山反射炉にいました。
クソ渋いTシャツ買った! pic.twitter.com/4hG366eQG3
— 🍥 (@N4RU5E) 2017年9月13日
(これ韮山反射炉って分かりにくい…)
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}
終了です!!!
終了#traP18新歓#CPCTF pic.twitter.com/IvczzOZzfD
— ながてち@CPCTF16内1位 (@syobon_titech) 2018年4月18日
反省
これやっとけばもうちょっと点とれたかもな~という反省をしていきます。
高得点問題につられて時間をかけすぎた
僕が(特に)時間をかけて解けなかった問題は、
- Web Tsubuyakiss! 1st 178点
- Binary see_stack 178点
- PPC Student Number 300点
- Crypto input 267点
です。
ここらへんの問題は30分かけて解けなかったので、割と早めに見切りをつけて別の問題にいくべきでした。
問題を全部見なかった
問題多すぎィ!!!
競技終了後に聞いたんですけど、
みんな解いてないけど、実は簡単だったみたいな問題がたくさんあったようです。
問題だけでもみればよかった~
睡眠不足で頭がまわらなかった
実は前日、このブログのカスタマイズをしてました。
寝たのは午前4時です。普通に寝不足。
万全な体調で臨むべきでした。
おしまい
とても楽しかったです。
運営のみなさんはこの日のために連日徹夜して準備をしたと聞きました。
お疲れ様です。
来年もやるならもっと順位上げたいぞ~~~