フルスタックエンジニアへの道

「フルスタックエンジニアになりたい。。。いや、なってやる!」という備忘録

8946 Take#4

今回は「http://www.hackerschool.jp/hack/」の正答率が4番目に高い(2019/08/02現在)「Take#4」を解いていきたいと思います。

http://www.hackerschool.jp/hack/www.hackerschool.jp

環境

Take#4

Take#4にアクセスすると、下図のような「id」と「パスワード」を入力するフォームがあるページが出てくると思います。今回は、このidとパスワードを入手しなければならないようですね。

f:id:ryasshi:20190801182246p:plain

手始めに、「突破する!」を押すとどのような動作をするのかを確認していこうと思います。
[F12]」(もしくは、右クリックをして「検証」)を押して、デベロッパーツールを開き、「突破する!」のボタンの箇所を特定します。
デベロッパーツールが出たら、突破する!のタグがどこにあるかを確認します。上図左上にある赤枠のマウスのカーソルのようなマークをクリックして、「突破する!」をクリックします。すると、「突破する!」の箇所がハイライトされるはずです。

f:id:ryasshi:20190801182522p:plain

おっと、onclickがないと思ったら答えがあります!(やったぜ!!)
コピーしてっ、、、と思ったら選択できないじゃん!?
どーすんだこれ?と思ったけど右クリックしたらこんなものが

f:id:ryasshi:20190728175146p:plainf:id:ryasshi:20190801183122p:plain

これで選択してコピーできました。あとはこれをフォームに貼り付けてっと

f:id:ryasshi:20190801183907p:plain

はい、突破できませんね。笑
これが何なのか見極めていきたいと思います。最初に予想できるのは、本来のidとパスワードを何かしら変換したものであるということです。
見たところ、Take#3のような「=」はついてないためBase64でないことが予想されます。
次に文字数を確認しましょう。文字数を数えるサイト(【文字数カウント】)などがあるのでそこを活用します。

f:id:ryasshi:20190801184331p:plain

idの文字数を確認すると、「32文字」のようです。パスワードも同様にカウントすると「32文字」でした。
変換前のidとパスワードが、偶然同じ文字数であったということは少し考えずらいので、変換すると、変換前の文字数の長さに関わらず同じ長さに変換される「ハッシュ関数*1」が使われている可能性があります。
ハッシュ化(ハッシュ関数で変換すること)した出力が、32文字のハッシュ関数で有名なものといえば「MD5*2」です。
MD5でハッシュ化されたハッシュ値(ハッシュ化して出力された文字列)から、元の文字列を特定(サイトに記録されている文字列のみ)できるサイト「CrackStation - Online Password Hash Cracking - MD5, SHA1, Linux, Rainbow Tables, etc.」を使って、idとパスワードを特定してみましょう。(※このようなサイトは他にも存在します)

f:id:ryasshi:20190801192925p:plain

左側の枠に「ハッシュ値」であるidとパスワードを入れて、右側の「私はロボットではありません」にチェックをし、最後に「Crack Hashes」を押すと、、、

はい、でました!
解析に成功すると、緑色の枠で、「Hash(ハッシュ値)」「Type(ハッシュ関数)」「Result(ハッシュ化前の値)」が表示されます。(※Resultはわざと黒塗りにしています)
これをフォームに入力してっと

f:id:ryasshi:20190802130635p:plain

突破できました!!!
あとは、いつものように解説を読んで終了です!

f:id:ryasshi:20190802130849p:plain


参考:
http://www.hackerschool.jp/hack/
http://www1.odn.ne.jp/megukuma/count.htm
https://www.atmarkit.co.jp/ait/articles/0401/01/news126.html
https://ja.wikipedia.org/wiki/MD5

*1:

ハッシュ関数とは、任意長のビット列から規則性のない固定長のビット列を生成する関数、手順のことをいう。一般に、ハッシュ関数への入力データは「メッセージ」、ハッシュ関数からの出力データは「ハッシュ値」「メッセージダイジェスト」「フィンガープリント」などと呼ばれる。ハッシュ関数は一方向関数であるため、出力データから入力データを推定することは極めて難しい。
ハッシュ関数とは - @IT

*2:

MD4が前身であり、安全性を向上させたものとされている(いずれにしろ2018年現在、暗号学的ハッシュ関数として必要な強度が要求される目的に使ってはいけない)。1991年に開発された。開発者もMD4と同じくロナルド・リベスト
MD5 - Wikipedia