会话固定漏洞
什么是会话?
Session会话机制是一种服务端机制,它使用类似于哈希表的结构来保存信息。当程序需要为客户端的请求创建会话时,服务端首先检查客户端的请求是否包含会话标识符(成为会话ID)。如果包含它,它先前已为此客户端创建了一个会话,服务器根据会话ID检索会话(无法检索,将创建新会话)。如果客户端请求不包含ID,则为客户端创建会话并生成会话关联的会话ID。SessionID应该是一个既不重复也不容易被复制的字符串,会话ID将返回给客户端以保存此响应。
常见会话问题
会话预测
会话预测即预测应用程序的身份验证模式的会话ID值。通过分析和理解会话ID生成的过程,攻击者可以预测有效的会话ID值,并获得对应用程序的访问权限。
会话劫持
会话劫持即通过利用各种手段获取用户SessionID后,使用该SessionID登陆网站,获取目标用户的操作权限。
会话重用
会话重用即用户退出系统后,服务器端Session未失效,攻击者可利用此Session向服务器继续发送服务请求。
测试方法:登陆后将会话注销,再次重放登陆时的数据包仍然可以正常登陆系统
会话失效时间过长
会话失效时间过长,会导致应用系统服务器性能受损,且过长的失效时间会导致可以被多次利用。
测试方法:系统登陆后会话长时间不失效,使用系统功能,仍可以正常使用。
会话固定
会话固定即在用户进入登陆页面但还未登陆时,就已经产生了一个Session,用户输入信息登陆以后,Session的ID不会改变,也就是说没有建立新Session,原来的Session也没有被销毁。攻击者事先访问系统并建立一个会话,诱使受害者使用此会话登陆系统,然后攻击者再使用该会话访问系统即可登陆受害者的账户。
测试方法:系统登陆前和登陆后,用户的Session保持不变。
危害
攻击者利用漏洞绕过身份验证提升权限。
防御
- 服务器端再Set-Cookie中的Cookie值后面加一段防篡改的验证串,然后再发送到客户端
- 用户退出系统后,服务器端应清空此用户的Session信息
- 服务器端设置Session的存活时间,超过存活时间强制销毁Session
- 在用户提供的认证信息(如用户名和密码)、相应的权限级别发生变化时,服务器端应重新生成SessionID,并强制失效之前的会话。