PHP代码审计DVWA[Weak Session IDs(弱会话IDS)

在这里插入图片描述

Weak Session IDs(弱会话IDS)

靶场搭建推荐蓝易云服务器

😘😘😘😘😘😘点击查看详情

Weak Session IDs:密码与证书等认证手段,一般仅仅用于登录(Login)的过程。

当登陆完成后,用户访问网站的页面,不可能每次浏览器请求页面时都再使用密码认证一次。因此,当认证完成后。就需要替换一个对用户透明的凭证。这个凭证就是SessionID。

当用户登陆完成后,在服务器端就会创建一个新的会话(Session),会话中会保存用户的状态和相关信息。服务器端维护所有在线用户的Session,此时的认证,只需要知道是哪个用户在浏览当前的页面即可。

为了告诉服务器应该使用哪一个Session,浏览器需要把当前用户持有的SessionID告知服务器。SessionID一旦在生命周期内被窃取,就等同于账户失窃。同时由于SessionID是用户登录之后才持有的认证凭证,因此黑客不需要再攻击登陆过程(比如密码)。

Session利用的实质 :由于SessionID是用户登录之后才持有的唯一认证凭证,因此黑客不需要再攻击登陆过程(比如密码),就可以轻易获取访问权

限,无需登录密码直接进入特定用户界面, 进而查找其他漏洞如XSS、文件上传等等。

Session劫持 : 就是一种通过窃取用户SessionID,使用该SessionID登录进目标账户的攻击方法,此时攻击者实际上是使用

了目标账户的有效Session。如果SessionID是保存在Cookie中的,则这种攻击可以称为Cookie劫持。SessionID还可以保存

在URL中,作为一个请求的一个参数,但是这种方式的安全性难以经受考验。

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的值首先有一个判断函数!isset(),如果没有这个设置,则设置将第一次的session_id设置为0,而后1,2,3…n的累加。然后将这个值使用setcookie()函数,将这个值发送到浏览器端作为浏览器端的cookie。
这样有规律的session,只要通过推到,就能找出最新的session,然后直接绕过账号密码来进行连接seesion。

我们抓一下数据包

在这里插入图片描述

我们再刷新一次

会发现

在这里插入图片描述

这个变成了2

每刷一次+1

那么我们可以很简单的猜测出,dvwaSession参数下一个是这次的参数+1。

我们试试用

所以我们使用火狐浏览器的hackbar,构造Payload如下:

Cookie: dvwaSession=10; PHPSESSID=bka9pr82vked08q6cpeaj307l0; security=low

在这里插入图片描述

发现火狐浏览器没有登录过DVWA,但通过这个session,我们却绕过了输入账号密码的过程,直接登录进来。

Medium

代码分析

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

从服务器端的代码来看,将SessionID的值改成了当前的时间戳,看起来比low的随机了点,但是经过连续的收集后就很容易发现其中的规律:

在这里插入图片描述

时间戳 | 时间戳转换 | Unix timestamp (shijianchuo.net)

在这里插入图片描述

这样,我们就可以尝试构造payload

dvwaSession=1661148962; security=medium; PHPSESSID=ec6je5dg4j3ik84l9pk7pk7lk1

在火狐浏览器使用hackbar进行提交尝试。
我们发现,在这个没有进行过账号密码登录认证的浏览器上,使用cookie直接绕过了身份认证过程,进入了后面的界面

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

这里,我们可以看见。首先使用!isset()函数对session变量进行检查,如果没有进行赋值。

则设置为0,然后每一次都递增1。
然后将session变量进行MD5加密后赋值为cookie_value变量。
最终,将 cookie_value这个值发送给浏览器作为cookie。
这里进行哈希加密处理,但初始的值始终是从0开始这种形式作为cookie。在抓包的时候虽然md5加密后的值不容易发现其规律,但若是通过一定的思考,将0,1,2…n进行md5加密后再与cookie碰撞,依旧可以发现其中的规律。猜测出cookie的值,然后重复low级别的步骤,即可成功绕过。这里的操作除了需要将初始值进行md5加密,其他操作与low级别一样。

high级别使用了PHP setcookie()函数,来设置cookie:

setcookie(name,value,expire,path,domain,secure,httponly)
 参数 	             描述
name 	    必需。规定cookie的名称。
value 	    必需。规定cookie的值。
expire   	可选。规定cookie的有效期。
path 	    可选。规定cookie的服务器路径。
domain 	    可选。规定cookie的域名。
secure 	    可选。规定是否通过安全的HTTPS连接来传输cookie。
httponly 	可选。规定是否Cookie仅可通过HTTP协议访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无聊的知识

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值