【備忘録】XSS入門
はじめに
今回はXSS(Cross Site Scripting)についてまとめていきたいと思います。
私自身、セキュリティに興味を持ち始めたばかりなのでなるべく間違ったことを書かないようには注意いたしますが、誤っている際にはご指摘いただけると幸いです。
※注意:XSSを試したい場合は自身のローカル上のみで再現させましょう
これを他の人やインターネット上に公開されているXSSが可能な脆弱性のあるWebアプリケーションで行うことは犯罪です。絶対にやめましょう。
XSS(Cross Site Scripting)
XSSとは
XSSはクライアントからの入力値をもとに動的にHTMLを生成するようなWebアプリケーションにおいて、生成されるHTMLに対してスクリプト(JavaScript)を挿入可能である場合に発生する脆弱性の一種です[1]。
XSSの種類
XSSは以下の3種類に分類できます
Refrected XSS
Refrected XSSの処理フローは以下のようになります。
-
攻撃者がユーザのブラウザ上で実行させたいスクリプトを含んだHTMLがレスポンスされるようなクエリ(このクエリに差し込みたいスクリプトが記載される)が含まれたURLにユーザを誘導させる。
-
ユーザはその不正なURLにアクセスする
-
攻撃対象となるWebアプリケーション上で生成された不正なスクリプトを含むHTMLをユーザにレスポンスとして返しユーザのブラウザで読み込まれる。
-
ユーザのブラウザ上でスクリプトが実行され、ユーザの個人情報やCookieの内容などを取得し、その情報を攻撃者に送信することで情報を窃取する
Stored XSS
Stored XSSの処理フローは以下のようになります。
-
攻撃者はHTMLに組み込まれるとスクリプトが実行されるようなデータをWebアプリケーション上で作成する
-
ユーザにそのスクリプトが含まれたデータが返却されるURLを送りつけ誘導する
-
ユーザがそのURLをクリックした際にWebアプリケーション上で攻撃者が作成したスクリプトが含まれるデータがHTMLに組み込まれ、ユーザのブラウザに読み込まれる
-
組み込まれたスクリプトがユーザのブラウザ上で実行され、ユーザの個人情報やCookieの内容を取得され、攻撃者に送信される。
Dom-based XSS
Dom-based XSSの処理フローは以下のようになります。
-
攻撃者は、ユーザのブラウザ上で実行したいスクリプトがクライアントサイドで実行されるDOM操作の際に実行されるようなURLに誘導する(この時URLのクエリ文字列に実行させたいスクリプトを含ませる)
-
ユーザがそのURLにアクセスする。
-
Webアプリケーション側で実装されているDOM操作を行うスクリプトを含んだHTMLがユーザのブラウザに読み込まれます。
-
攻撃者がユーザに送信したURLに含まれるスクリプトがDOM操作によってHTMLに組み込まれ実行される。
-
スクリプトの実行により、ユーザの個人情報やCookieの内容を取得され、攻撃者に送信される。
終わりに
ここまで読んでいただきありがとうございます。実際に試せるサンプルコードはまたの機会でお願いします。
参考文献
[1] 詳解セキュリティコンテスト CTFで学ぶ脆弱性攻略の技術
「梅内翼,清水裕太郎,藤原裕太,前田優人,優人,米内貴志,貴志,渡部裕(著)」
Discussion