DVWA靶场通关----(9) Weak Session IDs教程
Weak Session IDs(弱会话)
Weak Session IDs(弱会话),用户访问服务器的时候,一般服务器都会分配一个身份证 session id 给用户,用于标识。用户拿到 session id 后就会保存到 cookies 上,之后只要拿着 cookies 再访问服务器,服务器就知道你是谁了。
但是 session id 过于简单就会容易被人伪造。根本都不需要知道用户的密码就能访问,用户服务器的内容了。
Weak Session IDs主题:
Low
源码解析
<?php $html = ""; if ($_SERVER['REQUEST_METHOD'] == "POST") { if (!isset ($_SESSION['last_session_id'])) { $_SESSION['last_session_id'] = 0; } //服务器每次生成的session_id加1给客户端 $_SESSION['last_session_id']++; $cookie_value = $_SESSION['last_session_id']; setcookie("dvwaSession", $cookie_value); } ?>
漏洞复现
如果用户 SESSION 中的 last_session_id 不存在就设为 0,生成 cookie 时就在 cookies 上 dvwaSessionId + 1。
(1)直接点击Generate按钮,使用BP抓包

将抓到的cookie复制下来:
dvwaSession=2; PHPSESSID=i8aj4o8au3kndm9lulddfd0ds7; security=low
(2)在重新打开一个页面,将刚才复制下来的cookie粘贴到上面,就可以实现直接登录了,不用输入用户密码(在这要先清除一下浏览器的cookie值)

Medium
源码解析
<?php $html = ""; if ($_SERVER['REQUEST_METHOD'] == "POST") { $cookie_value = time(); //返回当前时间的 Unix 时间戳,并格式化为日期: time() 函数返回自 Unix 纪元(January 1 1970 00:00:00 GMT)起的当前时间的秒数 setcookie("dvwaSession", $cookie_value); } ?>
漏洞复现
在这里是通过时间戳来生成的session,可以通过时间戳转换工具生成时间戳:https://tool.lu/timestamp/
具体方法和Low一样

High
源码解析
<?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(name,value,expire,path,domain,secure,httponly) 参数 描述 name 必需。规定cookie的名称。 value 必需。规定cookie的值。 expire 可选。规定cookie的有效期。 path 可选。规定cookie的服务器路径。 domain 可选。规定cookie的域名。 secure 可选。规定是否通过安全的HTTPS连接来传输cookie。 httponly 可选。规定是否Cookie仅可通过HTTP协议访问。 setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], false, false); } ?>
漏洞复现
(1)发现session ID,这种使用Md5解密进行尝试,发现是一个2,猜测可能是Low级别上进行Md5加密。

Impossible
源码解析
<?php $html = ""; if ($_SERVER['REQUEST_METHOD'] == "POST") { //随机数+时间戳+固定字符串"Impossible",再进行sha1运算 $cookie_value = sha1(mt_rand() . time() . "Impossible"); setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], true, true); } ?>
漏洞复现
$cookie_value采用随机数+时间戳+固定字符串"Impossible",再进行sha1运算,完全不能猜测到dvwaSession的值。

浙公网安备 33010602011771号