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:

  代码分析:

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

  看代码low级别还是没有什么防护。

  开始进行攻击,我们打开BurpSuite,我们开始发包然后进行尝试。

                

  我们这里可以看见Cookie这一栏,“Cookie: PHPSESSID=1fa3jls5mq9ok54q3l4j44u0q1; security=low”,重新打开一个没有Cookie的账户,复制进去就可以登入。

(2)Medium:

  代码分析:

<?php

$html = "";

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

  我们看这个级别的代码,可以知道这里是通过时间戳来生成session的,所以我们这里利用时间戳转换器来转换就可以了。

  我们开始攻击,这里提供一个时间戳转换器的网址:https://tool.lu/timestamp/

  与Low等级相同,我们找到Cookie,然后截包将时间戳,修改为现在就可以攻击成功了。 

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

  这里我们可以看见使用了md5进行了加密。

  所以我们这里开始攻击,使用md5解密,发现从零开始的整数进行加密,设置拆解后构造的SessionID,可以直接免密登录。

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

  我们这里查看代码SessionID作为起始值。

最新文章

  1. Git典型使用场景
  2. 转js中this指向的简明解答
  3. ACM D的小L
  4. Uncaught TypeError: _react2.default.findDOMNode is not a function
  5. 用scheme语言实现SPFA算法(单源最短路)
  6. 学习记录 Java常见的几种字符集以及对 AscII的了解
  7. Windows服务安装方法
  8. python 2 处理HTTP 请求的包
  9. Oracle 学习笔记(一)Oracle的基本介绍与语法
  10. C++中的重载、覆盖、隐藏
  11. HTML与XHTML差额
  12. 使用(Drawable)资源———ShapeDrawable资源
  13. JVMGC机制
  14. ROS(indigo) 用于机器人控制的图形化编程工具--code_it robot_blockly
  15. 286万QPS!腾讯云TDSQL打造数据库领域的“超音速战机”
  16. C语言之四舍五入
  17. CUDA 例程
  18. 【问题解决:时区】连接MySQL时错误The server time zone value &#39;&#214;&#208;&#185;&#250;&#177;&#234;&#215;&#188;&#202;&#177;&#188;&#228;&#39; is unrecognized or represents more than one time zone
  19. Linux——JDK配置
  20. thinkphp与php共享session

热门文章

  1. 前后端分离项目(十一):实现&quot;删&quot;功能(前后端)
  2. scrapy出现SSL问题 如何解决? &lt;twisted.python.failure.Failure OpenSSL.SSL.Error: [(&#39;SSL routines&#39;, &#39;&#39;, &#39;unsafe legacy renegotiation disabled&#39;)]&gt;
  3. 原生Ajax处理文件流
  4. Java 超新星开源项目 Solon v1.10.10 发布
  5. Burpsuite系列1--自动扫描
  6. 4.mysql-进阶
  7. 为什么标准库的模板变量都是inline的
  8. [Kogel.Subscribe.Mssql]SQL Server增量订阅,数据库变更监听
  9. 2022年鲜为人知的CSS 特性了解起来~
  10. day07 方法重写&amp;super、this、static关键字&amp;JVM的类加载顺序题目