反映された XSS (JS 変数)

Feb 23 2023
こんにちは。今日は、Saka Reflected XSS (JS Variable) という名前の私のプロジェクトの Web アプリケーション セキュリティ テストで遭遇した脆弱性を検出し、この脆弱性を悪用する手順を説明します。XSS とは XSS の脆弱性に関する詳細情報は、以下の記事でご覧いただけます。

こんにちは。今日は、Saka Reflected XSS (JS Variable) という名前の私のプロジェクトの Web アプリケーション セキュリティ テストで遭遇した脆弱性を検出し、この脆弱性を悪用する手順を説明します。

XSSとは何ですか

XSS 脆弱性の詳細については、以下の記事を参照してください。

アプリケーションの実行

ドッカー

docker pull erdemstar/saka:reflected-xss-js-variable
docker run -d -p 80:80 erdemstar/saka:reflected-xss-js-variable

git clone https://github.com/ErdemStar/Saka
cd reflected-xss-js-variable
- mouse click on reflected-xss-input.sln
- devenv reflected-xss-input.sln (CMD)

初めてアプリケーションを開くと、以下のようなページが表示されます。ページ上の「攻撃」ボタンを押すと、テストする部分に移動します。

「攻撃」ページにアクセスすると、ユーザーから名前情報が取得されるページが表示されます。このフィールドに名前を書いて送信すると、次のような結果が得られます。

攻撃ページのリクエスト
攻撃ページの応答

アプリケーションを詳しく見るには、ブラウザーを介して受信リクエストと送信リクエストを確認すると便利です。

ビジネス ロジックの最初のリクエスト

メンタルノート

  • ユーザーから受け取った値は name パラメーターに保持され、GET HTTP 動詞を使用して送信されます。
  • アプリケーションは、上で共有した図の 72 ~ 73 ~ 74 行目を使用して、ユーザーから受け取った値を表示します。アプリケーションは、JS フィールドのデータをユーザーに表示します。

アプリケーションに関する十分な情報を取得した後、XSS 脆弱性を悪用するために、送信する名前の値にブラウザーによって解釈されるいくつかの文字が追加されます。

基本ペイロードを含むリクエスト

受信した応答の内容を確認すると、アプリケーションはセキュリティ チェックを行わずに受信した名前の値を反映していることがわかります。

ここで、ユーザーから受け取ったデータを script タグに追加すると、2 つの異なる方法で悪用される可能性があります。

1-メソッド (HTML インジェクション)

Response で返された 73 行を調べるとき、アプリケーションは、ユーザーから受け取ったデータを HTML に直接追加して表示するのではなく、JavaScript のinner.html機能を間接的に使用します。ここで、以下のようなリクエストがスローされると、XSS 攻撃が実行される可能性があります。

攻撃の要求と応答
結果

2 メソッド (JS バイパス)

73 行を調べると、以下のようなペイロード形式のリクエストを送信し、script タグ内でさまざまな Javascript コマンドを実行できるようになります。

<context>";//<payload>

リクエスト1

この段階では、次のような簡単なリクエストを行うことで、JS コマンドを直接実行できるようになりました。

リクエスト2
応答

私の記事を読んでいただきありがとうございます。お役に立てば幸いです。以下に、役に立つかもしれない私の他の概念のリンクを残しておきます。

Web の脆弱性に関する他の記事を参照するには、ここをクリックしてください。リンク