17、XSS——session攻击

文章目录

一、session攻击简介

session对于web应用是最重要,也是最复杂的。对于web应用程序来说,加强安全性的首要原则就是:不要信任来自客户端的数据,一定要进行数据验证以及过滤,才能在程序中使用,再保存到数据层。然而,为了维持来自同一用户的不同请求之间的状态,客户端必须要给服务器端发送一个唯一的身份标识符(session ID)。很显然,这和前面提到的安全原则是矛盾的,但是没有办法,http协议是无状态的,为了维持状态,别无选择。由此可以看出,web应用程序中最脆弱的环节就是session,因为服务器端是通过来自客户端的一个身份标识来认证用户的,所以session是web应用程序中最需要加强安全性的环节。

二、主要攻击方式

基于session的攻击有很多种方式。大部分的手段都是首先通过捕获或固定合法用户的session,然后冒充该用户来访问系统。也就是说,攻击者至少必须要获取到一个有效的session标识符,用于接下来的身份验证。

攻击者至少可以通过以下三种方式来获取一个有效的session标识符:

  • 预测
  • 捕获(劫持)
  • 固定

2.1 预测

原理:会话预测这种方式需要攻击者猜测出系统种使用的有效的session标识符(php中格式为PHPSESSID=1234),类似暴力破解。目前会话预测这种攻击方式基本上不太可能成功。因为:

  • PHP生成随机的session id往往是极其复杂的并且难以被预测
  • PHP生成session字符串无任何规律和顺序

2.2 会话劫持

含义:通过窃取合法用户session ID后,使用该session ID登录目标账户的攻击方法。会话劫持最重要的部分就是取得一个合法的会话标识来伪装成合法用户。

攻击步骤:

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

会话劫持示意图如下:

中间人攻击 (Man-in-the-MiddleAttack,简称"MIMT攻击"):是一种通过窃取或篡改通信物理、逻辑链路间接完成攻击行为的网络攻击方式。攻击者与通信的两端分别创建独立的联系,并交换其所收到的数据,是通信的两端认为它们正通过一个私密的连接与对方直接对话,实际上整个会话都被攻击者完全控制。这个被攻击者控制的通信节点就是所谓的"中间人"。

中间人攻击有两种常见的形式:

  • 基于监听的信息窃取
  • 基于监听的身份冒认
    中间人攻击示意图:

中间人攻击难以防御的原因:

  • 攻击者在窃听时,一般网络连接仍然能正常运行,不会断线,因此很少有人会主动发现;
  • 受害者电脑上不会被安装木马或恶意软件,难以被杀毒软件发现;
  • 攻击者在欺骗网络协议时,虽然会留下蛛丝马迹,但由于网络设备不会保留太多记录,事后难以追踪;
  • 绝大多数的网络协议,仍基于"对方的数据是安全可靠"的假设来运作,这导致攻击者有太多漏洞可以利用进行欺骗网络设备、伪装成中间人。

2.3 会话固定

含义:诱骗受害者使用攻击者指定的会话标识(session ID)的攻击手段。让合法yoghurt使用攻击者预先设置的session ID进行登录,从而使web不再进行生产新的session ID,导致攻击者预先设置的session ID变成了合法桥梁。

会话固定也可以看成会话劫持的一种类型,因为会话固定攻击的主要目的同样是获取目标用户的合法会话,不过会话固定还可以是强迫受害者使用攻击者设定的一个有效会话,以此来获得用户的敏感信息。

攻击步骤:

  1. 攻击者通过某种手段重置目标用户的session ID,然后监听用户会话状态;
  2. 目标用户携带攻击者设定的session ID登录站点;
  3. 攻击者通过session ID获得合法会话。

web接收session ID机制

首先检查携带cookie是否含有session ID;若没有则再检查get、post数据中是否含有,若有则使用此数据;没有才会使系统生成一个session ID发给客户端。

相关推荐
Leyla12 分钟前
【代码重构】好的重构与坏的重构
前端
影子落人间15 分钟前
已解决npm ERR! request to https://registry.npm.taobao.org/@vant%2farea-data failed
前端·npm·node.js
世俗ˊ40 分钟前
CSS入门笔记
前端·css·笔记
子非鱼92140 分钟前
【前端】ES6:Set与Map
前端·javascript·es6
6230_1 小时前
git使用“保姆级”教程1——简介及配置项设置
前端·git·学习·html·web3·学习方法·改行学it
想退休的搬砖人1 小时前
vue选项式写法项目案例(购物车)
前端·javascript·vue.js
加勒比海涛1 小时前
HTML 揭秘:HTML 编码快速入门
前端·html
啥子花道1 小时前
Vue3.4 中 v-model 双向数据绑定新玩法详解
前端·javascript·vue.js
麒麟而非淇淋1 小时前
AJAX 入门 day3
前端·javascript·ajax
茶茶只知道学习2 小时前
通过鼠标移动来调整两个盒子的宽度(响应式)
前端·javascript·css