在学习计算机网络时,我们知道HTTP是无状态的协议, 为了维持和跟踪用户的状态, 引入了Cookie和Session。Cookie中保存了当前用户的登录凭证,Cookie丢失,往往意味着用户的登录凭证丢失,换句话说,攻击者可以不通过密码,而直接登录用户的账户。
有一个很形象的例子说明两者之间的关系, Cookie是钥匙, Session是锁芯.一般登录用户请求页面的时候,浏览器会带上服务器颁发的凭证cookie,凭着这个凭证(钥匙),找到服务器里存着对应的session数据,一判断session里有用户信息(说明钥匙和锁芯匹配),于是根据用户信息返回相关数据。登录功能就是这样实现的。如果钥匙被别人拿了, 那别人就可以冒充你的身份, 去打开你的锁芯, 从而获取你的信息, 这是非常危险的。
目录
cookie劫持
原理:这是一种通过获取用户Session ID后,使用该Session ID登录目标账号的攻击方法,此时攻击者实际上是使用了目标账户的有效Session。
攻击者一般是诱导用户执行一个远程脚本, 从该远程脚本中将cookie传给服务器,从而盗取用户cookie。之后再利用盗取的cookie登录目标用户的账号。在2004版的《白帽子讲安全》中有介绍这样一个实验例子,我自己尝试了很久,一直没有实现,现在只把书中记录的该实验流程记录下来
- 在firefox中访问用户的百度空间,登录后可以查看到cookie,并将该cookie记录下来
- 打开ie,访问同一个页面,此时在ie中,用户是未登录状态
- 将当前ie中的cookie替换成firefox中记录的cookie,并重新发送这个包
- 此时ie中的用户进入登录状态
cookie的httponly可以防止“cookie劫持”
固定会话攻击
原理:会话固定(Session fixation)是一种诱骗受害者使用攻击者指定的会话标识(SessionID)的攻击手段。假设A有一辆汽车,A把汽车卖给了B,但是A并没有把所有的要是都给B,自己还藏了一把,如果B不换锁的话,A就可以继续非法使用这辆汽车了。
攻击前提:登录前后session-id不变
例子:Mallory是攻击者,Alice是受害者。Mallory先自己访问下某网站,获取自己的session ID,然后把这个sessionID拼接在网址后面发给Alice访问,只要那Alice一登录, Mallory也就相当于登录了
1.Mallory访问 http://unsafe/ 并获得了一个会话ID(SID),例如服务器返回的形式是:Set-Cookie: SID=0D6441FEA4496C2
2.Mallory给Alice发了一个邮件:”我行推出了一项新服务,率先体验请点击:http://unsafe/?SID=0D6441FEA4496C2
3.Alice点击并输入密码登录了,此时Mallory再用这个会话ID登录网页,Mallory就会被认为是Alice
解决办法:登录前后更换session-id
注:上面描述的这种情况只发生在session-id保存在url中的情况,由于现在大多数的session id都是保存在cookie中的,所以固定会话攻击用武之地越来越少了。
session保持攻击
这是由于没有给session设置一个失效时间而导致的,攻击者有机会长时间地占用用户的合法身份。