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);
}

?>

参阅