最近、ニュースが出てきました。 Alibabaのネットワークセキュリティ部門の4人の従業員は、Webページの脆弱性を使用してJSスクリプトを書いてムーンケーキをつかむために興味をそそられました。彼らは、このJSスクリプトを書く方法と、さまざまな注文と銃のつかみを実装する方法を知りたかったのです。
JavaScriptインジェクション攻撃とは何ですか?
1.ユーザーが入力して再表示されたコンテンツはいつでも、WebサイトはJavaScriptインジェクション攻撃に対して脆弱です。 JavaScript注入攻撃に対して脆弱な特定のアプリケーションを見てみましょう。顧客フィードバックWebサイトが作成されたとします。顧客はウェブサイトにアクセスして、製品に関するフィードバック情報を入力できます。顧客がフィードバックを送信すると、フィードバック情報がフィードバックページに再表示されます。
カスタマーフィードバックWebサイトは簡単なWebサイトです。残念ながら、このウェブサイトはJavaScriptインジェクション攻撃に対して脆弱です。
次のテキストが顧客フィードバックフォームに入力されているとします。
<script> alert(aittle!)</script>
このテキストは、警告メッセージボックスを表示するJavaScriptスクリプトを表します。誰かがこのスクリプトを顧客フィードバックフォームに提出した後、メッセージ攻撃!将来、誰かが顧客フィードバックWebサイトにアクセスすると表示されます。
2。別のタイプは、ブラウザアドレスバーにJSコードの一部を入力して、ページJS変数とページラベルのコンテンツを変更することです。
JavaScriptインジェクションを使用して、ユーザーはブラウザのアドレスバーで行われるWebページを閉じたり保存せずにコンテンツを変更できます。コマンドの構文は次のとおりです。
JavaScript:alert(#コマンド#)
たとえば、http://www.example.comサイトにアラート警告ボックスが表示される場合は、最初にアドレスバーにURLを入力してページがロードされるのを待ち、次にURLを削除して入力します。
JavaScript:アラート(HelloWorld)
新しいURLとして。これにより、この手法を使用して、写真などのWebページ上のほとんどすべてを変更します。 Webサイトのロゴ画像があるとし、ページソースファイルを調べてHTMLコードの1つを見つけるとします。
<img name = hi src = hello.gif>
画像の名前はhiという名前で、ソースファイルはhello.gifです。サイトに保存されているbye.jpegファイル(http://www.mysite.com)に変更したいので、画像の完全なアドレスはhttp://www.mysite.com/bye.jpegです。
javascript:alert(document.hi.src = http://www.mysite.com/bye.jpeg)
http://www.mysite.com/bye.jpegalert警告ポップアップが表示され、画像が変更されます。これらの変更は一時的なものであることに注意する必要があります!ページを更新したり、変更を再入力したりすると、WebサーバーではなくPCでこれらの変更を行ったため、変更が消えます。
同じ方法を使用して、変数の値を表示または変更できます。たとえば、このようなコードがWebページにあります。
<スクリプト言語= javascript> var a = test </script>
これは、変数Aの値がテストであることを意味し、次のように入力します。
JavaScript:アラート(a)
次に、その値をHelloに変更します。
JavaScript:アラート(a = hello)
JavaScript注入は通常、次のようなコードがあると仮定して、フォームプロパティを変更するために使用されます。
<form name = format action = send.php method = post> <入力タイプ= hidden name = mail値= [email protected]> <入力タイプ=テキストname = name> <入力タイプ= submit = submit> </form>
フォームをメールボックスに送信したいのですが、some somewhere.comではなく。次のコマンドを使用できます。
javascript:alert([email protected])
•おそらく、これらのコマンドの階層的な関係に気づいたことがあります。
•左から右に説明します。
•1)左端はドキュメントです
•2)変更するオブジェクト名(document.hi.srcなど)またはそれに含まれるオブジェクト(document.format.mail.valueなど)があります。
•3)最後に、変更するプロパティがあります(ソースパス:document.hi.src、または変数値:document.format.mail.valueなど)
•4).Number分離を使用します
•5)属性値を変更する場合、= signと新しい属性値を使用します
•*注:新しい属性値が文字列(例:document.format.mail.value = [email protected])である場合、二重引用符で囲む必要があります。
•変数の値として使用する場合は、二重引用符を使用する必要はありません。たとえば、変数bの値を変数Aに割り当てる場合、JavaScript:alert(a = b)を入力できます。
•ただし、ページのほとんどのタグには、次のような名前がありません。
<form action = send.php method = post> <入力タイプ=非表示name =メール値= [email protected]> <入力タイプ=テキストname = name> <入力タイプ= submit = submit> </form>
このコードにはフォーム名はありません。上記の情報に基づいて、このコマンドを使用できます。
javascript:alert(document。.mail.value= [email protected])
この場合、フォームシーケンス番号を数えて見つけなければなりません。以下は例です。
<フォームアクション= send.phpメソッド= post> <入力タイプ=テキストname = name> <入力> <入力タイプ=送信値= submit> </form> <form action = send.php method = post> input> input = hidden name = mail value = [email protected]> <入力型=テキスト名=名前> <入力タイプ=提出値=送信= < value = submit> </form>
•上記のコードでは3つのフォームが表示されますが、2番目のフォームにのみ興味があるため、必要なフォーム数は2です。1、2、3、4などの1から開始することを忘れないでください。このシリアル番号を使用して、コマンドを完成させます。
javascript:alert(document.forms [1] .mail.value = [email protected])
•この方法では、名前なしで画像またはリンクを変更でき、フォームを必要なタグタイプに変更できます。写真用
javascript:alert(document.images [3] .src =###)#)
リンクはです
javascript:alert(document.links [0] .href =#必要なurl#)
最後に、この手法を使用してCookieを編集できます。次のコマンドは、triviasecurity.netのdr_amadoによって書かれており、ユーザーが編集する前に表示するために少しだけ変更しました。アドレスバーにコピーする必要があります。
javascript:alert(window.c = function a(n、v、nv){c = document.cookie; c = c.substring(c.indexof(n)+n.length、c.length); c = c.substring((c.indexof(;)>> - 1)?c.indexof(;): c.length)//クッキーを手動で変更する場合は、次のコマンドを使用できます。
JavaScript:alert(document.cookie)
これにより、現在のCookieが表示されます。UserID= 1を想定して、userID = 2に変更する場合は、次のコマンドを使用できます。
javascript:alert(document.cookie = userId = 2)
最後に、すべての変更がクライアント側にあることを強調する必要があります! WebページをPCに保存して変更するようなものです。それでも、このトリックを使用して、ページ(Cookieなど)をだましたり、セキュリティ検証をバイパスしたりできます。たとえば、一部のWebページでは、ユーザーがデータを送信する場所を検出します。 http://www.test.com/form.phpからhttp://www.test.com/check.phpにデータを送信すると、check.phpがhttp://www.test.com/form.phpのフォームからデータが届くかどうかを検出する場合があります。それに加えて、これらのトリックのいくつかを使用して、独自のJavaScriptコードをページに入力する予定がある場合は、画像を変更して同じままにすることができます!
最後に、JS注射は非常にひどいので、自分で書いたウェブサイトでのJS注入を防ぐためにどのような解決策が必要ですか?
方法1:
JavaScript注入攻撃を防ぐ簡単な方法は、ビュー内のデータを再表示するときにHTMLのWebサイトユーザーが入力したデータをエンコードすることです。
例:<%= html.encode(feedback.message)%>
文字列をエンコードするためにHTMLを使用することの意味は何ですか? HTMLを使用して文字列をエンコードする場合、<and>などの危険な文字が<and>などのHTMLエンティティに置き換えられます。したがって、string <script> alert(boo!)</script>がHTMLを使用してエンコードされると、<script> alert(astation!)</script>に変換されます。ブラウザは、エンコードされた文字列を解析するときにJavaScriptスクリプトを実行しなくなりました。代わりに、無害なページが表示されます。
方法2:
HTMLを使用してデータをエンコードすることに加えて、ビューにデータを表示するときにデータを表示するときに、データベースに送信する前にHTMLを使用してデータをエンコードすることもできます。
Stringescapeutils.escapehtml(フロントデスクが提出したデータ);
多くの場合、人々は2番目の方法ではなく、このチュートリアルで説明されている最初の方法を使用することを好みます。 2番目のアプローチの問題は、HTMLエンコードデータが最終的にデータベースに保持されることです。言い換えれば、データベース内のデータには奇妙な文字が含まれます。これの欠点は何ですか? Webページ以外の形式でデータベースデータを表示する必要がある場合、問題が発生します。たとえば、Windowsフォームアプリケーションでデータを簡単に表示することはできません。
共有してくれたNetizensに感謝します:http://zxf-noimp.iteye.com/blog/1130771
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。