参考: The Web Application Hacker’s Handbook Chapter 6
1.非唯一用户名(Nonunique Usernames)
某些支持自我注册的应用程序允许用户指定自己的用户名,而不强制要求用户名唯一。 尽管这种情况很少见,但作者已经遇到了不止一种应用程序。 这代表设计缺陷,其原因有两个:
- 1.在注册过程中或在随后的密码更改过程中,与另一用户共享用户名的一个用户也可能会选择与该用户相同的密码。 在这种情况下,应用程序要么拒绝第二个用户选择的密码,要么允许两个帐户具有相同的凭据。 在第一种情况下,应用程序的行为实际上向一个用户公开了另一用户的凭据。 在第二种情况下,其中一个用户的后续登录将导致访问另一个用户的帐户。
- 2.攻击者可能会利用此行为进行成功的暴力攻击,即使由于失败的登录尝试受到限制,在其他地方也可能无法进行这种攻击。 攻击者可以监视不同的响应,指示使用该用户名和密码的帐户已经存在,同时可以使用不同的密码多次注册特定的用户名。 攻击者无需先尝试登录即可确定目标用户的密码。
设计不当的自注册功能也可能会提供用户名枚举的方法。 如果应用程序不允许重复的用户名,则攻击者可能会尝试注册大量常见的用户名,以标识被拒绝的现有用户名。
HACK STEPS
- 1.如果可以进行自我注册,请尝试使用不同的密码两次注册相同的用户名。
- 2.如果应用程序阻止了第二次注册尝试,则即使在主登录页面或其他位置上无法进行此操作,您也可以利用此行为枚举现有的用户名。 使用常见用户名列表进行多次注册尝试,以标识应用程序已阻止的已注册名称。
- 3.如果重复的用户名注册成功,请尝试使用相同的密码两次注册相同的用户名,并确定应用程序的行为:
- a.如果出现错误消息,则即使在主登录页面上无法进行此攻击,也可以利用此行为进行蛮力攻击。 定位枚举或猜测的用户名,并尝试使用常见密码列表多次注册该用户名。 当应用程序拒绝特定密码时,您可能已经找到了目标帐户的现有密码。
- b.如果出现错误消息,则即使在主登录页面上无法进行此攻击,也可以利用此行为进行蛮力攻击。 定位枚举或猜测的用户名,并尝试使用常见密码列表多次注册该用户名。 当应用程序拒绝特定密码时,您可能已经找到了目标帐户的现有密码。
2.可预测的用户名(Predictable Usernames)
某些应用程序会根据可预测的顺序自动生成帐户用户名(cust5331,cust5332等)。 当应用程序具有这种行为时,可以识别顺序的攻击者可以快速到达所有有效用户名的潜在详尽列表,这些列表可以用作进一步攻击的基础。 与依赖于由单词表驱动重复请求的枚举方法不同,这种确定用户名的方法可以在不与应用程序进行最少交互的情况下以非侵入方式执行。
HACK STEPS
- 1.如果应用程序生成了用户名,请尝试快速连续获取多个用户名,并确定是否可以识别任何顺序或模式。
- 2.如果可以,请向后外推以获得可能的有效用户名列表。 这可以用作针对登录的暴力攻击以及其他需要有效用户名的攻击的基础,例如利用访问控制漏洞(请参阅第8章)。
3.可预测的初始密码(Predictable Initial Passwords)
在某些应用程序中,可以一次创建用户,也可以批量创建用户,并自动为其分配初始密码,然后通过某种方式将密码分配给他们。 生成密码的方法可以使攻击者能够预测其他应用程序用户的密码。 这种漏洞在基于Intranet的公司应用程序中更为常见,例如,每个员工都有一个代表她创建的帐户并收到其密码的打印通知。
在最易受攻击的情况下,所有用户都将收到相同的密码,或者是从其用户名或工作职能中派生而来的一个密码。 在其他情况下,生成的密码可能包含通过访问非常小的初始密码样本就可以识别或猜测的序列。
HACK STEPS
- 1.如果应用程序生成密码,请尝试快速连续获取多个密码,并确定是否可以识别任何顺序或模式。
- 2.如果可以,请外推该模式以获得其他应用程序用户的密码列表。
- 3.如果密码显示可以与用户名关联的模式,则可以尝试使用已知或猜测的用户名以及相应的推断密码登录。
- 4.否则,您可以使用推断出的密码列表作为使用枚举或常用用户名列表的暴力攻击的基础。
4.凭证分配不安全(Insecure Distribution of Credentials)
许多应用程序采用一种过程,其中将新创建的帐户的凭据以与应用程序的正常交互方式带外分发给用户(例如,通过邮寄,电子邮件或SMS文本消息)。 有时,这样做是出于安全方面的考虑,例如要确保用户提供的邮寄或电子邮件地址实际上属于该人。
在某些情况下,此过程可能会带来安全风险。 例如,假设分发的消息包含用户名和密码,对其使用没有时间限制,并且不需要用户在首次登录时更改密码。 极有可能,即使是大多数应用程序用户,也不会修改其初始凭据,并且分发消息将长期存在,在此期间,未授权方可能会访问它们。
有时,分发的不是凭证本身,而是“帐户激活” URL,该URL使用户可以设置自己的初始密码。 如果发送给连续用户的一系列URL表现出任何顺序,则攻击者可以通过连续注册多个用户来识别此序列,然后推断发送给最近和即将到来的用户的激活URL。
某些Web应用程序的相关行为是允许新用户以看似安全的方式注册帐户,然后向包含其完整登录凭据的每个新用户发送欢迎电子邮件。 在最坏的情况下,一个安全意识强的用户决定立即更改其可能被泄露的密码,然后又收到一封包含新密码的电子邮件,“以供将来参考”。 这种行为非常怪异和不必要,因此建议用户停止使用沉迷于其中的Web应用程序。
HACK STEPS
- 1.获取一个新帐户。 如果不需要在注册过程中设置所有凭据,请确定应用程序将凭据分发给新用户的方式。
- 2.如果使用了帐户激活URL,请尝试连续注册多个新帐户,并标识您收到的URL中的任何顺序。 如果可以确定模式,请尝试预测发送给最近和即将到来的用户的激活URL,并尝试使用这些URL来获取其帐户的所有权。
- 3.尝试多次重用一个激活URL,看看应用程序是否允许这样做。如果没有,请尝试在重用URL之前锁定目标帐户,看看它现在是否工作。
Chapter 6 Attacking Authentication(2) - Design Flaws in Authentication Mechanisms(3)
Chapter 6 Attacking Authentication(3) - Implementation Flaws in Authentication