正如你所看到的,预测攻击通常是“全有或全无”的命题:要么应用开发人员犯了某些错误,令牌很容易地成为直觉猜测以及/或者适当的自动化分析的猎物;要么对于攻击者难以辨认,攻击者必须转向其他攻击方法。
攻击者避开令牌分析的所有复杂性的方法之一是简单地重放另一个用户的令牌。如果成功,攻击者实际上就成为那个用户。
这种捕捉/重放攻击在一个关键的方法上不同于预测:和猜测或者逆向工程一个合法的令牌不同,攻击者必须通过一些其他方法获得一个令牌。有一些经典的方法能够做到,包括窃听、中间人和社会工程。
窃听是任何基于网络的应用都面对的威胁。流行的免费网络监控工具,如Wireshark(以前叫做Ethereal)和Ettercap,可以嗅探原始网络流量,从线路上获得Web应用会话,泄露和重放任何授权数据。
在合法客户端和应用之间放置一个“中间人”也可以达到同样的效果。例如,如果一个攻击者侵入ISP上的一个代理服务器,就能访问所有使用该代理的客户的会话ID。如果代理负责HTTPS连接或者攻击者成功地欺骗远程用户接受无效的SSL证书,这样的攻击还可能造成对常规的加密会话的侵害。
最后,一种简单但往往有效的获取有效会话ID的方法是简单地向可能的受害者索要。正如我们在前面关于查询串中的敏感数据的讨论中所说的,不熟练的用户可能受骗,通过包含这些数据的电子邮件发送URI……这又一次提醒在查询串中存储敏感数据的危险!