blog.syfm

徒然なるままに考えていることなどを書いていくブログ

CTF for ビギナーズ 2016 長野 に参加しました

理工学実験を犠牲にしてCTF for ビギナーズ 2016 長野 に参加してきました。
土曜に東京で前泊、日曜に長野に向かい、また東京で泊まって月曜日に会津へ帰ってくるというハードスケジュールでした。

その内容は、バイナリ、Web、フォレンジックの3つの講義と、CTF演習から構成されていました。
特にWebやフォレンジックは知識として知っていても、実際に手を動かしてみると感覚が全然違っていて面白かったです。

CTF演習は90分位あり、自分は49人中10位でした。

f:id:ktr_0731:20160516205412p:plain

結構飛ばしていたので、開始20分くらいまでは1位だったのですが、途中スクリプトを書く問題(てけいさん for びぎなーず)に時間を取られてしまい、失速しました。
あと、バイナリに手を出せなかったのが痛かった…。
全体的に講義の内容+αと言った問題が多かったので、知識として得られたものをすぐに使うことができ、解いてて楽しかったです。

以下、自分の解けた問題のWrite-upです。

Leet ( MISC )

Leetでflagが書いてあったので、それを読んだだけ。
ctf4b{CAPTURE_THE_FLUG}

Base64 ( MISC )

Base64エンコードされている文字列をデコードしたらflagが手に入った。

f:id:ktr_0731:20160516203350p:plain

みてみよう ( Forensics )

与えられたpcapファイルをWiresharkで開いてみると、flag.pngというファイルをGETしているのでFile -> Exports objectsよりflag.pngを復元する。

f:id:ktr_0731:20160516204151p:plain

ファイルを開いても何も表示されないので他の方法を試す。stringsをしたらflagが手に入った。

f:id:ktr_0731:20160516204433p:plain

みわけよう ( Forensics )

与えられたpcapファイルをWiresharkで開いてみると、いくつかHTTPでリクエストしている。
ctf4b/mondai/以下のファイル名を順につなぐとflagになっている。ただし、ステータスコードを見ると分かる通り、いくつか404のファイルがあるので、それらのファイル名を除く。

f:id:ktr_0731:20160516205014p:plain

この問題は一応解けたけど、ファイル名がflagの一部になっているってことにギリギリまで気づけなくて、解答欄に入力している時にタイムアップになってしまい、得点にはなりませんでした…。

つないでみよう ( Forensics )

与えられたpcapファイルをWiresharkで開き、Follow -> TCP Streamで見てみる。

f:id:ktr_0731:20160516205626p:plain

172.20.1.1/network/にGETリクエストを送っていて、そのレスポンスにhtmlが含まれている。
ここでhtmlのaタグにflag.htmlへのリンクがあるので、それを取ってきてみるとflagが入手出来た。

curl http://172.20.1.1/network/flag.html

Ping-Pong ( Web )

OSコマンドインジェクションの問題。
inputに文字列を入力することで、pingをその文字列で実行するプログラム。
文字列を細工することで任意のコマンドを実行できる。

google.com; ls

特に制限がないのでいろいろしてflagを探ってみたら見つかった。

google.com; ls /

flag.txtがあったので、

google.com; cat /flag.txt

これで入手出来た。

PHP! PHP! PHP! ( Web )

PHPの仕様に関する問題。 問題とPHPソースコードが渡され、うまいことやってifをすり抜けるとflagが手に入る。

f:id:ktr_0731:20160516211800p:plain

?x[]=1&y=999のようにしてxを配列とすることで、 check1()のstrcmpで$PASSWORDと配列が比較され、null(==0)が返ってくるため、回避できる。

ビギナーズなので簡単な問題が多かったけど、いろいろな発見があってすごく楽しかった。
ただ、前回も言ってた気がするけどスクリプトをもっと書けるようになりたし…。