初心者が初心者のためにできることを追求します.

SECCON2015 Online CTF に参加しました&Write up(ちょっと)

こんばんは,はいひるです.
遅ればせながら,12月の5日から6日とSECCONのオンライン予選に参加したので少々何か書こうと思います.

SECCON!

SECCONは,皆さんご存知(?)日本最大のCapture The Flagです!
Capture The Flag(通称:CTF)とは,コンピュータセキュリティに関する技能を競う大会です.Jeopardyと呼ばれる方式では特定のファイルやサイトの脆弱性を突いたり,暗号文を解読したりしてFlagと呼ばれる文字列を入手してSubmitすることにより得点を得ます.今回のSECCONオンライン予選はこの方式ですね.
SECCONについて知りたい方はこちらのリンクが参考になるとおもいます.

今回の開催内容はこちらに書かれてあります.
15:00~15:00の24時間開催!途中で寝るかどうか悩ましい時間設定のCTFでした.
今回のCTFの上位10チームに来年1月31日の決勝大会,そして学生チームで上位10チームに来年1月30日のインターカレッジな決勝大会の出場権が与えられます.
また,他の予選や大会で勝ち抜いたチームも決勝に招待されたりします.どんな大会で決勝出場権が得られたかは上記の開催内容のページの各大会の出場権についてというところの最後の方で確認できます.

今回出題された問題はSECCONさんのGithub
github.com
で確認できます.

ちなみに,ランキングページのソースで検索かけて調べたのですが,参加チーム総数は1251チーム,そのうち日本のチームは618チームだったみたいです.多いですね..

私は大学のゼミの皆さんとfiというチームを組んで参加していました.チームの人数は今回は7人です.最終的には54位,日本で26位だったとか.
(ほぼ私以外のプロが解かれたなんていえない..!)


Write up

Write upはCTF等の解法が書かれたものです.基本的に過去に開催されたCTFの問題が対象ですね.
私は今回取り組んだものについて書いてみます.他にもCTFの"プロ"が沢山Write up書かれてるので,探してみてくださいね!


Start SECCON CTF (Excercise 50pt)

ex1
Cipher:PXFR}QIVTMSZCNDKUWAGJB{LHYEO
Plain: ABCDEFGHIJKLMNOPQRSTUVWXYZ{}

ex2
Cipher:EV}ZZD{DWZRA}FFDNFGQO
Plain: {HELLOWORLDSECCONCTF}

quiz
Cipher:A}FFDNEVPFSGV}KZPN}GO
Plain: ?????????????????????

ex1を見ての通り,アルファベット26文字と{}がそれぞれ別のアルファベットと{}に対応付けられています.
ex2を見ていると,CipherのEがex1の対応付け通り{に,残りの文字もそれぞれ対応付け通りに変換されていますね!(ex2のCipherがex1のPlainの文字になります.ex1のPlainと対応付けられたCipherの文字を見てみましょう)
とすると,quizのCipherも対応付け通りに変換すれば解けるかもしれません..!
変換したものが以下になります.

SECCON{HACKTHEPLANET}

解けました.
最初解けたときはPlainとCipherが逆じゃないかと思ったのですが,flagを暗号化するという発想ならこっちの方が正しいですね.普段復号ばかりやってるので違和感がありました..
これで今回のSECCONではFlagの形式はSECCON{}ということが確認できましたね.

Flagは,SECCON{HACKTHEPLANET}です.

SECCON WARS 2015 (Stegano 100pt)

問題はこれ.(結構音が大きいので注意です!)

youtu.be

ロールされてくる文字の上にQRコードが重なっているのが確認できますね.
この動画のスクリーンショットをとにかく撮りまくります!私は20枚くらい撮りました!
そして,撮ったものを画像処理ソフト(処理できるものならなんでも!)で透明度20%くらいで全部重ね合わせます.
Photoshopで明るくして,ちょっとシャープにして,,

f:id:high-hill:20151207012927p:plain

ここまできたら読み取れるのでは?と読み取りカメラをかざすも,読めない..
いろいろやってみたのですが,あきらめて自分で書くことにしました(泣)
QRコードは縦と横が同じセル数でしたね.縦でも横でも点の数を数えていくと,25*25のセル数であることがわかります.
これはQRコードの種類の中のVersion 2ですね!(今回まったくこの知識は使わなかっt)
というわけで25*25の格子を書いて塗りつぶしていきます.
(Illustratorを使用しましたが,もっと簡単なツールがあると思います.)

そして,できたものがこちらです..!
f:id:high-hill:20151207014041p:plain
すごく時間かかりましたが,解けました(;-;)

後から知ったのですが,この問題かなり定番なようで,簡単にとけるツールとかもあるみたいです.
他のCTFの問題を調べておくのも大事ですね..
また,PhotoshopIllustratorを使いましたが,GIMPというソフトでも同じようなことができるかと思います;)

FlagはSECCON{TH3F0RC3AVVAK3N53P7}です.

Command-Line Quiz (Unknown 100pt)

English
telnet caitsith.pwn.seccon.jp
User:root
Password:seccon
The goal is to find the flag word by "somehow" reading all *.txt files.

日本語
telnet caitsith.pwn.seccon.jp
User:root
Password:seccon
すべての *.txt ファイルを読め

telnetとあるので,コンソールを開いて1行目のコマンドを打ってみます.
(コマンドを書く際は先頭に$マークをつけるようにしています.実際は$マークの後の文字列をターミナルに入力しています.)

$ telnet caitsith.pwn.seccon.jp

すると,UserとPasswordを聞かれるので,これも問題通りに打ちます.

ls -alなどしてカレントディレクトリの中身を見ると,flag.txtとstage1~5の.txtファイルがあります.
権限情報を見る限り,それぞれのファイルで権限が違うようです.
とりあえず,stage1.txtから見ていきます.すると,

文章の最初の行のみ読みたい場合に使うコマンドは何か.
以下のように実行せよ.
stage1=(コマンド) sh

(文章は原文ママではありません,超意訳です><)
こんな感じの文が出てきます.
最初の行のみといえばheadですね.ということで以下のコマンドを実行します.

$ stage1=head sh

これでstage1はクリアです.
stageをクリアするごとに,1つ上のレベルのテキストが読める仕様になっているようです.
なので,stage1をクリアするとstage2.txtが読めます.


stage2.txtはこんな感じ.

文章の最後の行のみ読みたい場合に使うコマンドは何か
以下のように実行せよ.
stage2=(コマンド) sh

最後の行のみといえばtailですね.以下のコマンドを実行します.

$ stage2=tail sh

stage2クリアです.


stage3.txtはこんな感じ.

文章中の特定の文字列を含む行のみ抜き出すコマンドは何か
以下のように実行せよ.
stage3=(コマンド) sh

特定の文字列を抜き出すといえばgrepです.以下のコマンドを実行します.

$ stage3=grep sh

stage3クリア.


stage4.txtは,

文章を処理するコマンドは何か
以下のように実行せよ.
stage4=(コマンド) sh

文章を処理するといえば?ちょっと悩んだんですが,awkかな?と試したところ,できました.

$ stage4=awk sh

stage4クリア!


いよいよラストのstage5.txtだ:)

flags.txtの中にFlagを書いておいた.flags.txtは特定の文章を処理するコマンドでのみ読めるようにしてある.見つけてみてね;)

確かこんな内容だったはず.
ここでcatとかlessとか普通にテキストファイルを読むコマンドを試してみるものの,

cat: can't open 'flags.txt':Operation not permitted

といった感じのエラーが出て読めないようになっています.
Flagとは全然関係ないですけど,どうして特定のコマンドでのみ読める仕組みなのか知りたくなりました(笑)

awkときたらsedでしょ,という偏った考え方で以下のコマンドを実行したところ,Flagが出ました.

$ sed 8,10d flags.txt

OK. You have read all .txt files. The flag word is shown below.

SECCON{CaitSith@AQUA}

8から10行目なんて存在しないだろうという憶測で,8から10行目を消すオプションをつけて実行しました.
Flagは,SECCON{CaitSith@AQUA}です.
caitsithというちょっと変わったOSですが,この問題はOSに関する知識は使わなかったですね.


感想

実は参加する前は1問も解けないんじゃないかと思っていたので,少しでも問題を解くことができてよかったです.
他にもExec dmesgやGDB Remote Debuggingなどの問題に取り組んでいたのですが,難しくて解けなかった..もっと修行が必要だなと感じました.
何より途中で寝てしまったのが大誤算でしたね;;
完全に寝たことによって集中力が切れました.上にWrite up書いてある問題が3つありますが,開始6時間くらいで解いたものなので,残りの18時間が...といった感じです.
もう少しチームに貢献したかったです.

ですが,ずっと参加してみたかったものなので,すごく楽しかったです.
また,ゼミ内でチームを組んでもらってゼミ室でCTFという貴重な?経験をつむこともできました(笑)


補足

もし,もしもですがCTFを今までやったことがなくてこの記事に辿り着いた方がいらっしゃったらなのですが,いつでもできる常設型CTFというものがあることをお知らせしておきます!

日本のもので,よく名前を聞くのは以下の3つのサイトさんです.

ksnctf,akictfではOAuth認証という方法を使っていてTwitterアカウントでログインすることができます.
CpawCTFでは右上のSign upからアカウントを作ることができます.また,ログインするときはScreenNameに設定したものがUsernameの欄に入るので,パスワードと一緒に忘れないようにしましょう.

私は今から始めるならCpawCTFが一番親切かなと思います.
ここに流れ着いたからにはCTFやってみませんか?
(私の感想を見るよりは実際にやってみた方が楽しいと思うので..!)
あなたの活躍を楽しみに待ってます:)

    • -

12/15
Write upに間違いがあったようなので修正しました.すみません.

このブログは気の迷いで成り立つ予定です:)