在本节中,我们将研究网站使用的一些最常见的身份验证机制,并讨论其中的潜在漏洞。 我们将重点介绍不同身份验证机制中的固有漏洞,以及由于身份验证实施不当而引入的一些典型漏洞。 最后,我们将提供一些基本指导,说明如何确保自己的身份验证机制尽可能可靠。
与往常一样,我们为您创建了一些交互式实验室,以练习利用其中的某些漏洞。 如果您已经熟悉此主题,则可以直接进入实验室以测试您的技能。
身份验证是验证给定用户或客户端身份的过程。 换句话说,这涉及确保他们确实是他们声称的身份。 网站至少会部分暴露给通过设计连接到互联网的任何人。 因此,强大的身份验证机制是有效的web安全的组成部分。
可以将三种身份验证因素分为三种类型:
身份验证机制依赖于一系列技术来验证这些因素中的一个或多个。
身份验证是验证用户确实是他们声称的身份的过程,而授权涉及验证用户是否被允许做某事。
在网站或web应用程序的上下文中,身份验证确定尝试使用用户名Carlos123访问该网站的人是否确实与创建该帐户的人相同。
一旦对Carlos123进行身份验证,他的权限将确定他是否被授权访问例如有关其他用户的个人信息或执行诸如删除其他用户帐户的操作。
广义上讲,身份验证机制中的大多数漏洞是通过以下两种方式之一产生的:
在web开发的许多领域中,逻辑缺陷只会导致网站表现异常,这可能是安全问题,也可能不是安全问题。 但是,由于身份验证对于安全性至关重要,因此,有缺陷的身份验证逻辑使网站暴露于安全问题的可能性明显增加。
身份验证漏洞的影响可能非常严重。 一旦攻击者绕过身份验证或强行进入另一个用户的帐户,他们就可以访问受感染帐户拥有的所有数据和功能。 如果他们能够入侵系统管理员等高特权帐户,则他们可以完全控制整个应用程序,并有可能获得对内部基础结构的访问权限。
即使损害低特权帐户,也仍可能使攻击者获得他们不应该拥有的数据的访问权限,例如商业上敏感的商业信息。 即使该帐户无法访问任何敏感数据,它仍可能允许攻击者访问其他页面,从而提供了进一步的攻击面。 通常,从公开访问的页面上将无法进行某些高严重性攻击,但从内部页面上则可能是可能的。
网站的身份验证系统通常由几种可能发生漏洞的不同机制组成。 一些漏洞广泛适用于所有这些情况,而其他漏洞则更特定于所提供的功能。
我们将在以下领域中更仔细地研究一些最常见的漏洞:
请注意,一些实验要求您枚举用户名和暴力密码。 为了帮助您完成此过程,我们提供了候选用户名和密码的简短列表,您应使用它们来解决实验。
我们已经说明了几种由于网站实施身份验证而易受攻击的方法。 为了减少在您自己的网站上遭受此类攻击的风险,您应始终遵循几个通用原则。