用户登录之后,服务端会创建一个session,里面存储用户的状态和相关信息。而为了缓和客户端的存储压力,客户端只存储一个session_id,一般session_id放在cookie中。
如果session_id被劫持,黑客可以使用其登录直接登录到目标账户。
题目有点没看懂
拿High Level举例,只拿到PHPSESSID就可以绕过登录,读取SESSION数组的last_session_id_high,并使其++。
先分析下session_id的生成机制。
Low
观察后端代码,如果检测到session_id没设置的话新建session_id,如果session_id设置了则对session_id++.
<?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);
}
?>
我们burp抓包后,拿到cookie,之后把浏览器cookie删掉。
打开新的界面用hackbar填上拿到的cookie,直接访问weak_id路径,发现绕过了登陆界面。
Medium
观察后端代码,session用的是时间戳,也没有任何加密,很容易伪造。
<?php
$html = "";
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$cookie_value = time();
setcookie("dvwaSession", $cookie_value);
}
?>
High
观察后端代码,session_id的生成在Low的基础上加了md5,并且设置了过期时间,有效域名等。
这里涉及到了session_id的路径/vulnerabilities/weak_id/,自己注意下自己的网站路径和源码里是否一样,如果不同的话,浏览器访问自的路径的话拿不到session_id。
<?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);
}
?>
Impossible
观察后端代码,生成cookie的方式是使用sha1加密,结合随机数、当前时间和一个固定字符串。
<?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);
}
?>
标签:SESSION,last,Session,Weak,IDs,value,session,cookie,id
From: https://blog.csdn.net/weixin_45436292/article/details/139299095