こんにちは。
GMOインターネット セキュリティエンジニアの関です。
今回はクロスサイトスクリプティングの手法の一つ、DOM based XSSの検査の手法について、PortSwiggerが公開しているWeb Security Academyのテストページを使って解説していきます。
※Web Security Academyはアカウント登録をすれば誰でも無料で使えます。
目次
1. 注意事項
- 検査により、意図せずにシステムの停止や不具合を引き起こしてしまう可能性があるため、紹介する手順を試してみたい場合は本番に影響を及ぼさない検証環境か、それ専用に作られたテストサイトでの作業をお勧めします。
- 自組織が管理しないWebアプリケーションへの検査は、場合によっては不正アクセスとして違法となる可能性があります。
2. クロスサイトスクリプティングとは
クロスサイトスクリプティングとは、リクエストヘッダやパラメータに含まれる情報を画面に出力する処理にエスケープ不備があり、第三者(攻撃者)が用意した悪意あるスクリプトが埋め込まれた結果、意図しない処理を実行されてしまう脆弱性です。 想定される被害として、偽ページの表示や認証情報の奪取があります。
クロスサイトスクリプティングには以下3つの分類があります。
- 反射型XSS
- 蓄積型XSS
- DOM based XSS
上記のうち、DOM based XSSはJavaScriptから動的にHTMLを操作するアプリケーションにおいて動作します。
正規のスクリプトの動きを悪用し、不正なスクリプトを実行させることが特徴です。
自動の脆弱性診断などでよくあるパターンでは、対象のWebサーバに対して検査コードを含むリクエストを発行し、そのレスポンスの内容によって脆弱性が存在するかを調べますが、DOM-based XSSではクライアント上でJavaScriptが動作するまではXSSが発生しません。
そのため、ツールによっては検知が難しく、手動で検証が必要な脆弱性となります。
3. 検出パターン / 例
今回は「BurpSuite」というローカルプロキシツールを使って検査していきます。
セットアップや基本的な使い方について解説している記事などは検索すれば多数ヒットしますので、ここでは解説の対象外とします。
※BurpSuite自体は無料でダウンロードできます。
まず、検査の際には以下文字列がレスポンス内にあることをトリガーとします。
(ツールによっては下記の文字列がヒットすればDOM based XSSの可能性ありとして検出されるものもあります。)
- innerHTML
- document.write
- javascript
- location.href
- eval
- setTimeout
- setInterval
- Function
- jQuery 他
検査文字列は以下の通りです。
- javascript:alert(1)
- “><svg onload=alert(1)>
- <script>alert(1)</script> 他
※なお、トリガーとなる文字列や検査文字列は一例となります。
4. 検査手順詳細
① 検査したい目的の画面まで遷移します。
② 今回は検索処理なので、適当な文字列を挿入し検索を実行します。
(SOCtestと検索してみました。)
→左側の検索結果画面には、「0 search results for ‘SOCtest’」と表示されています。
③ Burp上で実際のレスポンスrawデータを確認してみます。
→対象のレスポンス内で「SOCtest」と検索してみると、0 matchesとなっています。
④ レスポンスrawデータの中で、検索結果表示に該当する箇所を探してみます。
今回は下記のように定義されていました。
⑤ 呼び出されているsearchMessageをもう一段掘り下げて確認してみると、scriptでこのように記載されています。
→innerHTMLとあるため、DOM-based XSSが発生する可能性があります。(トリガーパターン参照)
⑥ XSSの検査コードを挿入してみます。「”><svg onload=alert(1)>」(検査文字列パターン参照)
→javascriptのポップアップが表示されたことが分かります。
⑦ ここで改めて、レスポンスrawデータを確認してみますが、
”><svg onload=alert(1)>は出力されていないため、ツールによっては自動検知が困難となります。
5. おわりに
今回は、DOM based XSSの検出方法について紹介してきました。
攻撃の特性上、ツールでは検出しにくいという点は説明した通りですが、そのほかにもWAFやブラウザのXSSフィルタでもブロックしにくい厄介な脆弱性です。
まずはこういった攻撃手法があることを認識することが第一歩だと思います。
具体的な対策手法や、もっと深堀して検査したい!という方は、調べてみるとチートシートやより詳細に解説している記事がありますので是非ご参照ください。
ブログの著者欄
採用情報
関連記事
KEYWORD
CATEGORY
-
技術情報(418)
-
イベント(155)
-
カルチャー(35)
-
デザイン(16)
TAG
- 5G
- Adam byGMO
- AI
- AWX
- BIT VALLEY
- blockchain
- ChatGPT
- cloudnative
- CloudStack
- CM
- CNDO
- CNDT
- CODEGYM Academy
- ConoHa
- CS
- CSS
- CTF
- DC
- Designship
- DevSecOpsThon
- Docker
- DTF
- GitLab
- GMO Developers Day
- GMO Developers Night
- GMO GPUクラウド
- GMO Hacking Night
- GMO kitaQ
- GMO SONIC
- GMOアドパートナーズ
- GMOアドマーケティング
- GMOイエラエ
- GMOグローバルサイン
- GMOデジキッズ
- GMOペイメントゲートウェイ
- GMOペパボ
- GMOリサーチ
- Go
- GTB
- Hardning
- Harvester
- HCI
- iOS
- IoT
- ISUCON
- JapanDrone
- Java
- JJUG
- K8s
- Kids VALLEY
- LLM
- MetaMask
- MySQL
- NFT
- NVIDIA
- OpenStack
- Perl
- PHP
- PHPcon
- PHPerKaigi
- QUIC
- Rancher
- RPA
- Ruby
- Selenium
- splunk
- SRE
- SSL
- Terraform
- TLS
- TypeScript
- UI/UX
- VLAN
- VS Code
- インターンシップ
- オブジェクト指向
- オンボーディング
- お名前.com
- カルチャー
- コンテナ
- スクラム
- スペシャリスト
- ソフトウェアテスト
- チームビルディング
- ドローン
- ネットワーク
- プログラミング教育
- ブロックチェーン
- ゆめみらいワーク
- リモートワーク
- 基礎
- 多拠点開発
- 大学授業
- 宮崎オフィス
- 応用
- 技育プロジェクト
- 新卒
- 暗号
- 機械学習
- 決済
PICKUP