2019-3-15 dvwa学习(14)--Weak Session IDs

19 篇文章 1 订阅

用户访问服务器的时候,在服务器端会创建一个新的会话(Session),会话中会保存用户的状态和相关信息,用于标识用户。服务器端维护所有在线用户的Session,此时的认证,只需要知道是哪个用户在浏览当前的页面即可。为了告诉服务器应该使用哪一个Session,浏览器需要把当前用户持有的SessionID告知服务器。

用户拿到session id就会加密后保存到 cookies 上,之后只要cookies随着http请求发送服务器,服务器就知道你是谁了。

SessionID一旦在生命周期内被窃取,就等同于账户失窃。同时由于SessionID是用户登录之后才持有的认证凭证,因此黑客不需要再攻击登陆过程(比如密码),就可以轻易获取访问权限,无需登录密码直接进入特定用户界面,进而查找其他漏洞如XSS、文件上传等等。

Session劫持 就是一种通过窃取用户SessionID,使用该SessionID登录进目标账户的攻击方法,此时攻击者实际上是使用了目标账户的有效Session。如果SessionID是保存在Cookie中的,则这种攻击可以称为Cookie劫持。SessionID还可以保存在URL中,作为一个请求的一个参数,但是这种方式的安全性难以经受考验。

看实例
low
界面很简单,点击按钮,就可以生成session id
在这里插入图片描述
只是个简单例子,了解原理。
看一下源码

<?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,然后保存为cookie,名称dvwaSession。
这个和截取的http信息也是完全一致的。
只是说明session id和cookie是怎么回事情,真实环境不可能有人这么干。

medium
继续看代码

<?php

$html = "";

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

cookie的值变成了时间戳。
界面上运行一下,在开发者工具中获得信息如下

Set-Cookie:"dvwaSession=1552628479"

1552628479是UNIX时间戳,转换一下,其实就是2019-03-15 13:41:19。
稍微有点经验的,一眼就能看出来,没有什么秘密可言。

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

?> 

咋一看,和low差不多。只是last_session_id_high用了md5加密。然后cookie设置更加复杂了。
setcookie()函数 http://www.runoob.com/php/func-http-setcookie.html
语法如下

setcookie(name,value,expire,path,domain,secure)

在这里插入图片描述
其实也就是多了一个cookie过期时间,1个小时。
运行界面,观察如下:

Set-Cookie:"dvwaSession=c4ca4238a0b923820dcc509a6f75849b; expires=Fri, 15-Mar-2019 07:20:42 GMT; Max-Age=3600; path=/vulnerabilities/weak_id/; domain=172.25.100.100"

找个在线的网站 https://www.cmd5.com/ 还原一下md5加密的c4ca4238a0b923820dcc509a6f75849b

在这里插入图片描述
只是包装的好看了一点,其实和low是一样的。

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值= sha1(随机数+时间戳+固定字符串“impossbile”)

sha1函数参见http://www.w3school.com.cn/php/func_string_sha1.asp
知道该怎么做才能减少session id被破解了吧。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值