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

在登录服务器之后,服务器会返回给用户一个会话(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 只对当前目录生效

posted @ 2022-05-31 19:46  Junglezt  阅读(210)  评论(0编辑  收藏  举报