今回は
http://ksnctf.sweetduet.info/problem/3
を解きます。
問題とか何も書いてなくただ
http://ksnctf.sweetduet.info/q/3/unya.html
のURLだけ。
入力できる場所あるので適当に入力して見たら
NOって言われました。
とりあえずヒントを探すために右クリックから要素でデバック画面を開く
htmlを全部出してみると
なんかめっちゃうーにゃー言ってる...
わからなかったらGoogle検索したらこんなサイトを見つけた
Javascriptをうーにゃーに変更してくれるみたい。
とりあえずページ内のうーにゃーをconsole出力してみる
console.log(うーにゃー)
最後の+と...をとったらエラーは消えてなんか出てきた
uから始まるこれはUNICODE
なんか特徴的だったから覚えてた。
前回使った
https://cryptii.com
を使ったらなんかうまくいかない・・・
別サイトでやってみたらうまく行った
https://www.kwonline.org/u_esc_seq.php
$(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.len
なんか・・・・足りてなくね・・・
ここで1時間ぐらい悩んでました。
unya.htmlが2万文字超え
ブラウザが1万文字
あれ・・・・データが途中までしか表示されてませんでした。
Chrome側の仕様なのかな?
unya.htmlのほうのうーにゃーをconsole.log()してみると
ソースコード付きで帰ってきました。
綺麗にみやすくしたのがこれ
$(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とfしかいらないですよねこれ
$(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
}
// });
});
大事な部分
charCodeAt(i) * (i + 1) != p[i]
charCodeAtは文字を数字にするものらしい。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt
ということはあのプログラムはpに当てはまる数字の文字であれば正解を返してくれるという感じ
なのでpを文字に置き換えるプログラムに書き換える。
文字→数字はCharCodeAt
数字→文字はfromCharCode
ここからはもう簡単
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 = true;
for (var i = 0; i < p.length; i++) {
console.log(String.fromCharCode(p[i]/(i+1)))
}
このコードを
http://ksnctf.sweetduet.info/q/3/unya.html
のConsoleで打ってやれば
FLAGが出てきました。
GG
htmlをそのままダウンロードしないといけないのに注意すればあとは楽そう。