一步一步学习DVWA渗透测试(Weak Session IDs脆弱的Session)-第十一次课

(CSDN 发文章时,拷贝文章中的图时,基本上每次都出错,需要一张一张拷贝进来。CSDN难道不能解决这个问题吗?)

当用户登录后,在服务器就会创建一个会话(session),叫做会话控制,接着访问页面的时候就不用登录,只需要携带session去访问。sessionID作为特定用户访问站点所需要的唯一内容。如果能够计算或轻易猜到该sessionID,则攻击者将可以轻易获取访问权限,无需登录直接进入特定用户界面,进而进行其他操作。

用户访问服务器的时候,在服务器端会创建一个新的会话(Session),会话中会保存用户的状态和相关信息,用于标识用户。服务器端维护所有在线用户的Session,此时的认证,只需要知道是哪个用户在浏览当前的页面即可。为了告诉服务器应该使用哪一个Session,浏览器需要把当前用户持有的SessionID告知服务器。用户拿到session id就会加密后保存到 cookies 上,之后只要cookies随着http请求发送服务器,服务器就知道你是谁了。SessionID一旦在生命周期内被窃取,就等同于账户失窃。

Session利用的实质 :

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

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

  1. Low级别

使用Burp抓包如下图:

 

再次单击【genertate】按钮,产生session如下:

 

对比两次产生的dvwaSession可以看到,后面一次是在原来数值基础上加1。

<?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,否则就在上次session ID基础上加1.这样是非常脆弱的设置session方法,很容易被利用。

 

使用旧版本的hackbar ,2.1.3版本(新版本收费,且经过我使用免费7天的license没有成功)

HackBar2.1.3版本下载地址

github下载地址:https://github.com/Mr-xn/hackbar2.1.3

手工安装HackBar2.1.3

首先:打开firefox的附加组件;其次:再点 "从文件安装附加组件";最后再打开“{4c98c9c7-fc13-4622-b08a-a18923469c1c}.xpi”添加扩展即可!

Burp抓包截图如下:

 

把上面cookie一行拷贝到Hackbar(Firefox中按F12弹出)的选择Cookie后的下面编辑框中,上面输入登录成功到的地址http://192.168.92.129/DVWA/vulnerabilities/weak_id/,单击【Execute】,则上面firefox会刷新,进入到想要的页面。成功。

 

  1. Medium级别

源代码如下:

<?php 

$html 
""

if (
$_SERVER['REQUEST_METHOD'] == "POST") { 
    
$cookie_value sha1(mt_rand() . time() . "Impossible"); 
    
setcookie("dvwaSession"$cookie_valuetime()+3600"/vulnerabilities/weak_id/"$_SERVER['HTTP_HOST'], truetrue);

?>

 

 

上面的Session明显是时间戳,对照源代码验证了这一点。

 

通过Hackbar中,把session的时间戳调整到现在时间,则单击【Execute】,则可以登录成功,进入到我在IE浏览器中的状态。

 

(我改用IE浏览器,主要因为在Chrome中无法设置为Medium级别)

 

https://tool.lu/timestamp/  时间戳在线查询工具。

  1. 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_valuetime()+3600"/vulnerabilities/weak_id/"$_SERVER['HTTP_HOST'], falsefalse);
}

?>

 

单击【Generate】按钮,产生session

 

在Firefox中的Hackbar中构造报文

 

单击【Execute】但是无法登录。对照源代码,源代码中使用MD5计算session,但是抓取的报文中的不是md5编码的session,暂时没找到原因。

 

 

4、Impossible级别

源代码如下:


$html "";

if ($_SERVER['REQUEST_METHOD'] == "POST") {
    $cookie_value sha1(mt_rand() . time() . "Impossible");
    setcookie("dvwaSession"$cookie_valuetime()+3600"/vulnerabilities/weak_id/"$_SERVER['HTTP_HOST'], truetrue);
}
?>

 

不可能级别使用随机数+时间戳+固定字符串("Impossible")进行 sha1 运算,作为 session Id,完全就不能猜测到。

(结束)

关注安全  关注作者

 

发布了309 篇原创文章 · 获赞 31 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/manok/article/details/104435926