(OWASP汉化)攻击系列大全(五十六):会话固定


最新版本 (mm/dd/yy):08/14/2014

翻译自Session fixation

漏洞描述

会话固定是一种允许攻击者劫持有效用户会话的攻击。该攻击探讨了Web应用程序管理会话ID的方式的局限性,更具体地说,是脆弱的易受攻击的Web应用管理方式。在对用户进行身份验证时,它不会分配一个新的会话ID,这使得能够使用一个现有的会话ID进行攻击。攻击包括获取一个有效的会话ID(例如通过连接到应用程序),诱使用户使用该会话ID进行身份验证,然后根据使用的会话ID对用户验证会话进行劫持。攻击者必须提供一个合法的Web应用程序会话ID,并试图让受害者的浏览器使用它。

会话固定攻击是一类在用户登录后窃取客户端和Web服务器之间已建立的会话的会话劫持。然而,攻击者会在受害者的浏览器上预先固定一个已建立的会话,因此会话固定攻击在用户登录之前就开始了。

有几种技术来执行攻击,这取决于Web应用程序如何处理会话令牌。以下是一些最常见的技术:

URL参数中的会话令牌:会话ID在超链接中发送给受害者,受害者使用恶意URL访问站点。

隐藏表单字段中的会话标记:在该方法中,必须使用针对攻击者开发的登录表单来欺骗受害者以在目标Web服务器中进行身份验证。表单可以托管在恶意的Web服务器中或直接隐藏在HTML格式的电子邮件中。

Cookie中的会话ID

  • 客户端脚本
    大多数浏览器支持执行客户端脚本。在这种情况下,攻击者可以把使用代码注入攻击XSS(跨站点脚本)插入恶意攻击代码和固定在cookie的会话ID的链接发送给受害者。浏览器利用函数执行命令document.cookie,能够固定cookie里面的值,它将用于保持客户端和Web应用程序之间的会话。

  • 标签
    标签也被认为是一种代码注入攻击,然而,不同于XSS攻击,不需要的脚本可以被禁用或拒绝执行。使用此方法让攻击变得更加高效,因为不可能在浏览器中禁用对这些标记的处理。

  • HTTP标头响应
    此方法会勘察固定在受害者浏览器的会话ID,包括在HTTP标头响应中的参数Set-Cookie,攻击者能够在Cookie中插入会话ID的值并将其发送给受害者的浏览器。

示例1

下面的例子解释了一个简单的表单,攻击的过程,以及预期的结果。

(1)攻击者必须与Web服务器建立合法连接,(2)Web服务器发出会话ID,攻击者可以用所提供的会话ID创建新会话,(3)然后攻击者必须将已建立会话ID的链接发送给受害者,受害者必须点击从攻击者访问网站发送的链接。(4)Web服务器看到会话已经建立所以不需要创建新的会话,(5)受害者向Web服务器提供证书,(6)知道会话ID后,攻击者可以访问用户的帐户。

示例2

客户端脚本

在受害者浏览器中使用脚本执行攻击的过程与示例1非常类似,但是,在这种情况下,会话ID不会显示为URL的参数,而是显示在Cookie内。为了固定受害者的cookie中会话ID的值,攻击者可以在URL中插入一个JavaScript代码,该代码将在受害者的浏览器中执行。
http://website.kom/document.cookie=”sessionid=abcd”;

示例3

标签

与客户端脚本一样,代码注入必须插入在将发送给受害者的URL中。
http://website.kon/

示例4

HTTP标头响应

将会话ID的值插入操纵服务器响应的cookie中,可以拦截在客户端和插入了Set-Cookie参数的Web应用程序之间交换的数据包。


图2.HTTP标头响应中的Set-Cookie

相关的威胁代理

相关的攻击方式

相关漏洞

相关防御措施

参考