ksnCTF Crawling Chaos

こんにちは、山田です。
今回はksnctfというサイトにあるCrawling Chaosというweb系の問題を解いていきたいと思います。



まずここの問題で与えられているページに飛ぶと入力フォームのみ表示されるので、とりあえず適当な文字列を入れてみると、
f:id:eyesjapan:20141205122607p:plain
Noと表示されます。

ここに、正しい文字列を入力するとflagが表示されそうです。

ここでページのソースコードを見てみると、明らかに変なスクリプトが....
f:id:eyesjapan:20141205122745p:plain

こいつをずっと見ていっても、永遠とうーにゃーと書いてあるので、一旦放置して他のところを見ましょう。

jquery.min.jsというのが他にもあるので、そいつを見てみると5000行近い量のコードが書いてありformで文字検索をかけて、怪しそうなところを探ってみたりしたんですが、何も見つけられず。

諦めて、うーにゃースクリプトを改めて見返してみると、これもすごく長いコードなのですが、途中に","や"+"や"!"など正規表現を使ってそうだし、きっとこれはスクリプトエンコードして分からないようにしてるだけでデコードしてみたらちゃんと読めるコードが返ってくるだろうとデコードの仕方を模索している時、ふとページを更新してみると
f:id:eyesjapan:20141206182651p:plain
firebugがうーにゃースクリプトの中身のfunctionを見つけてくれていました。
今回、偶然見つかった形ですが、これ入力フォームに一回でも文字列を入力してエンターを押してページを更新すると、見つけてくれるようです。

早速これの中身を見てみると
f:id:eyesjapan:20141206193927p:plain
こんなスクリプトが書かれていました。
pの中身をfor文の中で変換してそれと一致したら正解と出てくるっぽいので、要するにこれが答えかもと思い、C言語でこのコードに書かれている計算と逆のことをするコードを書いてみました。
f:id:eyesjapan:20141206195903p:plain
そして実行してみると。
f:id:eyesjapan:20141206200025p:plain
綺麗に答えが出てきたので入力フォームに入れて、確認をしてみるとf:id:eyesjapan:20141206200223p:plain
と出てたので正解でした。

今回はweb系の問題解きましたが、運が良かった感じは否めないので、色んな問題を解いて実力をつけていきたいと思います。