Weak Session IDs(弱会话),用户访问服务器的时候,一般服务器都会分配一个身份证 session id 给用户,用于标识。 用户拿到 session id 后就会保存到 cookies 上,之后只要拿着 cookies 再访问服务器,服务器就知道你是谁了。 但是 session id 过于简单就会容易被人伪造。
Session利用的实质 :
由于SessionID是用户登录之后才持有的唯一认证凭证,因此黑客不需要再攻击登陆过程(比如密码),就可以轻易获取访问权限,无需登录密码直接进入特定用户界面, 进而查找其他漏洞如XSS、文件上传等等。
Session劫持 : 就是一种通过窃取用户SessionID,使用该SessionID登录进目标账户的攻击方法,此时攻击者实际上是使用了目标账户的有效Session。如果SessionID是保存在Cookie中的,则这种攻击可以称为Cookie劫持。SessionID还可以保存在URL中,作为一个请求的一个参数,但是这种方式的安全性难以经受考验。
所以,本关的关键就是我们修改了cookie的值,实现免密码登录。
1、级别:Low
<?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);
}
?>
代码分析,last_session_id如果不存在则默认设为0,反之则+1,设置为dvwaSession
利用bp抓包
构造payload:dvwaSession=1; PHPSESSID=n9qd71ocqkjle1rdtbcs5f5be4; security=low
用hackbar在dvwa登录页面提交cookie,就可以成功免密登录了
注意要先清除网站的cookie
再重新打开一个新的空白页访问登陆页面
url设置为:http://127.0.0.1/bachang/DVWA-master/vulnerabilities/weak_id/
cookie:dvwaSession=1; PHPSESSID=n9qd71ocqkjle1rdtbcs5f5be4; security=low
2、级别:Medium
<?php
$html = "";
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$cookie_value = time();
setcookie("dvwaSession", $cookie_value);
}
?>
dvwaSession的值是通过时间戳来形成的,可以使用在线工具生成:时间戳(Unix timestamp)转换工具 - 在线工具
Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
在cookie中添加:dvwaSession=1664951008
方法同low级别一样
成功免密登录
3、级别: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("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], false, false);
}
?>
这里将cookie的值进行了md5计算,并且还设置了期限之类进一步增加,但不足的是进行md5散列的值是0的累加,很容易被猜出规律然后绕过
dvwaSession=a87ff679a2f3e71d9181a67b7542122c,打开md5在线解密破解,md5解密加密解密
再重新发送个包,得到dvwaSession=e4da3b7fbbce2345d7772b0674a318d5,解码
可以看出是递增的,其他步骤和low级别类似,这里不再赘述