長野のセキュリティイベントの
「CTF for ビギナーズ」に参加してきたよ。
夜、君と電話できてよかったよ。
お土産も喜んでくれたしね。
今日は、そのwrite-up#ctf4bを書きますた。
題して、
CTF for ビギナーズ 2015 長野 Writeup (by for(;w;) )
また、twitterをされている参加者がいらっしゃるのでしたら、
よろしければ相互フォローしましょう!
コメントを頂ければうれしい限りです!
■講義について
1.CTFとは
capture the flag --技術で隠されたフラグを取って、
ゲーム感覚でスコアを競い合う大会だそうです。
「攻防戦」タイプと、「問題出題」タイプのCTFがありますが、
「問題出題」タイプは、以下の分類などに分かれています。
1.web
2.Network
3.Binary(Reverse)
4.Pwn(Exploit)
5.Forensics
6.Cryptography
7.Trivia
etc...
※ルールは大会によって異なる
また、倫理と法律(不正アクセス禁止法など)をしっかり守るように!とのことです。
おかげさまで、CTFがどんなものなのかわかりました!
ありがとうございます!
2.バイナリ
以下のような内容でした。
a.fileコマンドで正しいファイルタイプを判別しよう
b.stringsコマンドでバイナリファイルのキーワードを拾おう
c.実はそんなに難しくない、アセンブラを読めるようになろう。
d.IDA pro demo の使い方を覚えよう
アセンブラは熟練に時間がかかりそうです。。。
IDA pro はIDEを使った事がある人なら、
慣れるのが早そうです。
3.ネットワーク
以下のような内容でした。
a.TCP/IPのプロトコルについて詳しくなろう
b.wiresharkを使いこなそう
-- Follow TCP streamとか
-- フィルタとか
c.各種サービスの使い方とか(FTP, TELNET ,IRC, SSH, etc...)
d.nc(netcap)コマンドとか
e.pcapファイルをバイナリエディタでみると「ヤテイ。」
あとは色んなサービス(サーバ機能)に触れて慣れてみます!
そして、様々なパケットをキャプチャしてみるのも
いいかもですね!
4.WEB
以下のような内容でした。
a.調査で「何かを入力して、不審な出力を発見する」
--デベロッパツールとか、Googleとか、診断用プロキシツールとか。
--HTTPリクエスト/レスポンスヘッダ
--パーセントエンコード/Javascriptとか
b.何でも試す、自分の経験と知識と勘が頼り。
c.自分しか見られないページに注目
webとphpは私のお友達ですので!
ひたすら会話に慣れるのと、学習が必要という感じですね!
■CTF Write up
いよいよ競技時間です!
皆様、すごい集中力です!
しかし、運営側がジャミングしてくる(笑)
1.バイナリ問題
1-1.binary 100
fileコマンドで、pngファイルとわかれば、
拡張子を変えてファイルを開く。
すると、FLGが画像に書いてありました。。
(OSがLinuxなら普通にひらけそうですがね。。。)
1-2.binary 300
(間数名)_Hello_(計算結果)がフラグと出題され
アセンブラコードが出てきました。
アセンブラコードは↓のように読み解けました。
printf("Hello_%d", (1337 / 23 * 586) - 8);
数値部分は電卓で計算し結果は↓、正解でした。
printf_Hello_31337
2.ネットワーク問題
1-1.network 100 Follow Streeeeam!!
wireshark でpcapファイルを開き
Follow streamするだけで、フラグをゲット、正解でした。
3.WEB問題
3-1.Web 100 Can you login as admin?
SQLi(SQLインジェクション)だったので、
パスワードフォームに ' OR 1 = 1 -- と入れたらFLGゲットでした。
3-2.Web 200 Find the flag
http通信を、ブラウザ標準機能の開発者ツール(windowsなら、F12押せば開くやつ)で見ると、
レスポンスヘッダのクッキーにFLGがありました。
ctf4b%7B%W3b200_Is_7oo_34sy_4_u?%7D
このままでは正解にならないので、
考えの切り口を変えてフラグの文を読んでみる。
W3b200_Is_7oo_34sy_4_u
↓
web200 is too easy for you
# 疑問形の文なのでは?と推測して正解を獲得しました。
W3b200_Is_7oo_34sy_4_u?
※asciiコード表見れば良かったすけどね
3-3.Web 400 SQL Injection Level2
DBはエラーメッセージからSQLiteであることが分かったため、
送信値を書き換え再度アクセスする。
まずはテーブル定義を確認します。↓確かこんな感じだったと思います。
'; SELECT sql FROM sqlite_master; --
# 結果DDL文が以下、表示されます。
CREATE TABLE users (id INTEGER AUTO_INCREMENT, username TEXT, password TEXT).
DDL文から項目名が分かるので、↓な感じでフラグをつかむことができました。
' union select 'admin' from users where username = 'admin' --
■結果
上位の方はこんな感じ。(クリックで拡大します、)


私は↑ですね。(クリックで拡大します、)
・エントリー名:for(;w;)
・順位:30位(60名中)
・スコア:1300
内訳:
-練習問題:100
-バイナリ:400
-ネットワーク:100
-WEB:700
■反省
・記憶があいまいだったり、自信がないことは、ネットで調べる。
telnetの接続コマンドとか。asciiコードとか、プログラムの関数とか。
※ 検索エンジン使うのがめんどくて、CTF中一回もググらずにやってしまったので。。。
・落ち着いて、論理思考を用いて読み解くこと。
あせって、正解を逃したら勿体ない。。。
strings xxx.exe | find "CTF" とかやっちゃったりね(笑)
入力->反応をみる、通信を監視、結果を整理する。可能性を絞り込むなど。
・技術を学習すること。プログラミング、バイナリの読み方、ツールの使い方。脆弱性の突き方、守り方、想像力。
・ホストOSがWindowsのマシンを持ってきたので
次回はKali Linuxのマシンを持ってこよう。。。
・writeup用に問題や解答などをメモすること。。。ぐすん。。。
もちろん今回、初参加でしたが、
これからはオンライン問題ガンガン解いて、
SECCONにも参加したいなとか思います。
運営の皆様、参加者の皆様ありがとうございました。
そして、大変お疲れ様でした。とても楽しかったです。
良い経験になりました。
おかげさまで、ますます
セキュリティエンジニアになりたい気持ちが強くなりました。
■最後に
参加された方や、
write up記事を見た人たちが
ダークサイドに落ちないことを願います。
この力はライトセーバーであり、フォースである。
悪にも善にもなり得る。
特に若い人たちが、
魅惑の大金、脅迫、絶望、復讐、愛の喪失などにより、
暗黒面に落ちる、そのようなことがないよう、
祈るばかりです。
以上となります。