さえめろ の めも🐰

さえめろの備忘録です。twitter : @sae_mero_

ksnctf #3「Crawling Chaos」

問題

ksnctf - 3 Crawling Chaos




解答までの道

htmlページのソースを確認。
scriptタグの中身が名伏しがたいものに…

どうやらこのうーにゃーが、きちんとJSとして動いているようです。



ソースコードをコピペして、js部分をconsole.log()で囲んで実行してみる。
余談ですが、Bracketsを使ってみました。使いやすい!



console画面への出力はこんな感じ。

f:id:saemero:20170623141533p:plain


ん…!?
ビ、ビンゴっぽい…!

f:id:saemero:20170623143627p:plain


うーにゃーはどうやらこの部分の動きをしてるようです。
とりあえず整形してみました。

$(function(){
    $("form").submit(function(){
        var t=$('input[type="text"]').val();
        var p=Array(70,152,195,284,475,612,791,896,810,850,737,1332,1469,1120,1470,832,1785,2196,1520,1480,1449);
        var f=false;

        if(p.length==t.length){
            f=true;
            for(var i=0;i<p.length;i++){
                if(t.charCodeAt(i)*(i+1)!=p[i]){
                   f=false;
                }
                if(f){
                   alert("(」・ω・)」うー!(/・ω・)/にゃー!");
                }
            }
        }
        if(!f){
            alert("No");
        }
        return false;
    });
});


配列pの中身をASCIIコード化し、i+1を乗算した文字列が一致していれば通るみたいです。
なので、i+1で除算し、ASCIIコードから元の文字を求めればフラグがでますね。

折角だしJavascriptで記述。

var p = Array(70,152,195,284,475,612,791,896,810,850,737,1332,1469,1120,1470,832,1785,2196,1520,1480,1449);
var answer = "";

for(var i = 0; i < p.length; i++){
    answer += String.fromCharCode(p[i] / (i+1));
}

console.log(answer);


実行したところ無事FLAGをゲット!



使ったものなど

・うーにゃーencode 
(」・ω・)」うー!(/・ω・)/にゃー!encode