よくあるWebアプリケーション構成(検索機能)
4
ブラウザ
Webサーバ
(サーバ)
データベース
GET /?title=CTF HTTP/1.1
カラム名 型
id int
title string
body string
postsテーブル
↑クライアントサイド
↓サーバサイド
Slide 5
Slide 5 text
よくあるWebアプリケーション構成(検索機能)
5
ブラウザ
(クライアント)
Webサーバ
(サーバ)
データベース
SELECT * FROM posts
WHERE title LIKE ‘%CTF%’ カラム名 型
id int
title string
body string
postsテーブル
↑クライアントサイド
↓サーバサイド
Slide 6
Slide 6 text
よくあるWebアプリケーション構成(検索機能)
6
ブラウザ
(クライアント)
Webサーバ
(サーバ)
データベース
[]{{2, “CTF4b 2022 Writeup”, “...”}, ...}
カラム名 型
id int
title string
body string
postsテーブル
↑クライアントサイド
↓サーバサイド
あのGoogle検索も...!
Googleのkinugawaさんのやつとか
9
ref: XSS on Google Search - Sanitizing HTML in The Client?
Slide 10
Slide 10 text
Webアプリケーションに
XSSの脆弱性があることを
どのように示せば良いのか?🤔
Slide 11
Slide 11 text
XSSの概念検証(PoC: Proof of Concept)
・ブラウザで任意のJavaScriptを実行させるペイロードを挿入し、
実行されることを視認性が高く、非破壊的な方法で確認したい
→ window.alert()がよく利用されている
・Chromeのバージョン92以上ではCross-origin iframeでalert()
を呼び出せなくなった
→代用としてwindow.print()が利用されることもある
ref: alert() is dead, long live print()
11
Reflected XSS
・サーバ側のコードが問題で一時的に発生するXSS
・リクエストに含まれるスクリプトがレスポンスにそのまま
含まれるために、クライアント側で発生するXSS
・リクエストの一部がそのまま返って来ることから、
反射型(Reflected) XSSと呼ばれる
19
①
②
③発火
Slide 20
Slide 20 text
記事の検索機能に絞って考える
20
ブラウザ
Webサーバ
データベース
GET /?title=print()
カラム名 型
id int
title string
body string
postsテーブル
↑クライアントサイド
↓サーバサイド
Slide 21
Slide 21 text
記事の検索機能に絞って考える
21
ブラウザ
Webサーバ
データベース
SELECT * FROM posts
WHERE title
LIKE ‘%print()%’
カラム名 型
id int
title string
body string
postsテーブル
↑クライアントサイド
↓サーバサイド
Slide 22
Slide 22 text
記事の検索機能に絞って考える
22
ブラウザ
Webサーバ
データベース
[]{}
カラム名 型
id int
title string
body string
postsテーブル
↑クライアントサイド
↓サーバサイド
XSS(Stored)
28
Webフロント
(ブラウザ)
Webサーバ
データベース
GET /?title=
カラム名 型
id int
title string
body string
postsテーブル
↑クライアントサイド
↓サーバサイド
Slide 29
Slide 29 text
XSS(Stored)
29
Webフロント
(ブラウザ)
Webサーバ
データベース
SELECT * FROM posts
WHERE title LIKE ‘%%’ カラム名 型
id int
title string
body string
postsテーブル
↑クライアントサイド
↓サーバサイド
Slide 30
Slide 30 text
XSS(Stored)
30
Webフロント
(ブラウザ)
Webサーバ
データベース
[]{3, “print()”, “...”}, ...}
カラム名 型
id int
title string
body string
postsテーブル
↑クライアントサイド
↓サーバサイド