会话劫持和会话固定漏洞
会话劫持
会话劫持(Session hijacking),是一种通过获取用户 Session ID 后,使用该 Session ID 登录目标账号的攻击方法。
受害者登录站点,服务器返回一个会话标识(Session ID)
黑客捕获这个Session ID( 网络嗅探,XSS ),使用这个Session ID访问站点获得受害者合法会话
修复方案
会话劫持的第一步是取得一个合法的会话标识来伪装成合法用户,因此需要保证会话标识不被泄漏。
1、XSS漏洞引起的会话劫持:使用http-only来防止JS获取cookie中的Session ID信息
2、网络嗅探引起的会话劫持:使用HTTPS+secure来保证Session ID不被嗅探获取到
Session机制
Session机制是一种服务端的机制,服务器使用一种类似于散列表的结构来保存信息用于保持状态。
保存这个Session ID最为方便的方式是采用Cookie。Cookie的名字都是类似于SESSIONID;
Weblogic对于web应用程序生成的cookie,JSESSIONID;
PHP中Session的默认名称是PHPSESSID。
HttpOnly 设置方法
服务端发送cookie的时候,可以设置HTTP-Only ,禁止 JS 获取Cookie内容
Set-Cookie: SESSIONID=abc123;HttpOnly;Secure
设置Secure为True时, 此cookie只有在HTTPS协议中才会进行传输,HTTP协议传输时,是不传输此协议的
会话固定
会话固定(Session fixation)是一种诱骗受害者使用攻击者指定的会话标识(Session ID)的攻击手段。这是攻击者获取合法会话标识的最简单的方法。
会话固定也可以看成是会话劫持的一种类型,原因是会话固定的攻击的主要目的同样是获得目标用户的合法会话。
漏洞成因
- 访问网站时,网站会设置cookie中的Session ID
- 当用户登录后,cookie中的SessionID保持不变(形成原因)
- 只要获取登陆前的Session ID内容,就可以知道登陆后的Session ID
- 黑客用该Session ID构造链接,发送给受害者点击后,黑客成功劫持受害者的会话
修复方案
1、在用户登录成功后重新创建一个Session ID,使登录前的匿名会话强制失效
2、SessionID与浏览器绑定:SessionID与所访问浏览器有变化,立即重置
3、SessionID与所访问的IP绑定:SessionID与所访问IP有变化,立即重置
漏洞验证
1)访问网站(未登录):获取cookie信息,获取Session ID
2)登录网站:查看Cookie信息,获取Session ID
3)查看登录前,登录后SessionID是否相同(相同即存在此漏洞)