Weak Session IDs
弱会话 ID
Low
源码解析
从 $_SESSION
中获得 last_session_id
,增加 1 后作为 Cookie 中名称为 dvwaSession
的值。
1 2 3 4 5 6 7 8 9 10 11 12 13
| <?php
$html = "";
if ($_SERVER['REQUEST_METHOD'] == "POST") { if (!isset ($_SESSION['last_session_id'])) { $_SESSION['last_session_id'] = 0; } $_SESSION['last_session_id']++; $cookie_value = $_SESSION['last_session_id']; setcookie("dvwaSession", $cookie_value); } ?>
|
漏洞利用
点击 Generate 生成新的 Cookie ,打开浏览器的开发者工具,可以看到通过 POST 提交后返回 Set-Cookie: dvwaSession=1
,将当前的会话 ID 设置为 1 。
再次点击,更新为 2 ,多次点击后发现规律:会话 ID 每次增加 1。
这里的危害是攻击者可以伪造会话 ID。
参阅
Medium
源码解析
Cookie 值使用时间戳进行设置。
1 2 3 4 5 6 7 8 9
| <?php
$html = "";
if ($_SERVER['REQUEST_METHOD'] == "POST") { $cookie_value = time(); setcookie("dvwaSession", $cookie_value); } ?>
|
漏洞利用
点击生成 Cookie ,将 Set-Cookie
的值转换一下,验证其为时间戳。
参阅
High
源码解析
和 Low 级别类似,每次增加 1 ,但使用 md5
进行散列转换,并设置有效时长为 1h 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?php
$html = "";
if ($_SERVER['REQUEST_METHOD'] == "POST") { 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']); setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], false, false); }
?>
|
漏洞利用
将 Set-Cookie
的值进行 md5 散列解密,得到结果为 1;
重复生成和散列解密可以发现 Generate 的生成每次递增 1 ,并使用 md5 散列。
参阅
Impossioble
源码解析
使用 随机数 + 时间戳 + Impossible
作为 sha1
散列算法的输入,将生成的 40 位字符串作为 Cookie 的值,并设置过期时间为 1h 。
1 2 3 4 5 6 7 8 9 10 11 12
| <?php
$html = "";
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$cookie_value = sha1(mt_rand() . time() . "Impossible");
setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], true, true); }
?>
|
参阅