XSSによる攻撃(その2)

引き続きJarlsbergの問題を解く。

問題3. Stored XSS

調査

3問目は「Now find a stored XSS. What we want to do is put a script in a place where Jarlsberg will serve it back to another user.」。他のユーザーが閲覧できるような場所に、攻撃用スクリプトを埋め込むことができるか。

まずは他のユーザーでの動作確認のため、golem-xiv以外にユーザーを作成することにする。「honest-annie」というユーザーを作る*1

その後、golem-xivでログイン。スクリプトを埋め込める場所を探す。HomeのSnippetsに注目してみる。ほかのユーザーのコメントが表示されているらしい。

f:id:GOLEM-XIV:20100526011109p:image

ということで、自分もSnippetsを作成してみる。その際に、cookieを表示するスクリプトを埋め込んでみる・・・ ん?コメントを見ると、使用できるタグに制限があるようだ。ということは、そのまま埋め込めなさそう。単純に埋め込むと、エスケープされてしまう。Snippetsの画面には、Homepageのリンクも表示されているので、問題2と同じ方法も使えるが、それも芸が無いなぁ。

f:id:GOLEM-XIV:20100526011111p:image

タグのエスケープ処理が正しくないのでは?ということでいろいろ試してみる。

  • 単純に scriptタグを使用すると、script→blockedと変換されるようだ。
  • inputタグも、同様にblockedに変換される (inputのonclickを使用できないか、と考えたので。)
  • aタグは・・・いけた! onclickは・・・だめだ、blockedに変換される。
  • じゃあ、他のイベントはどうだ? おお、onMouseDownはブロックされない!(Firefox 3.6.3)
脆弱性の確認

ということで、以下のとおり、Snippetsを登録。

f:id:GOLEM-XIV:20100526011112p:image

honnest-annieでログインし、Home画面に表示されている、登録したSnippetsのリンクをクリックすると、cookieの値が表示される。

f:id:GOLEM-XIV:20100526011113p:image

解決方法

正しいエスケープ処理が必要なんだけど、特定タグは通したいと。後で追記予定。

*1:スタニスワフ・レムの作品「GOLEM XIV」からいただきました

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です