8946Take14解き方のヒント

皆様こんにちは。ハッキングチャレンジ8946いかがでしょうか?さて、本日は皆様の声にお応えしまして、ヒントをください!と一番お声が多かったTake14の解き方のヒントを公開致します。あまり、ヒントばかり出しますと学習出来なくなってしまいますので、今後メールを頂いたからと言って、毎回ヒントを公開することは多分ありませんのであしからず(笑)それでは、特別公開!

検証サイトは、
www.7men.jp (今は一時休業している当グループ会社の飲食店www)             です・・

ブラウザは、FireFoxを利用しています。

メールアドレスのチェック項目をすり抜けるには??

 

メールアドレスに何も入力せず、「送信確認」ボタンをクリックすると、
エラーが表示されるので、JavaScriptで、エラーの制御をしている事がわかります。

それでは、次にXSSの脆弱性があるかチェックします。
メールアドレス欄に、
“><script>alert(1)</script>
と入力して、「送信確認」ボタンをクリックしてみます。

JavaScriptが実行され、画面上に「1」と表示されました。
このサイトには、XSS脆弱性がある事がわかります。

では、このとき、htmlソース上ではどうなっているか、見てみましょう。
画面上で、右クリックして「ソース表示」してみます。

 赤枠の、メールアドレスの箇所を見てみると、メールアドレスの入力欄が、「”」で、終結され、
JavaScriptが埋め込まれているのがわかります。

その時の画面は、htmlタグが壊れてますね。

 

JavaScriptが実行できる事が判明しました。

メールアドレスをチェックしている箇所をすり抜けるために、このページ上で使用されている「メールアドレスをチェックしている関数」をわざと埋め込み、同じ関数を2個入った状態にします。

通常、同じ名前の関数がある場合、ページは、上から順番に読み込みされるので、通常のチェック関数よりも、メールアドレスの入力欄は下に位置しているので、ここに埋め込んだJavaScriptの関数が通常実行される関数を上書きしてしまい、通常のチェック関数は、無効になってしまいます。その事を利用します。

再度、ソースをみると、メールアドレス等のチェックに、

beforeSubmit()

という関数が使われている事がわかります。

 

そこで、メールアドレス欄に、

“><script>function beforeSubmit(){document.form1.submit();}</script>

と入力します。メールアドレスをチェックしている同じ関数名をいれます。

後に続く、

document.form1.submit()

というのは、formの名前である、form1の中身を送信しなさいという記述になります。

入力したら、「送信確認」ボタンをクリックしてましょう!

そうすることで、メールアドレスをチェックしている関数が埋め込みされます。

htmlソースを開いて確認してみましょう。

 

メールアドレス等をチェックしている「beforeSubmit()」関数が、今入力した箇所と、元々あったものと、2個存在している事になります。

この状態で、メールアドレス欄に「なにか文字」を入力すると、通常のメールアドレスをチェックしている、beforeSubmit()という関数よりも、今入力した、「beforeSubmit()」が実行されます。

もちろん、メールアドレス欄に入力した関数、beforeSubmitは、メールアドレスのチェックではなく、

document.form1.submit();

としているので、そのまま送信されてしまいます。

と、ここまでいかがでしたでしょうか?大分出しちゃいましたねww丸見えでしょうかw問題を解くプロセスが大事な事なので、実際に解けた場合でもその後発展・応用など自己学習に役立てて、サイト構築の際には十分ご注意ください。

以上をふまえて、ハッキングチャレンジサイト8946

Take14を、チャレンジ!!!!