完全初心者がCTFに挑戦(ksnctf 3 Crawling Chaos に苦戦)
CTF に初挑戦した。
最初に取り組んだ問題は、以下
ksnctf - 3 Crawling Chaos
が、全くの初心者なので、自力で解くことはもちろん、解説をいろいろと読んでみてもやり方がよくわからなかった。
結局数時間かけてクリアしたが、ここに解決法を詳細に記しておく。
なお、使用しているブラウザは chrome
①とりあえずリンク先に飛んでみる。
http://ksnctf.sweetduet.info/q/3/unya.html
にアクセスしてみる。
②画面にはボックスと送信のボタンしかないので、とりあえずソースを見る。
mac では option+command+i (windows では F12らしい)を押す。
すると、いかにもエンジニアっぽい画面が出てくる(google developer console)。
③怪しい箇所っぽいところに注目
12行目を見てみると、なにやら怪しい長ーい一行がある。
意味の無い文章がこんなところにあるはずがない&ところどころに","とか":"とかあって意味がありそう。
④console.log に出してみる。
ここが、初心者にはどうやっていいのか分からず困ったところだ。
まず、↑の画像の全行を、メモ帳に貼り付けて hoge.html といった名前で保存する。
次に、その hoge.html をchrome で開く。先ほどの方法で、developer console を呼び出す。
やってみればわかるのだが、今度はソースコードをいじれるようになっている(ローカルにコピーした、自分のファイルなので)。
ということで、ソースコードに修正を加え、この長い12行目の秘密を探ってみることにする。
↓の画像のように、console.log() で 12 行目をくくってしまってから、このページをリロードすると、console の部分に赤文字でぞろぞろと出てくる。
この下の方の部分を読みやすく整形すると以下みたいな感じに。
$(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; }); });
⑤ FLAGを見つける
↑のコードを見ると、array の要素一つ一つに対して、正解の文字コードが存在するみたいだ。
なので、C言語でそれを解くコードを書いてみた。
#include <stdio.h> int main (void) { #include <stdio.h> int main (void) { int i; int array[] = {70,152,195,284,475,612,791,896,810,850,737,1332,1469,1120, 1470,832,1785,2196,1520,1480,1449}; for ( i = 0; i < sizeof(array) / sizeof(int); i++ ) { char c; c = array[i] / ( i + 1); printf("%c", c); } printf("\n"); return 0; } ||>