DVWA-Weak Session IDs (弱会话ID)

Session 是作用是它在web服务器上保持用户的状态信息,当前用户访问时,服务器会给每个用户分配一个唯一的session id,当访问其他程序时可以从用户的session中取出该用户的数据来确认用户身份。

Weak Session IDs(弱会话IDs)是由于服务器在生成session的规则简单,导致session在被劫持后,通过该session的身份可绕过登录直接访问服务器。

 

--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);
}
?>

low代码中,通过判断last_session_id是否已设置,如果未设置则将last_session_id置为0,如果已有last_session_id则每次累计+1,然后将session设置为cookie值。

第一次点击【Generate】生成的cookiedvwaSession值如下:

再次点击【Generate】会将该session信息发送服务器,并在服务器端+1,再返回前端。如下:

也就是说下一次访问时将dvwaSession=2;PHPSESSID=9pgg42qeiapkoku6g1pss9fav7; security=low 带入访问http://192.168.52.132/vulnerabilities/weak_id/页面时,可以不用进行登录就能访问该页面信息。

正常情况,在未登录时,直接访问:http://192.168.52.132/vulnerabilities/weak_id/页面,会被重定向到登录页面,但是带上session信息,就可以正常访问weak_id页面。

未登录访问的情况:

用另一个浏览器访问:http://192.168.52.132/vulnerabilities/weak_id/页面,burp suite 将请求拦截,然后将cookie信息修改dvwaSession=2

访问成功

 

--medium级别:

服务器端代码:

<?php

$html = "";

if ($_SERVER['REQUEST_METHOD'] == "POST") {
    $cookie_value = time();
    setcookie("dvwaSession", $cookie_value);
}
?>

medium 代码中dvwaSession的值由时间戳的形式生成。

 跟之前操作一样,将请求拦截后,将dvwaSession设置为时间戳格式(在当前时间之后)。

访问成功:

 

--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);
}

?>

high代码中,将cookie中的session信息通过md5加密后再返回。

当前页面中的session信息如下:

 Md5解密内容如下:

解密后发现每次请求也是累计+1,只不过将内容通过md5加密混淆而已。

那也就是说,在访问将dvwaSession中的值累计+1,然后通过md5加密后,在请求就能直接访问weak_id页面

先累计上次返回的session值,然后通过md5加密。

数值通过加密的md5后替换请求头中的dvwaSession的值。

访问成功:

 

--impossible级别:

服务器端代码:

<?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);
}
?>

impossible中通过随机数+时间戳组合内容,然后再通过sha1进行加密,无法猜测session的内容。

 

posted @ 2024-02-21 00:50  西夏一品唐  阅读(155)  评论(0编辑  收藏  举报