見出し画像

#121 Reflected XSS

 ユーザーが入力できる項目が多いWebサイトは、複雑になりがちで、熟練した開発者でも思わず脆弱性を作り込んだりしてしまいます。Reflected XSS(反射型XSS)はその典型で、気をつけていても、ついやってしまいます。
 反射型XSSとは、ユーザー入力が適切にエスケープされないままレスポンスに含まれることで発生するXSSです。scriptタグなどを埋め込むことによって任意のJavaScriptを実行できるため、セッション情報の窃取やCSRFにつながる可能性がある脆弱性です。
 XSSは比較的発見しやすいので、自動化できないか試してみました。

反射型XSSの検知

HTMLエスケープ

 HTMLの文法で扱われる”(ダブルクオート)<>(小なり、大なり)などは、必ずHTMLエスケープしなければいけません。エスケープされると、それぞれ&quot;&lt;&gt;といった特殊な表現に置き換えられます。逆に言えば、きちんとエスケープされていない箇所を探せば、XSSを検知できます。

タグの要素

 タグの属性(aタグのhrefなど)をシングルクオートで囲ったり、まったく囲わないでもブラウザ上では正しく表示されます。しかし、この場合はXSSに脆弱となります。シングルクオートは通常エスケープされないので、ユーザーの入力値が属性内に埋め込まれた場合、イベント属性などを追加してJavaScriptを発火することができます。例えば、下記のようにするとonclick属性を追加して、クリック時にアラートを出現させることができます。

<a href='/test?search=query'onclick='alert(1)'>Click</a>

これは、正規表現で発見できそうです。


ツールに組み込みました。
まだちゃんとテストしてませんが、PortSwiggerのWeb Security Academyなどで試してみてください!


EOF

この記事が気に入ったらサポートをしてみませんか?