DVWA-弱会话ID

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

如果没有变量$_SESSION['last_session_id'],则变量值设置为0,变量值加1;如果有变量$_SESSION['last_session_id'],则变量值加1。然后向用户发送名为dvwaSession,值为$_SESSION['last_session_id']的HTTP cookie。也就是说,名为dvwaSession的cookie的值从1开始每按一次Generate按钮递增1。setcookie()函数的作用是向客户端发送一个 HTTP cookie。

火狐浏览器 :点击“检查-存储-Cookie”

 

 使用BP进行抓包(浏览器关掉从新打开)

 点击Generate,BP进行抓包

 再次点击

 由此推断,Cookie是从1开始每按一次Generate递增1。

 

 二,Medium

源码分析:

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

time()函数返回自 Unix 纪元(January 1 1970 00:00:00 GMT)起的当前时间的秒数。

本关代码在用户按下Generate按钮之后,返回等于当前时间戳的dvwaSession值作为cookie

 

 使用时间戳转换工具进行转换

 三,Hight

源码分析:

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

?> 

这关dvwaSession的值也是从1开始递增,并经过md5加密的。

除此之外,从代码中可见,这关setcookie()函数的参数很多,我们来一个一个看一下。

setcookie():

setcookie ( string $name , string $value = "" , int $expires = 0 , string $path = "" , string $domain = "" , bool $secure = false , bool $httponly = false ) : bool

name:

cookie名称。这里是"dvwaSession"。

value:

cookie值,存储于用户电脑。这里是$cookie_value。

expires:

Cookie的过期时间。如果设置成零,或者忽略参数, Cookie 会在会话结束时过期(也就是关掉浏览器时)。这里是time()+3600,表示1小时后过期。

path:

Cookie 有效的服务器路径。 设置成 '/' 时,Cookie 对整个域名 domain 有效。 如果设置成 '/foo/', Cookie 仅仅对 domain 中 /foo/ 目录及其子目录有效(比如 /foo/bar/)。 默认值是设置 Cookie 时的当前目录。这里是"/dvwa/vulnerabilities/weak_id/"。

domain:

Cookie 的有效域名/子域名。 设置成子域名(例如 'www.example.com'),会使 Cookie 对这个子域名和它的三级域名有效(例如 w2.www.example.com)。 要让 Cookie 对整个域名有效(包括它的全部子域名),只要设置成域名就可以了(这个例子里是 'example.com')。这里是$_SERVER['HTTP_HOST']。

secure:

设置这个 Cookie 是否仅仅通过安全的 HTTPS 连接传给客户端。这里是false,也就是说可以通过http传递cookie给客户端。

httponly:

设置成 true时,Cookie 仅可通过 HTTP 协议访问,无法通过类似 JavaScript 这样的脚本语言访问。可有效减少 XSS 攻击时的身份窃取行为。这里是false,也就是可以通过脚本语言访问cookie。

 

 

 

 

 

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

cookie值计算采用的是SHA-1散列函数,并且计算时还通过mt_rand()函数,在基于时间(time()函数)的基础上引入了随机数,因此不具备可预测性。除此之外,setcookie()函数的secure参数和httponly参数在本关都是true,增加了cookie的安全性。

 

 由于设置了secure,因此该cookie仅可通过https传输,因此本关中客户端并没有收到服务器发来的cookie

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值