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
值中dvwaSession
为1
,这是第一次,复制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 只对当前目录生效
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码