ちっちぇえ画像でXSSとな!?
Beginner Hint1: Admin Botについて
- この問題では、Webアプリ本体とは別に Admin Bot が用意されています。
- Admin Bot はフラグ入りのCookieを持った状態で、指定されたパスを Headless Chrome で開きます。
- そのため、目標は「Admin Bot に自分の用意したペイロードを踏ませて、Cookieの内容を外部へ送らせること」です。
- 送信先は自分でサーバーを立ててもよいですし、HTTPリクエストを受け取って確認できる既存サービスを使っても構いません。
- Admin Bot の使い方や、外部から受信したリクエストの確認方法がまだ曖昧なら、先に Fushigi Crawler を解いてWriteupを読むことをおすすめします。
Beginner Hint2: 問題の概要
POST /api/uploadを使うと、サーバーにファイルをアップロードできます。試しに配布物に含まれているサンプルファイルをアップロードしてみてください。/fileではアップロードしたファイルを閲覧できます。ここではGET /api/file/<file_id>でファイルの内容を取得し、GET /api/filename/<file_id>で元のファイル名を取得しています。
Beginner Hint3: この問題のアプローチ
original_filenameはhtml.escapeでエスケープされているように見えます。これは/api/filename/<file_id>が返す値が、innerHTMLを使ってそのまま HTML に挿入されているためです。- つまり、ファイル名そのものに悪意のある文字列を含めることではXSSを引き起こすことは難しそうです。
- 代わりに、
/fileの中でfile_idがどのように使われているかをよく見て、それをどう悪用できるか考えてみてください。