DVWA靶场实战(九)——Weak Session IDS

打印 上一主题 下一主题

主题 628|帖子 628|积分 1884

DVWA靶场实战(九)

九、Weak Session IDS:

1.漏洞原理:

  Weak Session IDS也叫做弱会话,当用户登录后,在服务器就会创造一个会话(session),叫做会话控制,接着访问页面的时候就不用登录,只需要携带Session去访问。
  SessionID作为特定用户访问站站点所需要的唯一内容。如果能够计算或轻易猜到该sessionID,则攻击者将可以轻易的获取访问控制权,无需登录直接进入特定用户界面,进而进行其他操作。
  用户访问服务器的时候,在服务器端会创造一个新的会话(session),会话中会保存用户的状态和相关信息,用于标识用户。
  服务器端维护所有在线用户的session,此时认证,只需要知道哪个是用户在浏览器当前的页面即可。为了告诉服务器应该用一个session,浏览器需要把当前用户持有的SessionID告知服务器。用户拿到SessionID就会加密保存到cookie上,之后只要cookies随着http请求发送服务器,服务器就知道你是谁了。SessionID一旦在生命周期内被窃取,就相当于用户失窃。
2.Session:

Session利用的实质:由于SessionID是用户登录之后才持有的唯一认证凭证,因此黑客不需要再攻击登录过程(比如密码),就可以轻易获取访问权限,无需登录密码就可以直接进入特定用户界面,进而查找其他漏洞如XSS、文件上传等。
Session劫持:就是一种通过窃取用户SessionID,使用该SessionID登录进目标账户的攻击方法,此时攻击者实际上是使用了目标账户有效的Session。如果SessionID是保在Cookie中的,则这种攻击可以称为Cookie劫持。SessionID还可以保存在URL中,作为一个请求的一个参数,但是这种方式的安全性难以经受考验。
3.攻击步骤:

(1)目标用户需要先登录站点;
(2)登录成功后,该用户会得到站点提供的一个会话标识SessionID;
(3)攻击者通过某种攻击手段捕获SessionID;
(4)攻击者通过捕获到的SessionID访问站点即可获得目标用户合法会话。
4.获取Session的几种方法:

(1)暴力破解:尝试各种SessionID,直到破解为止;
(2)预测:如果SessionID使用非随机的方式产生,那么就有可能计算出来。
(3)窃取:使用网络嗅探,XSS攻击等方式获取。
5.防御方式:

(1)更改Session名称:PHP中Session的默认名称是PHPSESSID,此变量会保存在Cookie中,如果攻击者不分析站点,就不能猜到Session名称,阻挡部分攻击。
(2)关闭透明化SessionID:透明化SessionID指当浏览器中的HTTP请求没有使用Cookie来存放SessionID时,SessionID则使用URL来传递。
(3)设置HttpOnly通过设置Cookie的HttpOnly为true,可以防止客户端访问这个Cookie,从而有效的防止XSS攻击。
(4)关闭所有的phpinfo类dump request信息的页面。
(5)使用User-Agent检测请求的一致性:但有专家警告不要依赖于检查User-Agent的一致性。这里是因为服务器群集中的HTTP的代理服务器会对User-Agent进行编辑,而本群集中的多个代理服务器在编辑该值时可能会不一致。
(6)加入Token校验:同样是用于检测请求的一致性,给攻击者制造一些麻烦,使攻击者即使获取了SessionID,也无法进行破坏,减少对系统造成的损失。但Token需要存放在客户端,如果攻击者有办法获取到SessionID,那么也同样可以获取到Token。
6.实战:

(1)Low:

  代码分析:
  1. [/code]  看代码low级别还是没有什么防护。
  2.   开始进行攻击,我们打开BurpSuite,我们开始发包然后进行尝试。
  3. [align=center][img]https://img2023.cnblogs.com/blog/2982868/202301/2982868-20230122223308089-1452509777.png[/img]                [/align]
  4. [align=center]  我们这里可以看见Cookie这一栏,“Cookie: PHPSESSID=1fa3jls5mq9ok54q3l4j44u0q1; security=low”,重新打开一个没有Cookie的账户,复制进去就可以登入。[/align]
  5. [size=4](2)Medium:[/size]
  6.   代码分析:
  7. [code]<?php
  8. $html = "";
  9. if ($_SERVER['REQUEST_METHOD'] == "POST") {
  10.     $cookie_value = time();
  11.     setcookie("dvwaSession", $cookie_value);
  12. }
  13. ?><?php
  14. $html = "";
  15. if ($_SERVER['REQUEST_METHOD'] == "POST") {
  16.     if (!isset ($_SESSION['last_session_id_high'])) {
  17.         $_SESSION['last_session_id_high'] = 0;
  18.     }
  19.     $_SESSION['last_session_id_high']++;
  20.     $cookie_value = md5($_SESSION['last_session_id_high']);
  21.     setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], false, false);
  22. }
  23. ?><?php
  24. $html = "";
  25. if ($_SERVER['REQUEST_METHOD'] == "POST") {
  26.     $cookie_value = sha1(mt_rand() . time() . "Impossible");
  27.     setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], true, true);
  28. }
  29. ?> 
复制代码
  我们看这个级别的代码,可以知道这里是通过时间戳来生成session的,所以我们这里利用时间戳转换器来转换就可以了。
  我们开始攻击,这里提供一个时间戳转换器的网址:https://tool.lu/timestamp/
  与Low等级相同,我们找到Cookie,然后截包将时间戳,修改为现在就可以攻击成功了。<?php

$html = "";

if ($_SERVER['REQUEST_METHOD'] == "POST") {
    $cookie_value = time();
    setcookie("dvwaSession", $cookie_value);
}
?><?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);
}

?><?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);
}
?> 
(3)High:

  代码分析:
  1. <?php
  2. $html = "";
  3. if ($_SERVER['REQUEST_METHOD'] == "POST") {
  4.     $cookie_value = time();
  5.     setcookie("dvwaSession", $cookie_value);
  6. }
  7. ?><?php
  8. $html = "";
  9. if ($_SERVER['REQUEST_METHOD'] == "POST") {
  10.     if (!isset ($_SESSION['last_session_id_high'])) {
  11.         $_SESSION['last_session_id_high'] = 0;
  12.     }
  13.     $_SESSION['last_session_id_high']++;
  14.     $cookie_value = md5($_SESSION['last_session_id_high']);
  15.     setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], false, false);
  16. }
  17. ?><?php
  18. $html = "";
  19. if ($_SERVER['REQUEST_METHOD'] == "POST") {
  20.     $cookie_value = sha1(mt_rand() . time() . "Impossible");
  21.     setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], true, true);
  22. }
  23. ?> 
复制代码
  这里我们可以看见使用了md5进行了加密。
  所以我们这里开始攻击,使用md5解密,发现从零开始的整数进行加密,设置拆解后构造的SessionID,可以直接免密登录。
(4)Impossible:

  代码分析:
  1. <?php
  2. $html = "";
  3. if ($_SERVER['REQUEST_METHOD'] == "POST") {
  4.     $cookie_value = time();
  5.     setcookie("dvwaSession", $cookie_value);
  6. }
  7. ?><?php
  8. $html = "";
  9. if ($_SERVER['REQUEST_METHOD'] == "POST") {
  10.     if (!isset ($_SESSION['last_session_id_high'])) {
  11.         $_SESSION['last_session_id_high'] = 0;
  12.     }
  13.     $_SESSION['last_session_id_high']++;
  14.     $cookie_value = md5($_SESSION['last_session_id_high']);
  15.     setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], false, false);
  16. }
  17. ?><?php
  18. $html = "";
  19. if ($_SERVER['REQUEST_METHOD'] == "POST") {
  20.     $cookie_value = sha1(mt_rand() . time() . "Impossible");
  21.     setcookie("dvwaSession", $cookie_value, time()+3600, "/vulnerabilities/weak_id/", $_SERVER['HTTP_HOST'], true, true);
  22. }
  23. ?> 
复制代码
  我们这里查看代码SessionID作为起始值。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

前进之路

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表