(1)用控制的某个账户手动提交几个错误的登录尝试,监控接收到的错误消息。
(2)如果应用程序在大约10次登录失败后还没有返回任何有关账户锁定(account lockout)的消息,再尝试正确登录。如果登录成功,应用程序可能并未采用任何账户锁定策略。
(3)如果账户被锁定,可以尝试重复使用不同的账户。如果应用程序发布任何cookie,这次可以将每个cookie仅用于一次登录尝试,并为随后的每次登录尝试获取新cookie。
(4)此外,如果账户被锁定,应查看与提交无效密码相比,提交有效密码是否会导致应用程序的行为出现任何差异。如果确实如此,则可以继续实施密码猜测攻击,即使账户被锁定。
(5)如果没有控制任何账户,尝试枚举一个有效的用户名(参阅6.2.3节)并使用它提交几次错误登录,监控有关账户锁定的错误消息。
(6)发动蛮力攻击前,首先确定应用程序响应成功与失败登录之间的行为差异,以此分清它们在自动攻击过程中表现出的区别。
(7)列出已枚举出的或常见的用户名列表和常用密码列表。根据所获得的任何有关密码强度规则的信息对上述列表加以修改,以避免进行多余测试。
(8)使用这些用户名和密码的各种排列组合,通过适当的工具或定制脚本迅速生成登录请求。监控服务器响应以确定成功的登录尝试。我们将在第14章详细说明使用自动化方法实施定制攻击的各种技巧和工具。
(9)如果一次针对几个用户名,通常最好以广度优先(breadth-first)而非深度优先(depth-first)的方式实施这种蛮力攻击。这包括循环使用一组密码(从最常用的密码开始)并轮流对每个用户名使用每一个密码。这种方法有两方面的好处:首先,可以更加迅速地确定使用常用密码的账户;其次,这样做可以降低触发任何账户锁定防御的可能性,因为在使用同一个账户进行连续登录之间存在时间延迟。