2011-08-29 10 views
21

私はXSSに問題がありました。具体的には、自分の入力に脆弱性があることを示すJSアラートを個人に送りました。私はXSSに関する研究を行い、例を見いだしましたが、何らかの理由でそれらを動作させることができません。ページ入力のテストに使用できるXSSの例?

私は自分の入力に捨てることができるXSSの例を得ることができます。また、ユーザーに出力すると、脆弱であることを知らせるアラートのような変化が見られますか?

私はPHPを使用していますが、私はhtmlspecialchars()を実装しようとしていますが、私はまずこれらの脆弱性を再現しようとしています。

ありがとうございます!

+4

コードインジェクションの脆弱性は、常に不適切な使用の結果でありますデータが漏れているかどうかを確認します。 PHPでは、マークアップする予定のないページに出力する*すべて*で 'htmlspecialchars()'を使用する必要があります。いくつかの型を保存するには、ラッパー 'function h($ s){return htmlspecialchars(s);}を使用できます。 } 'を使い、どこでも' h() 'を使います。 – Tomalak

+0

'htmlspecialchars()'(または 'htmlentities()')を実装する前に** XSSの脆弱性**をテストするポイントは何ですか? – Mike

+0

また、常にあなたがいる "コードレベル"を考えてみましょう:例:ユーザー生成データをHTMLコメントに書き込むときには、実際には 'htmlspecialchars()'する必要はありませんが、そのデータから ' - >'があればそれを削除するか、XSSの脆弱性が存在する可能性があります。 – Tomalak

答えて

14

あなたはこのFirefoxのアドオンを使用することができます。

XSS-Meは、反射クロスサイト スクリプティング(XSS)をテストするために使用エクスプロイト・ミーツールです。現在、格納されているXSSをテストしていません。

ツールは、HTMLフォームを送信して、 という形式の値をXSS攻撃の文字列で置き換えることによって機能します。 結果のHTMLページで特定のJavaScript値が (document.vulnerable = true)に設定されている場合、ツールはそのページを特定のXSS文字列に脆弱な としてマークします。ツールは、指定されたシステムのセキュリティを に侵害しようとしません。システムに対する攻撃の可能性のあるエントリポイント を探します。ポートスキャンはありません。パケット ツールでスニッフィング、パスワードハッキングまたはファイアウォール攻撃が行われていません。

サイトのQAテスターと同じように、これらの文字列をすべて フォームフィールドに入力すると考えることができます。

+1

このツールは素晴らしいです、私は強くお勧めします!ホイールの再調整ネジ –

+0

バージョン5.0ではサポートされていません。誰もが5.0でそれを使って成功しましたか? – KRB

4

例えば:

<script>alert("XSS")</script> 
"><b>Bold</b> 
'><u>Underlined</u> 
1

アドホックテストはOKです、しかし、私はまた、あなたが何かを見逃していないことを確認するために、Webアプリケーションの脆弱性スキャンツールを試してみることをお勧め。

会社のAcunetixはかなり良いですし、そのアプリケーションの無料トライアルを持っています

http://www.acunetix.com/websitesecurity/xss.htm

(ただし私は自分のアプリケーションをテストするために、製品を使用している、私はこの会社で何の提携を持っていないことに注意してください)。

+0

残念なことに、クロスサイトスクリプティングは、自動化されたスキャナが本当に恐るべきものであることの1つです。彼らは野生の脆弱な設定の大半を見逃しており、もっともシンプルなワイドオープンコードでのみ発砲します。 – Cheekysoft

3

自動化されたツールの一部を使用することは非常に良いことですが、これらのツールから洞察や経験を得ることはできません。

XSS攻撃のポイントは、ブラウザウィンドウでjavascriptを実行することです。これはサイトでは提供されません。だからまず、ユーザーが提供したデータがウェブサイトにどのような文脈で印刷されているかを調べる必要があります。 <script></script>コードブロック内にある可能性があります。<style></style>ブロック内にある可能性があります。要素の属性として使用される場合があります。<input type="text" value="USER DATA" />、または<textarea>などです。それに応じて、コンテキストをエスケープする(または使用する)ためにどの構文を使用するかがわかります。たとえば、<script>タグ内にある場合は、関数の消去を終了し、セミコロンで行を終了するだけで十分な場合があるので、最終的な注入は); alert(555);のようになります。指定されたデータがhtml属性として使用されている場合、注入は" onclick="alert(1)"のように見えます。要素をクリックするとjsが実行されます(この領域は特にhtml5で再生するのに豊富です)。 重要なのは、xssのコンテキストは、フィルタリング/サニタイズ機能と同じくらい重要であり、自動ツールでは捕捉できない微妙なニュアンスがあることが多いことです。引用符とhtmlタグがなくても上記のように表示されるように、限られた数の状況では、フィルタをバイパスしてjsを実行することができます。

ブラウザのエンコーディングも考慮する必要があります。たとえば、ターゲットブラウザにutf7エンコーディングがある場合(フィルタをバイパスすることができます)、注入をエンコードします。フィルタの回避は全く別の話ですが、現在のPHP関数は正しく使用されていればかなり防弾です。

また、ここで最後のものとしてXSS vectors

のに十分な長さのリストがあるが、ここでは、サイト上で見つかったXSS文字列の実際の例であり、私はない、単一のスキャナがいただろうことを保証します(、フィルターおよびワードブラックリスト、様々なプロフィールページをカスタマイズするための基本的なHTMLフォーマットを挿入することが許さページがあった)ことが判明:

<a href="Boom"><font color=a"onmouseover=alert(document.cookie);"> XSS-Try ME</span></font>

なXSSやSQLインジェクションなど
関連する問題