English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

js注入、ハッカー必須!

最近、ニュースでアリババの4人のサイバーセキュリティ部門の従業員がウェブのバグを利用して月饼を奪ったと報道されました。興味を持ち、このjsスクリプトがどのように書かれているか、様々な刷り込みや奪い取りがどのように実現されているかを知りたいと思いました。 

JavaScript注入攻撃とは何ですか?

1.ユーザーが入力した内容を受け入れ、それらを再表示するたびに、ウェブサイトはJavaScript注入攻撃に容易にさらされます。JavaScript注入攻撃が簡単に被害を受ける具体的なアプリケーションを研究しましょう。仮にクライアントフィードバックウェブサイトが作成されたとします。ユーザーはウェブサイトにアクセスし、製品に対するフィードバック情報を入力できます。ユーザーがフィードバックを提出すると、フィードバック情報がフィードバックページに再表示されます。
クライアントフィードバックウェブサイトはシンプルなウェブサイトです。残念ながら、このウェブサイトはJavaScript注入攻撃に容易にさらされます。
以下のテキストをクライアントフィードバックフォームに入力していると仮定します: 

<script>alert(“Attack!”)</script>/script> 

このテキストは、警告メッセージボックスを表示するJavaScriptスクリプトを示しています。誰かがこのスクリプトをクライアントフィードバックフォームに提出すると、将来誰かがクライアントフィードバックウェブサイトにアクセスすると「Attack!」メッセージが表示されます。

2.また、ブラウザのアドレスバーにjsコードを入力して、ページのjs変数やページタグの内容を変更する方法もあります。 

JavaScript 注入を使用して、ユーザーはウェブページの内容を変更するためにウェブページを閉じたり保存したりする必要がありません。これはブラウザのアドレスバーで行われます。コマンドの文法は以下の通りです: 

javascript:alert(#command#)

例えば、http://www.example.com サイトで alert 警告ボックスを見つけたら、まずアドレスバーにURLを入力しページが読み込まれるまで待ち、URLを削除し次のように入力します: 

javascript:alert("Hello World")

新しいURLとして使用すると、「Hello World」警告ボックスが表示されます。この技術を使うと、ウェブページのどんな内容も変更できます。例えば、画像です。あるウェブサイトのロゴ画像があるとします。ページのソースファイルを確認して、以下のHTMLコードを見つけます: 

<IMG Name="hi" SRC="hello.gif">

画像は “hi” と名付けられ、元のファイルは “hello.gif” です。それを私たちのサイト(http:)に保存したいと思っています。//www.mysite.com)にある “bye.jpeg” ファイル、そのため画像の完全なURLアドレスはhttp://www.mysite.com/bye.jpeg、Javascript注入を使用して、アドレスバーに以下のように入力するだけで済みます: 

javascript:alert(document.hi.src="http://www.mysite.com/bye.jpeg")

「http:」の弹出が見られます//www.mysite.com/bye.jpeg”alert警告、その後画像が変更されます。注意すべきことは、これらの変更は一時的なものであり、ページをリフレッシュしたり、再びアクセスすると変更は消失します。なぜなら、これらの変更はPC上で行われただけで、ウェブサーバー上では行われていないからです。

同じ方法で変数の値を確認または変更できます。例えば、ウェブページ上で以下のようなコードを見つけます: 

<SCRIPT LANGUAGE="JavaScript">
var a="test"
</SCRIPT> 

これは変数aの値が「test」であることを意味します。次に、以下のように入力します: 

javascript:alert(a) 

その値を「hello」に変更します: 

javascript:alert(a="hello")

Javascript注入は通常フォーム属性の変更に使用されます。以下のようなコードがあります: 

<form name="format" action="send.php" method="post">
<input type="hidden" name="mail" value="[email protected]">
<input type="text" name="name">
<input type="submit" value="submit"></form> 

フォームを私たちのメールアドレスに送信させたい場合、[email protected]に送信させる代わりに、以下のコマンドを使用できます: 

javascript:alert(document.format.mail.value="[email protected]

•これらのコマンドの階層関係に気づいたかもしれません:
 •左から右の順に説明します:
 •1")最左側はdocumentです
 •2")変更したいオブジェクト名(例:document.hi.src)またはそのオブジェクト(例:document.format.mail.value)が続きます
 •3")最後に変更したい属性です(例:ソースパス:document.hi.src、または変数値:document.format.mail.value)
 •4")"."記号を使用して区切ります。
 •5")属性値を変更する際には、"="記号と新しい属性値を使用します。
 •*コメント:新しい属性値が文字列の場合(例:document.format.mail.value="[email protected]")を括る場合、ダブルクォート""を使用する必要があります。
 •それを変数の値として使用する場合、ダブルクォート""を使用する必要はありません。例えば、変数bの値を変数aに割り当てる場合、javascript:alert(a=b)と入力できます。
 •しかし、ページの多くのタグには名前がありません、例えば: 

<form action="send.php" method="post">
<input type="hidden" name="mail" value="[email protected]">
<input type="text" name="name">
<input type="submit" value="submit"></form> 

このコードにはフォーム名がありません。上記の情報を総合すると、このコマンドを使用できます: 

javascript:alert(document. .mail.value="[email protected]")

この場合、フォームのインデックスを数え上げて見つける必要があります。以下はその例です: 

<form action="send.php" method="post">
<input type="text" name="name">
<input type="submit" value="submit">
</form>
<form action="send.php" method="post">
<input type="hidden" name="mail" value="[email protected]">
<input type="text" name="name">
<input type="submit" value="submit">
</form>
<form action="send.php" method="post">
<input type="text" name="name">
<input type="submit" value="submit">
</form> 

•上記のコードでは、3フォームがありますが、私たちが興味を持っているのは2番目のフォームですので、私たちが欲しいフォームのインデックスは2。忘れないでください、1から始まる、1,2,3,4...javascriptは0から始まるので、例えば0、1,2,3...実際のフォームのインデックスは1、2、通常は見つけたフォームのインデックスを1減じます。このインデックスを使ってコマンドを完成させます:

javascript:alert(document.forms[1].mail.value="[email protected]")

•これで名前のない画像やリンクを変更することができます。"forms"を好きなタグタイプに置き換えることができます。画像に対しては、 

javascript:alert(document.images[3].src="#the url of the picture you want#")

リンクに対しては、 

javascript:alert(document.links[0].href="#the url you want#")

 最後に、この技術を使ってcookiesを編集することができます。以下のコマンドは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(1( (c.indexOf(";")>-1) ? c.indexOf(";") : c.length));nc=unescape(c).replace(v,nv);
document.cookie=n+"="+escape(nc);return unescape(document.cookie);});
alert('The cookie is: "'+document.cookie+'"');alert(c(prompt("The name of the cookie:",""),
prompt("Change this value:",""),prompt("with this:",""))) 

//あなたのcookieを手動で変更したい場合は、以下のコマンドを使用できます:

javascript:alert(document.cookie)

1”,次の命令を使用して変更できます:2

javascript:alert(document.cookie="userid=2

最後に強調したいのは、すべての変更はクライアント側だけで行われます。つまり、ウェブページをPCに保存してそれを変更することに他なりません。それでも、この技術を使用して、ページ(例えば、cookies)をだますか、セキュリティ検証を回避することができます。例えば、一部のウェブページはユーザーがデータを送信する場所を検出しますが、http:から送信された場合、//www.test.com/form.phpはデータをhttp:に送信します。//www.test.com/check.php、check.phpはデータがhttp:から来たかどうかを検出するかもしれません。 //www.test.com/form.phpにありますフォーム。これに加えて、ページに自分のJavaScriptコードを入力する場合は、このような技術を使用して、画像を変更しながら同じように表示することができます!

最後に、JavaScript注入が非常に恐ろしいので、私たちが作成したウェブサイトには、JavaScript注入を防ぐためのどのような解決策がありますか? 

方法一:

JavaScript注入攻撃を防ぐ簡単な方法の一つは、データを表示する際にHTMLエンコードすることです。
如:<%=Html.Encode(feedback.Message)%>
HTMLエンコードされた文字列を使用する意味は何でしょうか?HTMLエンコードされた文字列を使用する場合、危険な文字、例えば < と > は、HTMLエンティティ、例えば < と > に置き換わります。したがって、HTMLエンコードされた文字列 <script>alert("ぶー!"<を使用する場合、/script>の時、それは <script>alert("攻撃!"< に変換されます。/script>。ブラウザはエンコードされた文字列を解析する際にJavaScriptスクリプトを実行しません。代わりに、無害なページを表示します。 

方法二:

データをビューで表示する際にHTMLエンコードされたデータを使用するだけでなく、データをデータベースに提出する前にHTMLエンコードされたデータを使用することもできます。 

StringEscapeUtils.escapeHtml("前線で提出されたデータ"); 

通常、人はこのチュートリアルで話す最初の方法を使用することが好きで、二番目の方法を使用することを好まない。二番目の方法の問題は、データベースでは最終的にHTMLエンコードされたデータが残ることです。これは、データベースのデータが奇妙な文字を含むことになります。これはどんな悪いことでしょうか?データベースのデータをウェブページ以外の形式で表示する必要がある場合、問題が発生します。例えば、Windows Forms アプリケーションでデータを簡単に表示することができません。

网友の共有に感謝:http://zxf-noimp.iteye.com/ブログ/1130771

これで本記事の全てが終わりです。皆様の学習に役立つことを願っています。また、ナイアラ・チュートリアルのサポートをどうぞお願いします。

声明:本記事の内容はインターネットから収集され、著作権者に帰属します。インターネットユーザーが自発的に貢献し、自己でアップロードしたものであり、本サイトは所有権を持ちません。人工編集は行われていません。また、関連する法的責任を負いません。著作権侵害が疑われる内容を見つけた場合は、以下のメールアドレスまでご連絡ください:notice#oldtoolbag.com(メールを送信する際、#を@に置き換えてください。告発を行い、関連する証拠を提供してください。一旦確認がとれましたら、本サイトは即座に侵害疑いのコンテンツを削除します。)

おすすめ