【精选优质专栏推荐】
- 《AI 技术前沿》 —— 紧跟 AI 最新趋势与应用
- 《网络安全新手快速入门(附漏洞挖掘案例)》 —— 零基础安全入门必看
- 《BurpSuite 入门教程(附实战图文)》 —— 渗透测试必备工具详解
- 《网安渗透工具使用教程(全)》 —— 一站式工具手册
- 《CTF 新手入门实战教程》 —— 从题目讲解到实战技巧
- 《前后端项目开发(新手必知必会)》 —— 实战驱动快速上手
每个专栏均配有案例与图文讲解,循序渐进,适合新手与进阶学习者,欢迎订阅。
原创文章,禁止转载。
会话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,将会执行以下操作:
-
通过 time() 函数生成一个时间戳作为 Cookie 的值,并将其赋给变量 $cookie_value。
-
使用名为 “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 的安全性,使其更难以被窃取或篡改。
本文深入探讨了DVWA平台上的弱会话ID攻击,详细分析了不同级别的会话ID生成机制,包括基于递增、时间戳及哈希的生成方法,并提供了攻击姿势与防御策略。
908

被折叠的 条评论
为什么被折叠?



