大约
了解会话 ID 通常是在登录后以特定用户身份访问站点所需的唯一内容,如果能够计算或轻松猜测该会话 ID,则攻击者将有一种简单的方法来访问用户帐户,而无需暴力破解密码或查找其他漏洞,例如跨站点脚本。
目的
该模块使用四种不同的方法来设置 dvwaSession cookie 值,每个级别的目标是弄清楚 ID 是如何生成的,然后推断其他系统用户的 ID。
low level
cookie 值应该非常明显地可预测。
源码解析:
这段代码是PHP语言编写的,用于在用户访问网站时创建和设置一个名为dvwaSession的cookie。当用户访问网站时,选择的请求方法是“POST”,代码会检查是否已经设置了一个名为“last_session_id”的会话变量,如果没有,则设置成0。然后,代码会自增last_session_id的值,并将它赋值给cookie。最后,通过使用PHP内置函数setcookie()设置cookie。
注:代码中使用的SESSION及COOKIE需要在之前的代码中进行声明或初始化。
每次点击generate,会获取当前的session,并将其值加1,这种方式明显不安全。
中级
该值看起来比低值更随机,但如果您收集一些,您应该开始看到一种模式。可见,源码为获取用户操作时的时间来作为dvwaSession。
<?php
$html = "";
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$cookie_value = time();
setcookie("dvwaSession", $cookie_value);
}
?>
源码解析:当用户访问网站时,选择的请求方法是“POST”,代码将使用PHP内置函数time()获得系统当前时间戳,并将其赋值给cookie。最后,通过使用PHP内置函数setcookie()设置cookie。
高水平
首先确定值的格式,然后尝试找出用作生成值的输入的内容。
Cookie 中还添加了额外的标志,这不会影响挑战,但突出显示了可以添加的额外保护以保护 Cookie。
<?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);
}
?>
解析:代码将首先检查是否已经设置了一个名为“last_session_id_high”的会话变量,如果没有,则将其设置为0。然后,代码会自增last_session_id_high的值,并将其通过使用MD5算法处理后赋值给cookie。
通过使用setcookie()函数设置cookie时,该函数允许传递多个参数:
1. 第一个参数是cookie的名称“dvwaSession”。
2. 第二个参数是cookie的值,即通过 MD5 处理后的last_session_id_high的值。
3. 第三个参数是cookie的过期时间,该参数值为当前时间增加1小时,即time()+3600。
4. 第四个参数是cookie作用路径,“/vulnerabilities/weak_id/”表示只对当前网址下/vulnerabilities/weak_id/目录下的网页有效,其他网页无效。
5. 第五个参数是cookie作用域,指定可以访问该cookie的主机名,通过使用$_SERVER['HTTP_HOST']获取当前主机名。
6. 第六个参数是一个可选的布尔值,如果设置为true,则表示将cookie仅通过HTTPS协议发送。
7. 第七个参数是一个可选的布尔值,如果设置为true,则表示将cookie标记为仅通过HTTP协议发送,即无法通过JavaScript访问该cookie。
不可能的水平
在此级别,cookie 值不应可预测,但请随时尝试。
除了额外的标志外,cookie 还与域和挑战路径相关联。
<?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);
}
?>
解析:
这段代码是PHP语言编写的,用于在用户访问网站时创建和设置一个名为dvwaSession的cookie。当用户访问网站时,选择的请求方法是“POST”,代码将使用PHP内置函数mt_rand()生成一个随机整数,并与当前时间戳和字符串"Impossible"混合并处理。然后,使用SHA1算法处理该值,并将结果将其赋值给cookie。
通过使用setcookie()函数设置cookie时,该函数允许传递多个参数:
1. 第一个参数是cookie的名称“dvwaSession”。
2. 第二个参数是cookie的值,即使用SHA1算法处理的随机值。
3. 第三个参数是cookie的过期时间,该参数值为当前时间增加1小时,即time()+3600。
4. 第四个参数是cookie作用路径,“/vulnerabilities/weak_id/”表示只对当前网址下/vulnerabilities/weak_id/目录下的网页有效,其他网页无效。
5. 第五个参数是cookie作用域,指定可以访问该cookie的主机名,通过使用$_SERVER['HTTP_HOST']获取当前主机名。
6. 第六个参数是一个可选的布尔值,如果设置为“true”,则表示将cookie仅通过HTTPS协议传输。
7. 第七个参数是一个可选的布尔值,如果设置为“true”,则表示将cookie标记为仅通过HTTP协议发送,即无法通过JavaScript访问该cookie。
注:代码中使用的COOKIE需要在之前的代码中进行声明或初始化。