SECCON 2014 オンライン予選2に出た

チームMt.Takedashiで出て1900ptの74位でした。Mtはtypoじゃないです。

本当に本戦出られるのか不安になってきた

解いたやつ

Reverse it binary 100

f:id:misodengaku:20141207223233p:plain

なんとなくJPEGっぽさを感じるので前後反転と4bitごとに反転させたら画像になった。

f:id:misodengaku:20010022104102j:plain

どう考えても合ってるのにうまくいかないなぁと思ってたらrbモードじゃなくてrモードでfopenしていた。

FLAG: SECCON{6in_tex7}

余談ですがLS-Y201とかいう非常にスペシャルなカメラを扱うと異常にFF D8みたいなバイト列に敏感になります。

JPEGをシリアルポートで吐くってだけで素晴らしいのに転送速度を書き換えるとファームウェアが破損してEEPROM直に書き換えないと復旧しない本当に素晴らしいカメラでした。

REA-JUU WATCH web 200

適当にポチポチ進めてたらユーザーのスコアかなんかを固めたJSON落としてるところがあったんで見たらパスワードも一緒に落ちてきていた(http://reajuu.pwn.seccon.jp/users/chk/2229 こんなの)で、とりあえずユーザーID1のユーザー名とパスワードを抜いてログインしてまたポチポチ進めてたら解けた。

FLAG: SECCON{REA_JUU_Ji8A_NYAN}

Bleeding "Heartbleed" Test Web web 300

これの続きです。

エラーが出てるところはどうも抜いてきたメモリの内容に「" .」とかが含まれてるとエスケープされてないおかげでSQLの構文エラーになってるっぽい、ということはHeartbleedで任意の内容が返せればただのSQL Injectionになる。

HeartbleedのHoneypotでうまいこと任意の内容が返せるっぽいのでこれを使ってSQL文をブチ込んで終わり、と行きたいところだけど一見出力先がない。

f:id:misodengaku:20141207225201p:plain

ただエラーページをよく読んでみるとSQLでSELECTしているのはtimeで、デバッグメッセージで出力されているのもTIME、ということでtimeに欲しいデータをブチ込んでやれば(?)好きなデータが抜ける。

最終的には

"; SELECT name AS time FROM sqlite_master; --

みたいなSQL文でDBのテーブル一覧を抜き(1つずつしかデータが抜けないのでWHEREとかORDER BYとかでうまくやる必要はある)、ssFLGssとかいうクソ怪しいテーブルを見付けて

"; SELECT flag AS time FROM ssFLGss; --

でフラグゲット。

f:id:misodengaku:20141207225940p:plain

FLAG: SECCON{IknewIt!SQLiteAgain!!!}

最初はOpenSSLのバグってる部分書き換えてなんとかしようとかしてました。

解けなかったやつ

今書いてます

まとめ

楽園追放がマジで最高なのでみなさん見ましょう