Session Fixation session固定攻击

参考 https://en.wikipedia.org/wiki/Session_fixation

  • Session Fixation session固定攻击

    • 一、常见攻击场景

      • 1. 场景1 简单的攻击场景
      • 2. 场景2 使用服务器生成的sessionID
      • 3. 场景3 使用跨子域cookie攻击
    • 二、常见防御手段
      • 1. 不从 GET/POST 的变量中接受session的id
      • 2. 每次登录都更改sessionID
      • 3. 每次请求都生成一个session
      • 4. 将sessionID存储区HTTP cookie中
    • 三、总结

一、常见攻击场景

1. 场景1 简单的攻击场景

在这一场景中,假定sessionID是前端生成的。

假设Alice在银行 unsafe.example.com有个账户,Mallory想攻击他的账户。

  • 步骤1:Mallory确定银行 unsafe.example.com接受任何sessionID,并且接受sessionID从URL的查询参数中传过来,并且没有安全检查。
  • 步骤2:Mallory发送一封邮件给Alice,内容是 “嘿,看看这个,我们银行有一个很酷的新账户摘要功能,http://unsafe.example.com/?SID=I_WILL_KNOW_THE_SID”。
  • 步骤3:Alice点击这一链接,然后正常登录,由于链接已经附带了sessionID,服务器不再生成,这时Mallory可以用这一sessionID掌握Alice账号的所有权限。

2. 场景2 使用服务器生成的sessionID

假定sessionID是后端生成,且同样后端接受sessionID从URL的查询参数中传过来,并且没有任何安全检查。银行网站为http://unsafe.example.com/

同样假设Alice在银行 unsafe.example.com有个账户,Mallory想攻击他的账户。

  • 步骤1:Mallory登录银行网站并且登录后获取了一个sid。
  • 步骤2:Mallory发送了一个邮件给Alice,包含了如下链接:“http://unsafe.example.com/?sid=123456”。
  • 步骤3:Alice点击此链接,登录银行网站,由于链接带有固定的sid,服务器不会新生成一个sid,因此Mallory可以使用该sid拥有Alice账号的所有控制权

3. 场景3 使用跨子域cookie攻击

这就像跨站点 cookie,只是它不依赖于浏览器漏洞。相反,它依赖于这样一个事实,即通配符 cookie 可以由影响其他子域的一个子域设置。

  • 步骤1:网站 www.example.com 将子域分发给不受信任的第三方。
  • 步骤2:一个这样的第三方,Mallory,现在控制了evil.example.com,诱惑Alice访问他的网站。
  • 步骤3:对evil.example.com的访问会在Alice的浏览器上创建一个对子域.example.com的session cookie。
  • 步骤4:当Alice访问www.example.com时,这一个cookie将会随着请求被发送。正如cookie的规范所述,Alice将使用Mallory所掌控的evil.example.com的cookie。
  • 步骤5:一旦Alice登录,Mallory将可以使用Alice的账号。

这三个场景最后都可以导致Mallory最后可以获得Alice账号的控制权,同时也可能有一个另外的攻击场景如下:

并不需要Alice登录,Mallory可以监控Alice并滥用Alice输入的数据。例如,Mallory可以通过以上攻击方式给Alice一个Mallory自己的已验证的session,这样Alice将使用Mallory的鉴权信息访问网站。这样一旦Alice决定要买点什么东西并输入了自己的银行卡信息,Mallory就能通过自己账号的历史信息收到这一银行卡信息。

这种类型的session固定利用与“经典”利用场景不同,因为它发生在应用程序的未经身份验证的部分或反转身份验证(攻击者登录受害者)。

二、常见防御手段

1. 不从 GET/POST 的变量中接受session的id

不从GET/POST变量中接受session的id,改为从body中接受。

2. 每次登录都更改sessionID

如果用户每次登录都会改变sessionID,这一攻击就可以很大程度上被避免。当受害者点击了攻击者的带有固定sessionID的链接时会登录,但由于每次登录都会改变sessionID,攻击者无法使用固定session进入受害者的账号。

3. 每次请求都生成一个session

4. 将sessionID存储区HTTP cookie中

三、总结

就目前的系统而言,就笔者了解,一般使用token机制而不使用session,token一般都不会从url参数,甚至不会从header中接受而是从body中接受。

如果系统session将从后端生成并且每次登录都会重新生成,且重大操作有验证码等二次校验,就可以屏蔽掉这一攻击。

Session Fixation session固定攻击相关推荐

  1. 漏洞:会话固定攻击(session fixation attack)

    什么是会话固定攻击? 会话固定攻击(session fixation attack)是利用应用系统在服务器的会话ID固定不变机制,借助他人用相同的会话ID获取认证和授权,然后利用该会话ID劫持他人的会 ...

  2. Tomcat的SessionID引起的Session Fixation和Session Hijacking问题

    上一篇说到<Spring MVC防御CSRF.XSS和SQL注入攻击>,今天说说SessionID带来的漏洞攻击问题.首先,什么是Session Fixation攻击和Session Hi ...

  3. Flask的会话技术:cookie、session以及session持久化问题

    文章目录 一.会话技术 1.介绍 2.详细过程 二.Cookie 1.Cookie介绍 2.Cookie登陆使用 三.Session 1.Session介绍 2.Session登陆使用 3.Sessi ...

  4. hibernate 管理 Session(单独使用session,非spring)

    hibernate 管理 Session(单独使用session,非spring) Hibernate 自身提供了三种管理 Session 对象的方法 Session 对象的生命周期与本地线程绑定 S ...

  5. Django框架(22.Django中设置session以及session对象及方法)

    Session 对于敏感.重要的信息,建议要储在服务器端,不能存储在浏览器中,如用户名.余额.等级.验证码等信息. 在服务器端进行状态保持的方案就是Session. 数据迁移后会在数据库中创建出存储S ...

  6. php session mysql_php session mysql存储

    一直知道逻辑没实际用过,今天试用下! session.gc_divisor   100 session.gc_maxlifetime 1440 session.gc_probability  1 以上 ...

  7. php session支持,SESSION支持

    # SESSION支持 [上一页](# "上一页")[下一页](# "下一页") 系统提供了Session管理和操作的完善支持,全部操作可以通过一个内置的ses ...

  8. PHP session有效期session.gc_maxlifetime

    PHP中的session有效期默认是1440秒(24分钟),也就是说,客户端超过24分钟没有刷新,当前session就会失效.很明显,这是不能满足需要的. 一个已知管用的方法是,使用session_s ...

  9. java 重写session_使用Shiro重写Session 自定义SESSION

    引入shiro的jar包 1.2.3 org.apache.shiro shiro-core ${shiroVersion} org.apache.shiro shiro-web ${shiroVer ...

  10. cookielifetime php_PHP session有效期session.gc_maxlifetime的设置方法

    PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,入门门槛较低,易于学 ...

最新文章

  1. 在内网中使用maven_搭建私有maven仓库并在项目中使用
  2. 因为一条SQL,程序员差点被祭天......
  3. mySQL优化 my.ini 配置说明
  4. JS实现ul,li排序效果
  5. SVN 常用操作命令 使用笔记
  6. SAP UI5不支持delta render
  7. 蓝桥杯 123 二分+打表
  8. 天池 在线编程 停车困境(双指针)
  9. 【ASP.NET】HTTP中的 get 和 post 请求
  10. Flask框架flash消息闪现学习与优化符合闪现之名#华为云·寻找黑马程序员#
  11. 新浪微博开放平台开发步骤简介(适合新手看)
  12. org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: connec
  13. PHP之道 - php各方面的知识汇总
  14. Android App开发实战项目之模仿美图秀秀的抠图工具(附源码和演示视频 简单易懂 可直接使用)
  15. 连载-第1章绪论 1.1嵌入式系统概述
  16. Vue packages version mismatch: - vue@2.6.12 (C:\Users\Administrator\WebstormProjects\memorial\node_m
  17. 医疗大数据的分析和挖掘发展现状如何?
  18. 真的是会者不难,难者不会啊!
  19. 广东职称计算机考试模块要求,广东职称计算机考试实施办法粤人发[2002]81号
  20. MVC 模型-视图-控制器

热门文章

  1. SEO优化的四个建议
  2. Hi3516A开发--板卡烧写
  3. Python数据可视化Part 5-Matplotlib 3D图片与投影教学-代码详解
  4. 开启 Kerberos 安全的大数据环境中,Yarn Container 启动失败导致作业失败
  5. 【软件相关】EverythingSumatraPDF的一个小bug
  6. Android系统之路(初识MTK) ------ make update-api长按Power键添加Reboot项/内置默认Ringtone/SMS/Notification/Alarm删除系统铃声
  7. spring中 @EnableXXX 注解的实现
  8. ABB 机械臂的部分代码
  9. HTMLdiv标签滑条
  10. pandas 案例积累(一)—— 基础应用