DVWA-Weak Session IDs(弱会话ID) 不安全的会话

2023-04-24,,

在登录服务器之后,服务器会返回给用户一个会话(session),这个会话只会存在一段时间,拥有这个会话下次登录就不用输入密码就可以登录到网站,如果返回的这个会话很弱,容易被猜解到,就很不安全,照成会话劫持,直接登录到被劫持的用户,照成很大的隐患,类似于cookie劫持。

LOW

审计源码

<?php

$html = "";
// 获取页面使用的请求方法
if ($_SERVER['REQUEST_METHOD'] == "POST") {
// 判断是否存在 last_session_id
/// isset 判断变量是否为空 ,为空返回 true
if (!isset ($_SESSION['last_session_id'])) {
//
$_SESSION['last_session_id'] = 0;
}
// 每次请求 last_session_id 值 + 1
$_SESSION['last_session_id']++;
$cookie_value = $_SESSION['last_session_id'];
// 将last_session_id的值 发送到 cookie 中,cookie名称为 dvwaSession
setcookie("dvwaSession", $cookie_value);
}
?>

可以看出每请求一次,会话的值会加一,非常的容易猜测,只需要写一个脚本一直循环last_session_id的值就可以绕过

如何利用,和XSS盗取cookie的操作是一样的

首先使用Edge登录到DVWA服务器,设置级别为LOW

点击Weak Session IDs中的Generate(生成会话)并使用burpsuite进行抓包

在第一次发包中,并没有看到dvwaSession值得传递,点击Forward放包再次进行抓包

抓取到cookie值中dvwaSession1,这是第一次,复制cookie值和Web Session IDs页面的url

然后打开firefox,打开HackBar,将url粘贴到地址栏,将复制的cookie粘贴到cookie值中

点击提交后可以看到,不需要输入密码直接登录成功

Medium

审计源码


<?php $html = "";
// 判断传参的方式
if ($_SERVER['REQUEST_METHOD'] == "POST") {
// 设置 cookie的值为 当前时间戳
$cookie_value = time();
// fanhui cookie 值名称为 dvwaSession
setcookie("dvwaSession", $cookie_value);
}
?>

这里也很简单,将当前获取了当前的时间戳作为了会话的值

network中查看

值为1653998231,使用网站查看

时间戳(Unix timestamp)转换工具 - 在线工具

所以还是很容易破解

High

审计源码


<?php $html = "";
// 判断传输的类型
if ($_SERVER['REQUEST_METHOD'] == "POST") {
if (!isset ($_SESSION['last_session_id_high'])) {
$_SESSION['last_session_id_high'] = 0;
}
// 每次 last_session_id_high 值加一
$_SESSION['last_session_id_high']++;
// 使用 md5 加密 last_session_id_high 值
$cookie_value = md5($_SESSION['last_session_id_high']);
// 设置 cookie 的名称为 dvwaSession ,值为md5加密的 last_session_id_high 值,过期时间为 3600
// 对这个会话有用的目录为 /vulnerabilities/weak_id/ , 设置有效的域名为请求头中Host值对应的IP地址
// 后面第一个 false 代表不是安全连接也生成 cookie,最后一个 false 为只能通过 http 协议访问,不能通过 javascript 跳转之类的访问
setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], false, false);
} ?>

使用了md5加密了每次last_session_id_high的值,但是依然无法改变每次加一的规律

所以只需将数字使用md5加密,循环的方式跑脚本,依然可以破解

获取会话查看md5值

使用cmd5.com解密查看值

Impossible

审计源码


<?php $html = "";
// 判断传参的方法
if ($_SERVER['REQUEST_METHOD'] == "POST") {
// 生成随机数,获取当前时间戳,加上Impossible 并使用 sha1加密
// mt_rang() 生成更好的随机数
// time() 生成当前时间戳
$cookie_value = sha1(mt_rand() . time() . "Impossible");
// 生成cookie,并且必须是当前目录,必须是安全连接,是能使用 http 协议访问
setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], true, true);
}
?>

首先生成 随机数 + 当前时间错 + Impossible ,然后使用 sha1 加密这段字符,生成 cookie 必须是安全 https 安全连接,并且只能通过 http 协议访问才生成 cookie,并且这个 cookie 只对当前目录生效

DVWA-Weak Session IDs(弱会话ID) 不安全的会话的相关教程结束。

《DVWA-Weak Session IDs(弱会话ID) 不安全的会话.doc》

下载本文的Word格式文档,以方便收藏与打印。