前提
- kali linux環境がある
- DVWAのセットアップ済み
- 初級レベル理解済み
目標
- 脆弱性の理解を深める。
手順概要
- 大まかな挙動を把握する
- コードを見て脆弱性をみつける
- コードの脆弱性を攻撃する
内容
###挙動の把握
- ボタンを押すとPOSTリクエストが飛ぶ
- 文字列がDBに保存され、下部に転写される
コードを確認
low
- 入力値がそのまま格納される。
<?php
$name = trim( $_POST[ 'txtName' ] );
?>
medium
- str_replace(a,b,c)は、cの中にaが入っていればbに置換する
- 今回の場合、
<script>
が入っていれば、"空"へ置換される
<?php
$name = trim( $_POST[ 'txtName' ] );
$name = str_replace( '<script>', '', $name );
?>
high
- mediumロジックは同じ
- ここでは正規表現を使ってさらに厳格にチェックしている。
<?php
$name = trim( $_POST[ 'txtName' ] );
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $name );
?>
impossible
- htmlspecialcharsはhtmlにとっての特殊文字をエスケープさせるので、タグの入力がエスケープされる。
<?php
$name = stripslashes( $name );
name = htmlspecialchars( $name );
?>
脆弱性を攻撃する
nameに入力するが、htmlで文字制限かかっているので、maxlengthを増やせば入力可能になる。
low
- 防御無しのため、ストレートに攻撃する。
<script>alert("low")</script>
- 見づらいがscriptが埋め込まれている(下図)
medium
- 制限されているのは
<script>
という文字列だけなので一部変更すれば突破できる <script >alert("medium")</script >
- messageはエスケープされている。
high
- mediumみたいに空白を開けても並びが"script"ならブロックされる。なので、script以外を使う。
<img src="#" onerror=alert("high")>
- messageはエスケープされている。
impossible
- 無理っぽい