煙と消えるその前に

一服してるうちに忘れる、自分のための備忘録。とかとか

Trend Micro CTF Asia Pacific & Japan 2015オンライン予選に参加してきた

Trend Micro CTF Asia Pacific & Japan 2015|トレンドマイクロに参加してきました。
いつものRoute9というチームで参加し、結果は154位(得点したチーム総数359チーム)でした。
真ん中ちょい上、なんともコメントしにくい感じ。またがんばるぞー。

てことで、参加記録をかねて解けた問題のwriteupを書いておきます。

Analysis - offensive100

アクセスするとsign_in, sign_upがあって、sign_inするとアクセス一覧みたいなのが表示されるサイト。
cookieにuserが入ってたのでなんか怪しいなーと思いつつ、時間経過で値が変わったりするので無関係かなーとも思いつつうだうだしてました。
するとメンバーがこんな一言を
f:id:paty_fakename:20150928140425p:plain

さっそく見た人で試してみることに。

$ curl http://ctfquest.trendmicro.co.jp:8888/95f20bb7856574e91db4402435a87427/signin -X POST -d "username=1&password=1&fuel_csrf_token=272c193c32f2e4cc7be0b7153027d5147bcc6c34c2aa9a3582729c3da89658" -i
HTTP/1.1 302 Found
Date: Sat, 26 Sep 2015 10:50:01 GMT
Set-Cookie: user=96d9d1268c579e6a6f707c274b09d830f80a6dfa; path=/

cookieにuserの値を突っ込んでアクセスすると鍵が取れました。
f:id:paty_fakename:20150928140829p:plain

Analysis - Defensive100

問題文のリンク先をDLするとvonnという実行ファイルが出てきます。
チームメンバーの曰く
f:id:paty_fakename:20150928141130p:plain
・・・とのこと。何気にこの記事書いてて気づいたけど、答のflag聞いてNEEEEE orz

Analysis - Others100

壊れたPDFが対象の問題。
ヴューワによっては壊れてても無視して開いてくれちゃいました(もちろん答えはわからないけど)

PDFのフォーマットなんて調べたこともないし、できれば楽したいなーと思い、rubyorigamiというパーサを使ってみると。

2.1.5 :001 > require "origami"
2.1.5 :002 > puts Origami::PDF.read("fix_my_pdf.pdf").pages
[info ] ...Reading header...
[info ] ...Parsing revision 1...
[error] Breaking on: "stream\nx\x01\xED..." at offset 0x1581
[error] Last exception: [Origami::InvalidObjectError] Cannot determine object (no:13,gen:0) type
[info ] ...Parsing xref table...
[info ] ...Parsing trailer...
[info ] ...Propagating types...

0x1581はここのstreamの箇所
13 0 obj
stream
...
endstream

なんかobject no13のところが壊れてると教えてくれたのでそこを見てみる。よしわからん。
しぶしぶPDFのフォーマットをぐぐったところ、辞書句?を指定する必要があるとのこと。
13 0 Rを参照しているところを検索すると以下のような部分がヒットしたので、もうこれは画像で決まりだろうと勝手に思い込み(100点問題だし...)

10 0 obj
<< /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /ExtGState << /Gs1 15 0 R >>
/XObject << /Im1 11 0 R /Im2 13 0 R >> >>
endobj

何を書けばいいかわからないので、同じように画像を指定をしている箇所から辞書句をコピペしてみました。

13 0 obj
<< /Length 14 0 R /Type /XObject /Subtype /Image /Width 305 /Height 50 /ColorSpace
16 0 R /Intent /Perceptual /SMask 17 0 R /BitsPerComponent 8 /Filter /FlateDecode >>
stream
...

これでフォーマットチェックは通るけどpdfを開いても壊れた画像が見えるだけ。何が足りないのかわからず悶々としてると・・・
f:id:paty_fakename:20150928142300p:plain

適当に画像幅を変えてたら答えが見えたんだって┐( ̄ヘ ̄)┌
ちゃんと解決してないけど、解けたから良しで先に進みましたとさ。
f:id:paty_fakename:20150928142553p:plain

Programming100

別の問題で悶々としてる間にメンバーが解いてくれてました。多謝。

回答ソースコード

Programming200

別の問題で悶々とry
この辺を参考にしたそうです Ruby - Hashクラス(ローマ数字を数値に変換) | Kamimura's blog

回答ソースコード

Ruby技術者認定試験Gold version2.1に合格しました

2014/10/1からRuby Association Certified Ruby Programmer Silver/Goldがversion2.1にアップグレードされていました。
=> Rubyアソシエーション - Ruby技術者認定試験

旧verのGold資格を持っているのですが、バージョン上がったなら取っておくかーぐらいのノリで受験して、ギリギリ合格しました。せっかくなので、役に立った勉強法をメモしておきます。

  • 旧verのGold試験問題を解きまくる
    • 問題ががらりと変わるほど言語仕様の変化は起きていない(と思っていた)ので、基礎をしっかり押さえるのが効果的でした
    • 試験対策本やWebにある練習問題を何度も解きました
    • 旧verのGold対策でよく挙がっていますが、メタプログラミングRubyを読んだのも効果があったと思います
  • version2.1で追加された範囲を押さえる