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发给客户端。

相关推荐
腾讯TNTWeb前端团队5 小时前
helux v5 发布了,像pinia一样优雅地管理你的react状态吧
前端·javascript·react.js
范文杰8 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪9 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪9 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy9 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom10 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom10 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom10 小时前
React与Next.js:基础知识及应用场景
前端·面试·github
uhakadotcom10 小时前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试
uhakadotcom10 小时前
Node.js 包管理器:npm vs pnpm
前端·javascript·面试