尝试访问

http://mdsec.net/auth/217/

6.2.2 蛮力攻击登录

登录功能的公开性往往诱使攻击者试图猜测用户名和密码,从而获得未授权访问应用程序的权力。如果应用程序允许攻击者使用不同的密码重复进行登录尝试,直到找到正确的密码,那么它就非常容易遭受攻击,因为即使是业余攻击者也可以在浏览器中手动输入一些常见的用户名和密码。

最近一些知名站点沦陷,成千上万个现实世界中的密码也随之泄漏,这些密码或者以明文形式存储,或者使用可蛮力攻击的散列存储。现实世界中的一些最常见的密码如下所示:

img002 password

img002 网站名称

img002 12345678

img002 qwerty

img002 abc123

img002 111111

img002 monkey

img002 12345

img002 letmein

img001  注解  管理员密码实际上比密码策略允许的更为脆弱。它们可能在实施密码策略之前就已设置,或者通过其他应用程序或界面设置。

在这种情况下,精明的攻击者会根据冗长的常用密码列表,使用自动技巧尝试猜测出密码。依赖今天的带宽和处理能力,通过普通PC和DSL连接,攻击者每分钟就可以发出数千个登录尝试。这样,即使最强大的密码最终也会被攻破。

我们将在第14章详细描述实施蛮力登录的各种自动技巧和工具。使用Burp Intruder对一个账户成功实施密码猜测攻击的过程如图6-2所示。我们可通过HTTP响应码、响应长度及缺乏“登录错误”消息等差异清楚区分成功的登录尝试。

img141

图6-2 成功实施密码猜测的攻击示例

一些应用程序使用客户端控件防止密码猜测攻击。例如,某个应用程序可能会设置cookie failedlogins = 1,如果登录尝试失败,递增这个值。达到某个上限后,服务器将在提交的cookie中检测这个值,并拒绝处理登录尝试。这种客户端防御可防止仅使用浏览器实施的手动攻击,但 如第5章所述,这种防御可轻易避开。

如果登录失败计数器保存在当前会话中,这时就会出现前一个漏洞的变化形式。虽然在客户端并没有表明该漏洞存在的任何迹象,但攻击者只需要获得一个全新的会话(例如,通过保留会话cookie)即可继续实施密码猜测攻击。

最后,在某些情况下,应用程序会在失败的登录尝试达到一定次数后锁定目标账户。但是,它会通过表明(或允许攻击者推测)所提交的密码是否正确的消息,对随后的登录尝试作出响应。这意味着,即使目标账户被锁定,攻击者仍然可以完成密码猜测攻击。如果应用程序在一段时间后自动解除账户的锁定状态,则攻击者只需要等到这一时刻,然后即可使用发现的密码正常登录。