DVWA Weak Session IDs 弱会话ID – 作者:wakemeup

Weak Session IDs 弱会话ID

Cookie是保存在客户端浏览器中的,Session是保存在服务器中的。如果Session过于简单就容易被人伪造,根本不需要知道用户的密码就能登录服务器了
当用户登录后,在服务器就会创建一个会话(session),叫做会话控制,接着访问页面的时候就不用登录,只需要携带Sesion去访问。
sessionID作为特定用户访问站点所需要的唯一内容。如果能够计算或轻易猜到该sessionID,则攻击者将可以轻易获取访问权限,无需录直接进入特定用户界面,进而进行其他操作。
用户访问服务器的时候,在服务器端会创建一个新的会话(Session),会话中会保存用户的状态和相关信息,用于标识用户。服务器端维护所有在线用户的Session,此时的认证,只需要知道是哪个用户在浏览当前的页面即可。为了告诉服务器应该使用哪一个Session,浏览器需要把当前用户持有的SessionID告知服务器。用户拿到session id就会加密后保存到 cookies 上,之后只要cookies随着http请求发送服务器,服务器就知道你是谁了。SessionID一旦在生命周期内被窃取,就等同于账户失窃。
Session利用的实质 :
由于SessionID是用户登录之后才持有的唯一认证凭证,因此黑客不需要再攻击登陆过程(比如密码),就可以轻易获取访问权限,无需登录密码直接进入特定用户界面, 进而查找其他漏洞如XSS、文件上传等等。
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,然后将其作为session存入cookie

获取网址和cookie即可绕过登录

容易发现session的规律,填入网址和session即可绕过用户登录访问

抓包:
image.png
重放观察一下:
image.png

可以看到dvwaSesion的cookie,每重放一次,dvwaSesion增加一

Medium:

查看源码:

<?php

$html = "";

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

源码分析:
​采用时间戳来作为session

关于时间戳转换,直接查找转换器进行转换即可
发现session规律,通过在线时间戳生成,即可伪造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);
}

?>

源码分析:
​将session值+1,再进行一次MD5加密,并给一个有效时限
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协议访问。

可以根据特征判断出是MD5,找到session生成规律伪造session

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

源码分析:
随机数+时间戳+特定字符,再加上有效期,难以找到规律伪造session

防护总结:

验证请求头中的数据,比如验证User-Agent的变化

增加token校验

利用get.post.cookie等不同的传输方式来传递sessionid和token等增加攻击者获取难度

利用多种组合再加上有效期使攻击者难以找到规律来伪造session

来源:freebuf.com 2021-06-27 21:48:27 by: wakemeup

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论