• 会话固定攻击(session fixation attack)


    什么是会话固定攻击?

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

    会话固定也是会话劫持的一种类型。会话劫持是攻击者偷走受害者与服务器建立链接的会话,而会话固定是攻击者事先建立一个会话,然后诱使受害者使用此会话进行登录,如图10-7所示。

    看下面Session Fixation攻击的一个简单例子:

    整个攻击流程是:

    1、攻击者Attacker以一个合法的用户身份登录www.website.com。

    2、服务器与攻击者Attacker建立了一个会话,sessionid为1234567(这里只是一个示例,大家不要在乎sessionid的位数对不对)。应用网站服务器返回一个会话ID给他;

    3、攻击者Attacker用该会话ID构造了一个URL:http://www.website.com/login.jsp?sessionid=1234567,发给了受害者Alice

    4- 受害者Victim点击该链接,进行了登录;

    5、受害者Victim输入她的合法用户名和密码,正常登录了该网站,会话成功建立(注意,由于此时的sessionid预先已经被Bob设置为1234567了);

    6、攻击者Attacker用该会话ID成功冒充并劫持了受害者Victim的会话,这时攻击者Attacker如果输入http://www.website.com/viewprofile.jsp?sessionid=1234567,就可以看到受害者Victim的个人信息(profile)了,因此sessionid此时就是代表了Victim;

    更多攻击例子参考:https://owasp.org/www-community/attacks/Session_fixation

    一般来说,会话固定可以通过下面几种方式实现。

    (1)在URL中注入Session ID,这是最简单的一种方式,当然也最容易被检测到。

    (2)用隐藏的表单字节。攻击者可以构造一个很像登录方式的登录表单并设定Session ID,然后诱惑用户登录。

    (3)通过跨站脚本用客户端脚本来设定Cookie,如攻击者可以构造一个链接如下:http://www.buybook.com/viewprofile.jsp?p=30

    (4)通过跨站脚本用标签进行设定,如攻击者可以构造一个链接如下:http://www. buybook.com/viewprofile.jsp?p=30

    会话ID(SID):由服务器产生并返回给浏览器的请求,并且在浏览器中存储(通常来说是Cookie),它用来标识浏览器与服务器会话的唯一值。

    攻击分析

    攻击的整个过程,会话ID是没变过的,所以导致此漏洞。

    攻击修复

    1、登录重建会话

    每次登录后都重置会话ID,并生成一个新的会话ID,这样攻击者就无法用自己的会话ID来劫持会话,核心代码如下。

    2、禁用客户端访问Cookie

    此方法也避免了配合XSS攻击来获取Cookie中的会话信息以达成会话固定攻击。在Http响应头中启用HttpOnly属性,或者在tomcat容器中配置。

  • 相关阅读:
    Django 框架
    Git 教程
    Vue详解
    pycharm激活码
    通过元类创建一个Python类
    re模块
    selenium模块
    Beautifulsoup模块基础详解
    requests库
    Urllib库
  • 原文地址:https://www.cnblogs.com/echojson/p/12805102.html
Copyright © 2020-2023  润新知