LoginSignup
0
0

「Crawling Chaos」 ksnctf Writeup

Posted at

問題

画像のようなWebページが与えられます。
スクリーンショット 2023-06-29 202209.png

解法

ソースコードを確認してみると怪しいスクリプトがいました。
image.png

とりあえずスクリプトをコピーしてPaizaにブチ込んでみると、スクリプトをデコードした文字列が出てきました。
スクリーンショット 2023-06-29 204054.png

軽く整形します。

$(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;
    });
});

どうやらvar t=$('input[type="text"]').val();でテキストボックスに入れた文字列を変数tに格納してからif(t.charCodeAt(i)*(i+1)!=p[i])のif文で変数p内Arrayの整数と比較しているようです。
比較した文字列が一致しているとalert("(」・ω・)」うー!(/・ω・)/にゃー!")するみたいです。

charCodeAt()メソッドで数値に変換するときに、for文のインデックスiを乗じていることに注意して、PythonでArrayを文字列に変換するコードを書いてみると、次のようになります。

Array = [70,152,195,284,475,612,791,896,810,850,737,1332,1469,1120,1470,832,1785,2196,1520,1480,1449]

for i in range(len(Array)):
    print(chr(int(Array[i] / (i+1))), end="")

無事にフラグが出ました。
スクリーンショット 2023-06-29 212401.png

関連

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0