会话固定

会话固定(Session fixation)是一种诱骗受害者使用攻击者指定的会话标识(SessionID)的攻击手段。这是攻击者获取合法会话标识的最简单的方法。会话固定也可以看成是会话劫持的一种类型,原因是会话固定的攻击的主要目的同样是获得目标用户的合法会话,不过会话固定还可以是强迫受害者使用攻击者设定的一个有效会话,以此来获得用户的敏感信息。

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

** 攻击者重置SessionID的方式:**

重置Session ID的方法同样也有多种,可以是跨站脚本攻击,如果是URL传递Session ID,还可以通过诱导的方式重置该参数,比如可以通过邮件的方式诱导用户去点击重置Session ID的URL,使用Cookie传递可以避免这种攻击。

使用Cookie来存放Session ID,攻击者可以在以下三种可用的方法中选择一种来重置Session ID。

  • 1、 使用客户端脚本来设置Cookie到浏览器。大多数浏览器都支持用客户端脚本来设置Cookie的,例如document.cookie=”sessionid=123”,这种方式可以采用跨站脚本攻击来达到目的。防御方式可以是设置HttpOnly属性,但有少数低版本浏览器存在漏洞,即使设置了HttpOnly,也可以重写Cookie。所以还需要加其他方式的校验,如User-Agent验证,Token校验等同样有效。
<script type='text/javascript'>document.cookie='PHPSESSID=ba9saokf601jodg9nt0ui29bq5'</script>
  • 2、 使用HTML的标签加Set-Cookie属性。服务器可以靠在返回的HTML文档中增加标签来设置Cookie。例如<meta http-equiv=Set-Cookiecontent=”sessionid=123”>,与客户端脚本相比,对标签的处理目前还不能被浏览器禁止。
<meta http-equiv='Set-Cookie' content='PHPSESSID=ba9saokf601jodg9nt0ui29bq5'>
  • 3、 使用Set-Cookie的HTTP响应头部设置Cookie。攻击者可以使用一些方法在Web服务器的响应中加入Set-Cookie的HTTP响应头部。如会话收养,闯入目标服务器所在域的任一主机,或者是攻击用户的DNS服务器。

  • 4、如果是URL中传递的(基本上没有了)可以直接:

http://URL/index.php?PHPSESSID=ba9saokf601jodg9nt0ui29bq5

这里还有一点需要注意,攻击者如果持有的是有效的SessionID,那么防御措施就一定得校验验证。如攻击者可以先到目标站点登录,获得有效的Session ID,然后再拿这个Session ID去重置目标用户的会话标识,那么这时候用户将会在不知情的情况下访问攻击者设定的合法会话(实际上登录的是攻击者的账号了)中,从而攻击者将有可能获取到目标用户的敏感信息。
** 防御方法:**

   1、 用户登录时生成新的Session ID。如果攻击者使用的会话标识符不是有效的,那么这种方式将会非常有效。如果不是有效的会话标识符,服务器将会要求用户重新登录。如果攻击者使用的是有效的Session ID,那么还可以通过校验的方式来避免攻击。
   2、 大部分防止会话劫持的方法对会话固定攻击同样有效。如设置HttpOnly,关闭透明化Session ID,User-Agent验证,Token校验等。

参考:https://www.jianshu.com/p/7a576569ca40

posted @ 2020-01-16 14:53  mrhonest  阅读(1957)  评论(0编辑  收藏  举报