前提
- kali linux環境がある
- DVWAのセットアップ済み
- 初級レベル理解済み
目標
- 脆弱性の理解を深める。
手順概要
- 挙動を把握する
- コードを見て脆弱性を理解する
内容
###挙動の把握
low
- generateした結果を以下に示す。
- 容易に推測できる。。。
session:1
session:2
session:3
etc...
medium
- generateした結果を以下に示す。
- 取り合えず増えていることは分かる。
- なんか見覚えある数字感だったのでjsでDate.now()してみた
- 1584113931674。。。オワタ
session:1584112966
session:1584112969
session:1584112974
etc...
high
- generateした結果を以下に示す。
- やっと暗号化された。
- 暗号と言えばMD5なので逆変換してみる
- 1,2,3...
- 一般人が変換できるMD5はもはや暗号ではない。。
session:c4ca4238a0b923820dcc509a6f75849b
session:c81e728d9d4c2f636f067f89cc14862c
session:eccbc87e4b5ce2fe28308fd9f2a7baf3
etc...
コードを確認
low
<?php
if (!isset ($_SESSION['last_session_id'])) {
$_SESSION['last_session_id'] = 0;
}
$_SESSION['last_session_id']++;
$cookie_value = $_SESSION['last_session_id'];
?>
medium
<?php
$cookie_value = time();
setcookie("dvwaSession", $cookie_value);
?>
high
<?php
if (!isset ($_SESSION['last_session_id_high'])) {
$_SESSION['last_session_id_high'] = 0;
}
$_SESSION['last_session_id_high']++;
$cookie_value = md5($_SESSION['last_session_id_high']);
?>
impossible
- sha1はMd5の4倍の長さがある暗号キー。とはいえ逆変換ツールはあるので完全ではない
- この場合、mt_rand()の全パターンを1秒間隔で送り込めば解読も不可能ではないが、一般人の悪ガキは諦めてくれるセキュリティはある
- 後、setcookieのsecureを有効にしている
<?php
$cookie_value = sha1(mt_rand() . time() . "Impossible");
setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], true, true);
?>