security
KOSENセキュリティコンテスト2017に参加してきました.
いろいろあって人数の穴を埋めるために駆り出されました.
本当はプロコンで行けなかったハッチポッチフェスティバルのディレイビューイングの予定だったんですけどね……
人数合わせとして参加ですが,趣味の時間と交換してきているのでそれなりに頑張りました.
僕の担当はWeb系でした(比較的必要ツールが少ないからです).
というわけでWeb系の問題の解き方について
4問ありましたが1個目はクッソ簡単だったらしく僕が問題を確認する前にメンバーが答えていたので知らんです.
これについては会場で解説がありましたが,ヒントに書いてある通りに何も考えず以下にアクセスするだけです.
/data.db
そしてバイナリエディタで開いて見てみると
こんな感じですね.
これはかなり苦しみました.
しかし,デバッグ最強だった.
とりあえずjavascriptを読んでいきます.
読みにくすぎるので改行とインデントくらい合わせます.
かなり読みやすくなりますね. ここまで来たら変数名とかがキチガイなだけの普通のjavascriptです.
各行一般的な処理が書かれています(逸般的な書き方してるけど).
各行にブレークポイントを設置して一行ずつ処理を見ていきます.
また,怪しい変数かなって思うやつを調べます.
今回は10行目の無名関数内の __ (アンダーバー2つ)の配列が怪しいよねってことでWatchに追加します.
そうしたらリロードしてjavascriptを走らせます.
18行目で1つ目の要素が文字列に置き換えられました.これは何かがある.ここには何かがある.
順番に文字列に置き換えてから,全部をアンダーバーに置き換えているようです.
そのまま見ていくとFlagが出ます.
ちなみにmの中身は関数名が入っているのでこれを使って関数を呼び出しているようです.
難読javascript問題(2)ですね
パズルになっています.
alert(1);を作ればいいようなので適当に作ります.
最初に目を付けるべきなのは最後の箱です.
ここは文字列の連結をしているようです.
alert(1);の最後は(1)があるので,とりあえず(1)を入れます.
次に見るのは 0x52, 0x54 です. これはASCIIコードで r と t です.
ということはこの手前3つの箱には a と l と e を作るようにしたら良さそうです.
(101) これはASCIIコードで e です
同じノリで他2つ埋めます.
これで2行を埋め終わりました.
これで2行目は終わりです.