皆様こんにちは。ハッキングチャレンジ8946いかがでしょうか?さて、本日は皆様の声にお応えしまして、ヒントをください!と一番お声が多かったTake14の解き方のヒントを公開致します。あまり、ヒントばかり出しますと学習出来なくなってしまいますので、今後メールを頂いたからと言って、毎回ヒントを公開することは多分ありませんのであしからず(笑)それでは、特別公開!
検証サイトは、
www.7men.jp (今は一時休業している当グループ会社の飲食店www) です・・
ブラウザは、FireFoxを利用しています。
メールアドレスのチェック項目をすり抜けるには??
メールアドレスに何も入力せず、「送信確認」ボタンをクリックすると、
エラーが表示されるので、JavaScriptで、エラーの制御をしている事がわかります。
それでは、次にXSSの脆弱性があるかチェックします。
メールアドレス欄に、
“><script>alert(1)</script>
と入力して、「送信確認」ボタンをクリックしてみます。
JavaScriptが実行され、画面上に「1」と表示されました。
このサイトには、XSS脆弱性がある事がわかります。
では、このとき、htmlソース上ではどうなっているか、見てみましょう。
画面上で、右クリックして「ソース表示」してみます。
赤枠の、メールアドレスの箇所を見てみると、メールアドレスの入力欄が、「”」で、終結され、
JavaScriptが埋め込まれているのがわかります。
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を、チャレンジ!!!!