CTF for BBA

ゲーム時々CTFやるBBAの日常。

Really Awesome CTF (RACTF) 2020 writeup

Really Awesome CTF(RACTF)、2人チームで参加しました。
3250点で224位。OSINTは相方がプロなので全完。

相方が解いてくれたのも含めてWriteup書きます。


Reading Between the Lines

C言語ではなくWhite Space言語。
この辺のオンラインサービスにコピペして実行。
Whitespace Online Editor - Whitespace Online IDE - Whitespace Coding Online

flag: ractf{R34d1ngBetw33nChar4ct3r5}<br>

BR.MOV

動画を見るとバーコードと数字(n)が読み上げられる。
EANコードとして読み取ることができ、それぞれ文字列となる。
各々の文字列のn番目をピックアップするとフラグ。

flag: ractf{b4rc0d3_m4dn3ss}

RAirways

搭乗券のバーコードには様々な情報が含まれていて、SNS等に載せることはセキュリティ上問題がある。
搭乗券のバーコードをSNSに載せるべからず Blog|Y WEB SYSTEM

本問題のバーコードはPDF417のネガポジが反転している。元に戻せばアプリ等で読める。
f:id:boxwolf:20200608173630j:plain

flag: ractf{B0ard1ngP4ssD4t4}

Remote Retreat

目視できる文字 "HAKA creperie snack" で検索すると、フランスの "The HAKA" というお店が見つかる。

Suspended Belief

手前の橋が特徴的な形。画像検索すると、斜張橋(cable stayed bridge)というらしい。
"suspension bridge and cable stayed bridge" で検索すると、汀九橋っぽいことがわかる。
"汀九橋" で画像検索すると、問題の画像とほぼ同じ画像を拾うことができる。その撮影場所は "石龍拱 涼亭"。

Brick by Brick

問題の画像をGoogle画像検索に突っ込めば、ほぼ同じ画像が沢山出てくる。
"Besalu Bridge" という場所らしい。

Tree Man

ディズニーランドとかにありそうな上、背景にジェットコースターらしき物も写っているので、
"amusement park spain tree man statue" とか "groot statue" とかで検索した。
(関係ないけどGotGは好きです)
ほぼ同じ画像が見つかり、"PortAventura" のentranceにあるという情報が得られた。

本問題は50m以内を指定する必要があるので、更に絞る。
水場が写っているので、Google mapの航空写真で園内の池の場所を確認し、Googleストリートビューで池の周りの景観を確認。
statueそのものこそ確認できなかったものの、ウッドデッキ・池・観覧車が同様に映る座標を確認した。

フラグの指定は相方が秘孔を突くようにクリックしてくれたが、ローカルプロキシでPOSTデータを書き換える方が確実だったと思う。

Dead Man

相方が "Gravestone Christian"の検索結果から同じ場所の写真を見つけてきたが、
墓石についている紋章が勲章で、戦没者が埋葬されていることに気づけたらもっと早かったと思うとのこと。
建物がアジアっぽいのに白人が見舞いに来ていることも頷ける。場所は"Kanchanaburi War Cemetery"。

Cut Short

TweakPNGで開くと、頭に不要なIENDチャンクがあるので、それを削除すると、画像を表示できる。
f:id:boxwolf:20200610213150p:plain

flag: ractf{1m4ge_t4mp3r1ng_ftw}

Dimensionless Loading

サイズが0x0でCRCもおかしい。
こちらのサイトを参考に、適切なサイズにIHDRを修正した。
CTF日本語サイト : Defcamp CTF Qualification 2015

TweakPNGでIDATを全て結合し、データ部(ASCIIの"IDAT"以降)をzlib decompressしたバイナリを見る。
IDATのデータは、一行ごとにフィルタタイプとデータからなっているので、フィルタタイプの間隔を見れば横幅がわかる。
5512バイト間を空けてフィルタタイプと思われるバイトが出現するので、
横幅はRGB+alphaなので5512/4=1378、高さはデータ部の総バイト数÷1行のデータなので2001219/5513=363。
これでCRCも正しくなる。
f:id:boxwolf:20200610215727p:plain

flag: ractf{m1ss1ng_n0_1s_r34l!!}

Snakes and Ladders

pythonエンコードコードの逆を実装すればいい…のだが、何故かうまく書けなかったので無理やり入れた。
(なのでコードは割愛)

flag: ractf{n3v3r_g0nn4_g1v3_y0u_up}



私がCTFやってたのは3年以上前なんですが、最近のCTFは終了後もサーバーを動いたままにしてくれてたり、
DiscordでWriteupのやり取りがされてたり、色々様変わりしてて良いですね。