レベル 1#
注意深く観察すると、name パラメータの値を変更することで、name の値がページに表示され、値の文字数も表示されることがわかります。
挿入される位置は次のようになります。
<h2><h2/>
したがって、ポップアップウィンドウを作成しようと試みます。
<script>alert('xss')</script>
ポップアップウィンドウが表示されます。
反射型 xss#
レベル 2#
レベル 2 に入り、get パラメータを確認します。
ソースコードを見ると、検索ボックスの内容が get メソッドで level2.php に送信されることがわかります。
サーバーで処理され、パラメータの値が h2 タグに挿入され、input の value 属性にも追加されます。
悪意のあるコードを入力すると、エラーが発生することがわかります。
ウェブページのソースコードを確認すると、h2 の場所にある悪意のあるコードがエンコードされていることがわかります。
サーバーサイドのソースコードを確認すると、
<h2 align=center>没有找到和<script>alert('xss')</script>相关的结果.</h2><center>
<input name=keyword value="<script>alert('xss')</script>">
keyword パラメータがhtmlspecialchars関数で処理されていることがわかります。
観察によると、JavaScript コードはタグの属性内にあるため、属性値内の悪意のあるコードを実行する方法を考える必要があります。
実行するためには、属性内の引用符とタグを閉じる必要があります。
payload:"><script>alert('xss')</script>//
<input name=keyword value=""><script>alert('xss')</script>//
レベル 3#
上記の方法で試してみましたが、成功しませんでした。
ウェブページのソースコードを確認します。
この時点で、h2 と value の値にある悪意のあるコードがエンコードされていることがわかります。おそらく、両方のパラメータにはhtmlspecialchars()
関数が使用されていると思われます。
<h2 align=center>没有找到和"><script>alert('xss')</script>//相关的结果.</h2><center>
<input name=keyword value='"><script>alert('xss')</script>//'>
したがって、onfocus イベントの特殊性を考慮します。
payload:'onfocus=javascript:alert('xss') > //
<input name=keyword value=''onfocus=javascript:alert('xss') >'>
あまり理解していませんが、インターネットで調べてみます。
最も単純な例は、ウェブページ上のテキストボックスです。マウスでテキストボックスをクリックすると、テキストボックスが選択され、内容を入力するときにはフォーカスが当たります。したがって、テキストボックスがフォーカスを受けると、onfocusイベントがトリガーされます。したがって、現在のページのテキストボックスをクリックすると、ポップアップが表示されます。
レベル 4#
簡単に試してみます。
<h2 align=center>没有找到和<script>alert('xss')</script>相关的结果.</h2><center>
<input name=keyword value="scriptalert('xss')/script">
h2 がエンコードされ、value の値 ' <' '> ' が削除されます。
レベル 3 の方法を試してみますが、うまくいきません。
よく考えてみると、レベル 3 とレベル 4 の違いは、value=の後のシングルクォート(')とダブルクォート(")です。