(1)以完全匿名的用户身份获得一个会话令牌,然后完成提交敏感数据的过程,接下来继续浏览,直到任何显示敏感数据的页面。
(2)如果最初获得的同一个令牌现在可用于获取敏感数据,应用程序就易于受到会话固定攻击。
(3)如果已经发现任何会话固定漏洞,则应确定应用程序是否接受它之前并未发布的任何令牌。如果接受,那么在很长一段时间内攻击者都可以非常轻松地利用这个漏洞。
防止会话固定漏洞
任何时候,只要一名用户与应用程序的交互状态由匿名转变为确认,应用程序就应该发布新的会话令牌。这不仅适用于用户成功登录的情况,而且适用于匿名用户首次提交个人或其他敏感信息时。
为进一步防止会话固定攻击,一些安全性至关重要的应用程序采用每页面令牌来强化主会话令牌,以提供深层防御。这种技巧可以击退大多数会话劫持攻击,请参阅第7章了解详情。
应用程序不得接受它认为不是自己发布的任意会话令牌。应立即在浏览器中取消该令牌,并将用户返回到应用程序的起始页面。
如果应用程序提取用户可控制的输入,并使用这个数据执行重定向,指示用户的浏览器访问不同于用户所请求的URL,这时就会导致开放重定向漏洞。相比于可执行大量恶意操作的跨站点脚本漏洞,攻击者通常对这些漏洞不太感兴趣。攻击者主要利用开放式重定向漏洞实施钓鱼攻击,诱使受害者访问欺骗性Web站点并输入敏感信息。对潜在的受害者而言,重定向漏洞提高了攻击者的可信度,因为它允许攻击者创建一个指向他所针对的可信Web站点的URL,因此更具有说服力,但任何访问这个URL的用户将被悄悄重定向到攻击者控制的Web站点。
也就是说,现实世界中的大多数钓鱼攻击都使用其他技巧来获得不受所针对的应用程序控制的可信度。这类技巧包括注册类似的域名、使用官方形式的子域,以及在HTML电子邮件中在定 位文本与链接的目标URL之间造成不匹配。研究表明,多数用户都无法或不太可能基于URL结构作出安全决策。因此,典型的开放式重定向漏洞对钓鱼攻击者而言并无多大价值。
近年来,开放式重定向漏洞一直被攻击者以相对良性的方式加以利用,用于实施“瑞克摇摆”(rickrolling)攻击。在这种攻击中,受害者在不知情的情况下被重定向到英国流行乐传奇人物里克·阿斯特利的视频,如图13-5所示。
图13-5 “瑞克摇摆”攻击的结果
1.查找并利用开放式重定向漏洞
查找重定向漏洞的第一步是确定应用程序中的所有重定向。应用程序可以通过几种方式使用户的浏览器重定向到不同的URL。
HTTP重定向使用一条状态码为3xx的消息与一个指定重定向目标的Location消息头。例如:
HTTP Refresh消息头可在固定时间间隔后使用任意URL重新加载某个页面,该间隔可以为零(0),也就是能立即触发重定向。例如:
HTML<meta>标签可复制任何HTTP消息头的行为,因此可用于建立重定向。例如:
JavaScript中的各种API可用于将浏览器重定向到任意URL。例如:
以上这些方法可用于指定绝对或相对URL。