道民学生プログラマの憂鬱

やるきになったら書く

8946 解説 21~30

久しぶりに書きます。

take21

ここはちょっと難しいかもです。
答えからいうと。

curl --verbose http://www.hackerschool.jp/hack/take21.php

すると、書いてあります。
よくわかりませんけど。
ソースにあるパスにまんまと引っかかりましたwwwww。

take22

説明不要。
FirebugとかF12キー押したりして、デベロッパーツールでいけます。
もしくは、POSTするデータを書き換えればイケルで。
maxlength

take23

HackMeのlv1........
説明いらない。
正解率21%.........

take24

ここからが本番でしゅ。

まずは、booksから適当な年代にアクセス。

http://whitecafe.moe.hm/books.php?sql=%24t%7Btr%25+Y+u%23%7E%7C+13%40%40%3CD1+%28wt%23t+152E61+ml+%60_faggag__+p%7Ds+152E61+kl+%60%60_cd_da__+%7E%23st%23+q%2A+1%3F2%3E61+p%24rj

怪しい....
とりあえずURLデコードしよう。

sql=$t{tr%+Y+u#~|+13@@<D1+(wt#t+152E61+ml+`_faggag__+p}s+152E61+kl+``_cd_da__+~#st#+q*+1?2>61+p$rj

うん、これは何でしょうか。
Base64ではないなー、と思います。調べてみるとrot47なるものがあるらしいですね。
デコードすると。

SELECTZ*ZFROMZ`books`ZWHEREZ`date`Z>=Z1072882800ZANDZ`date`Z<=Z1104505200ZORDERZBYZ`name`ZASC;

ちょくちょく、Z が入ってるけどこれなんだろう...
と思ったら「+」がrot47で「Z」になるみたいですね。
+は、スペースに置き換えましょう。

SELECT * FROM `books` WHERE `date` >= 1072882800 AND `date` <= 1104505200 ORDER BY `name` ASC;

では、これからはROT47 => URL ENCODE でいけるでしょう。
でも、ただURL書き換えるだけだとだめなようで、リファラーを偽造しなければいけない(?)ようで、
curl等をつかって。

curl -e http://whitecafe.moe.hm/books.php http://whitecafe.moe.hm/books.php?sql=

をしなければいけないようです。
説明面倒なので、途中を端折ります。

SELECT * FROM members;

で、パスワードですがSHA-256であるのは明らかで(可変長SHA-3(SHAKE)である可能性もありますが)、INSERTでユーザーを追加してもうまくいきません。
理由は、パスワードはSHA-256が10000回重ね掛けされてるから。
で、どうやってそれを知るかというと、「Hall of shame」にいって、
「8946」「password is "8946"」が、います。
これは、先人がヒントを残したのではなく、公式にこれが用意されているようです。
で、これは実際にログイン可能なので、あとはプログラムかいて何回重ね掛けされているかを調べる。。。。
らしいです。
これは難しかったです(上の比じゃないw。
あとは頑張ってください

take25

プログラムかくだけ。 (24で疲れて説明テキトー
PHPおすすめです。(デフォでsha256用意されてる。(C#もあるけど、文字列に変換する必要がある))

take26

難読化をきれいに整形すればわかるよ。。。 (投げやり

take27

pass = seconds * (time + 1) * (document.form1.pass.value % 2);

ここ。
とりあえず、奇数にする。
積は437になればいい。
437の約数は、1,19,23,437 。
あとは、上の条件を見たす解を見つけましょう。

take28

ilspyつかお(ボソッ

take29

うぬぬ。
わかったら追記します

take30

wolframで求めよう。

終わり

今回は24以降適当です。
24つかれた。
次がいつになるかはわかりませぬ

次 -> shaige1120.hatenablog.com