【网络安全】DVWA Weak Session IDs(弱会话)详析

本文深入探讨了DVWA平台上的弱会话ID攻击,详细分析了不同级别的会话ID生成机制,包括基于递增、时间戳及哈希的生成方法,并提供了攻击姿势与防御策略。

【精选优质专栏推荐】


每个专栏均配有案例与图文讲解,循序渐进,适合新手与进阶学习者,欢迎订阅。

原创文章,禁止转载。

会话ID及弱会话ID

会话 ID(Session ID)是用于标识用户与服务器之间会话的唯一标识符。它通常在用户身份验证成功后由服务器生成,并通过 Cookie 或其他方式存储在客户端。会话 ID 在整个会话期间用于验证用户身份和维护会话状态。

弱会话 ID(Weak Session ID)指的是具有可预测性、易猜测或容易被攻击者破解的会话 ID。这意味着攻击者可以通过猜测会话 ID 的值或使用可预测的模式,获取合法用户的会话标识并冒充该用户。

Low level

在这里插入图片描述

源代码

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

逻辑如下:

1.如果当前请求的请求方法为 POST($_SERVER[‘REQUEST_METHOD’] == “POST”),则执行以下操作:
2.检查是否存在名为 $_SESSION[‘last_session_id’] 的会话变量。如果不存在,则将其初始化为 0。
3.将 $_SESSION[‘last_session_id’] 的值加 1。
4.将加 1 后的值赋给变量 $cookie_value。
5.使用 setcookie() 函数设置名为 dvwaSession 的 Cookie,并将其值设置为 $cookie_value。

步骤

思路:在请求头中找到会话ID,进行POST即可实现登录。

在这里插入图片描述

如上图,Cookie为:dvwaSession=22; security=low; PHPSESSID=ginokgirpbmi0nb4k1j6dg81fg

接着清除浏览器中该页面缓存,重新打开浏览器使用hackbar进行execute

如下图,输入URL及Cookie:

在这里插入图片描述

成功登录:

在这里插入图片描述

也可使用Burp抓包获取Cookie:

在这里插入图片描述

代码中使用的会话 ID 是通过递增的方式生成的,这种生成方式容易被攻击者猜测或推测出合法的会话标识,从而增加会话劫持攻击的风险。

Medium level

源代码

<?php

$html = "";

if ($_SERVER['REQUEST_METHOD'] == "POST") {
    $cookie_value = time();
    setcookie("dvwaSession", $cookie_value);
}
?>

首先,定义了一个空字符串变量 $html

然后,通过检查 $_SERVER[‘REQUEST_METHOD’] 的值是否为 “POST”,判断当前请求的方法是否为 POST 方法。

如果当前请求方法为 POST,将会执行以下操作:

  1. 通过 time() 函数生成一个时间戳作为 Cookie 的值,并将其赋给变量 $cookie_value。

  2. 使用名为 “dvwaSession” 的 Cookie 名称,将变量 $cookie_value 的值设置为 Cookie 的值。

步骤

由代码审计可知,该登录模块基于时间戳生成会话

具体姿势如下:

1.抓包得到时间戳

在这里插入图片描述
发送至repeater并发包:

在这里插入图片描述

得到时间戳:1686834151

2.使用转换工具进行时间戳转换:

在这里插入图片描述

这里的潜在风险在于:

1.如果攻击者能够预测受害者在特定时间点进行点击,攻击者可以在该时间点进行会话劫持攻击。通过在特定时间点之前获取 Cookie 的值,并在该时间点之后使用 Cookie 进行会话劫持,攻击者可以获得未经授权的访问权限。

2.某些应用程序可能会根据 Cookie 中的时间戳执行特定的操作或授予特定的权限。攻击者可以利用时间戳漏洞,通过在特定时间点操纵 Cookie 的值来触发计时攻击。

例如,在某个特定时间点之后,攻击者可能会获得更高级别的权限或执行特定的恶意操作。

High level

源代码

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

?> 

1.首先,定义了一个空字符串变量 $html

2.然后,通过检查 $_SERVER[‘REQUEST_METHOD’] 的值是否为 “POST”,判断当前请求的方法是否为 POST 方法。

3.如果当前请求方法为 POST,将会执行以下操作:

  • 首先,通过检查 $_SESSION['last_session_id_high'] 是否已设置来判断上一次会话高位 ID 的值。

  • 如果 $_SESSION['last_session_id_high'] 未设置,则将其赋值为 0。

  • 接着,将 $_SESSION['last_session_id_high'] 的值递增 1,并将结果赋给 $cookie_value

  • 使用 md5 函数对 $cookie_value 进行处理,并将结果赋给 $cookie_value

  • 使用名为 “dvwaSession” 的 Cookie 名称,将 $cookie_value 的值设置为 Cookie 的值。

  • 设置 Cookie 的过期时间为当前时间加上 3600 秒(1 小时),路径为 “/vulnerabilities/weak_id/”,域名为 $_SERVER['HTTP_HOST'] 的值,禁用安全标志和 HTTPOnly 标志。

步骤

思路:抓包后将Cookie进行md5解密,再构造Cookie进行md5加密,即可实现会话劫持

1.抓包获取Cookie

在这里插入图片描述
发送至Repeater并发包:

在这里插入图片描述

2.解密Cookie

在这里插入图片描述

3.构造Cookie并进行加密

由于$cookie_value以1为间隔递增,故可获得经md5加密后得到的Cookie

在这里插入图片描述

Impossible level

源代码

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

采用了 mt_rand() 函数生成随机数,结合当前时间和固定字符串 “Impossible”,然后使用 sha1 函数对其进行哈希处理。

通过使用更复杂的生成算法,可以增加攻击者猜测和劫持会话的难度。启用安全标志和 HTTPOnly 标志能够增加 Cookie 的安全性,使其更难以被窃取或篡改。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋说

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值