前言
身份验证漏洞可能允许攻击者访问敏感数据和功能。它们还会暴露其他攻击面,以便进一步利用。因此,了解如何识别和利用身份验证漏洞以及如何绕过常见的保护措施非常重要。本文将介绍:
- 网站最常用的身份验证机制。
- 这些机制中的潜在漏洞。
- 不同身份验证机制中的固有漏洞。
- 由不正确的部署引入的典型漏洞。
- 如何使自己的身份验证机制尽可能可靠。
身份验证是验证用户是否是他们声称的身份的过程。授权涉及验证是否允许用户执行某些操作。、
例如,身份验证确定尝试使用用户名访问网站的人Carlos123
是否真的是创建该帐户的同一个人。通过身份验证后Carlos123
,他们的权限将决定他们被授权执行的操作。例如,他们可能被授权访问有关其他用户的个人信息,或执行删除其他用户帐户等操作。
暴力破解
暴力破解是指攻击者使用试错系统来猜测有效的用户凭据。这些攻击通常使用用户名和密码的单词列表自动进行。自动执行此过程,尤其是使用专用工具,可能会使攻击者能够高速进行大量登录尝试。
暴力破解并不总是只是对用户名和密码进行完全随机的猜测。通过使用基本逻辑或公开可用的知识,攻击者可以微调暴力破解,以做出更有根据的猜测。这大大提高了此类攻击的效率。依赖基于密码的登录作为验证用户身份的唯一方法的网站,如果没有实施足够的暴力保护,则可能非常容易受到攻击。
用户名采用特定的模式(例如电子邮件地址)特别容易猜到。例如,以firstname.lastname@somecompany.com
(即:姓名@公司名.com)。即使没有明显的模式,有时目标会使用可预测的用户名(例如admin
或administrator
)创建高特权帐户。
在测试的过程中,检查网站是否公开披露了潜在的用户名。例如,您是否可以在不登录的情况下访问用户配置文件?即使配置文件的实际内容被隐藏,配置文件中使用的名称有时也与登录用户名相同。您还应该检查 HTTP 响应以查看是否有任何电子邮件地址被泄露。有时,响应包含高特权用户(如管理员或 IT 支持)的电子邮件地址。
密码同样可以被暴力破解,难度因密码的强度而异。许多网站采用某种形式的密码策略,迫使用户创建复杂密码,在理论上它们更难破解。这通常涉及使用以下命令强制执行密码:
- 最小字符数
- 小写和大写字母的混合
- 至少一个特殊字符
然而,虽然复杂密码很难单独被计算机破解,但我们可以使用人类行为的习惯(懒)来利用用户在不知不觉中引入该系统的漏洞。用户通常不会使用随机字符组合创建强密码,而是使用他们可以记住的密码,并尝试将其修改使其适合密码策略。例如,如果mypassword
不允许,用户可以尝试类似Mypassword1!
orMyp4$$w0rd
的操作。
如果策略要求用户定期更改其密码,则用户通常只需对其首选密码进行可预测的微小更改。例如,Mypassword1!
变为Mypassword1?
或Mypassword2!.
这种对可能的凭据和可预测模式的了解意味着暴力破解通常比简单地遍历每个可能的字符组合要复杂得多,因此也更有效。
用户名枚举
用户名枚举是指攻击者能够观察网站行为的变化,以确定给定的用户名是否有效。用户名枚举通常发生在登录页面上,例如,当您输入有效的用户名但密码不正确时,或者当您输入已使用的用户名时,页面给出特别的显示。这大大减少了暴力破解登录所需的时间和精力,因为攻击者能够快速生成有效用户名的候选列表。
在尝试暴力破解登录页面时,应特别注意以下方面的任何差异:
- 状态代码:在暴力破解期间,对于绝大多数尝试,返回的 HTTP 状态代码可能相同,因为大多数猜测都是错误的。如果暴力破解中某个payload返回不同的状态代码,则表明用户名存在。所以无论结果如何,网站始终返回相同的状态代码是最佳做法,但实际上开发时并不总是遵循这种做法。
- 报错消息:有时返回的报错消息会有所不同,具体取决于用户名和密码是否不正确,或者只有密码不正确。在这两种情况下,网站最好使用相同的通用消息,但有时会出现小的打字错误。只要一个字符不合适,就会使两条消息截然不同,即使该字符在呈现的页面上不可见。
- 响应时间:如果大多数请求都以类似的响应时间处理,则任何偏离此请求都表明幕后发生了不同的事情。这是猜测的用户名可能正确的另一个迹象。例如,如果用户名有效,网站可能只会检查密码是否正确。这个额外的步骤可能会导致响应时间略有增加。这可能很微妙,但攻击者可以通过输入过长的密码来使这种延迟更加明显,网站需要明显更长的时间来处理。
对应靶场
进入靶场,单击my account。
在用户名处随便输入点东西,抓包。
在burp suite右击,将数据包送入intruder选择sniper模式。
在intruder中清除所有符号,选中username的值,加入破解标记。
复制靶场介绍里给出的用户名。
将用户名放入burp suite候选名单。
单击右上角的start attack开始攻击,攻击完成后点一下红框处的length按照长度排列,大到小和小到大都看看,发现有一个长度不一样,这就是要找的有效用户名。实战中可以再看看status code error 等参数有没有不一样的。
此时使用破解出的用户名进行针对密码的暴力破解。将破解出的用户名填入username参数中,清除标记后选定password处添加破解标记。
此时复制给出的密码,填入候选payload中进行破解。
注意先清除之前的用户名字典,再粘贴我们的密码字典。
同样通过查看长度发现密码。
如此我们知道了用户名:ak,密码:master。登录后就通关了。
绕过两步认证
如果首先提示用户输入密码,然后在单独的页面上提示用户输入验证码,则用户在输入验证码之前实际上处于“已登录”状态。在这种情况下值得测试一下在完成第一个身份验证步骤后是否可以直接跳到“仅登录”页面。有时,您会发现网站实际上并没有在加载页面之前检查您是否完成了第二步。
靶场部分
使用给定账号登录。
进入邮箱客户端。
记下验证码并输入到登录处,单击login。
观察URL发现多出了一个路径,这就是用户界面。回到之前所介绍的知识点:当输入完密码点击登录后,我们已经进入了用户的个人界面,只是我们和界面之间多出了验证码要我们输入。可以理解为破解密码就是我们要撬开门锁进入房间,成功的验证码机制中验证码和密码分别是门上的两道锁,失败的验证码机制则是只有密码这一道锁,我们输入完密码已经进入了房间,验证码只是一道没上锁的木门,直接不管它进入房间即可。
复制多出的路径,登出账号,使用受害者的账号登录。
/my-account?id=wiener
此时进入验证码输入页面。
此时将之前发现的用户界面的位置补上URL,根据常理推断修改id为carlos(要登录的用户名),回车访问。
成功登录。