hacktricks/pentesting-web/2fa-bypass.md

8.7 KiB
Raw Blame History

2FA/OTP绕过

☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

绕过双因素认证

直接绕过

要绕过2FA只需直接尝试访问下一个端点(您需要知道下一个端点的路径)。如果这样不起作用,请尝试更改引用者标头就好像您来自2FA页面。

重用令牌

也许您可以重用账户内先前使用过的令牌进行身份验证。

共享未使用的令牌

检查是否可以从您的账户获取令牌并尝试使用它来绕过另一个账户的2FA。

泄露的令牌

令牌是否在Web应用程序的响应中泄露

电子邮件验证链接

尝试使用创建账户时收到的电子邮件验证链接看看即使设置了2FA您是否仍然可以只使用该链接访问您的个人资料文章)。

会话权限

使用相同的会话启动您的账户和受害者的账户的流程。当两个账户都达到2FA点时使用您的账户完成2FA但不要访问下一步。相反尝试使用受害者账户的流程访问下一步。如果后端只是在您的会话中设置一个布尔值表示您已成功通过了2FA则可以绕过受害者的2FA。

密码重置功能

在几乎所有的Web应用程序中密码重置功能在重置过程完成后会自动登录用户
检查是否发送了一封带有重置密码链接的邮件,以及您是否可以重复使用链接重置密码,无论受害者是否更改了他的电子邮件地址

通过密码重置功能绕过2FA的另一种方法是使用访问邮件的方式重置密码并使用新密码进行登录可能在密码更改后不使用2FA。

OAuth

如果您可以破坏用户在受信任的OAuth平台Google、Facebook...)上的账户

暴力破解

缺乏速率限制

是否有任何限制您可以尝试的代码数量,以便您可以进行暴力破解?要小心可能存在的“静默”速率限制,始终尝试多个代码,然后再尝试真正的代码以确认漏洞。

流速限制但无速率限制

在这种情况下存在流速限制您必须非常慢地进行暴力破解1个线程和一些延迟然后再尝试2次但没有速率限制。因此只要有足够的时间您就可以找到有效的代码。

重新发送代码并重置限制

存在速率限制,但当您“重新发送代码”时,相同的代码被发送,并且速率限制被重置。然后,您可以在重新发送代码的同时进行代码暴力破解,以便永远不会达到速率限制。

客户端速率限制绕过

{% content-ref url="rate-limit-bypass.md" %} rate-limit-bypass.md {% endcontent-ref %}

用户账户中缺乏速率限制

有时您可以为账户内的某些操作更改邮件、密码等配置2FA。然而即使在尝试登录时存在速率限制也没有任何速率限制来保护账户内的操作。

重新发送短信验证码时缺乏速率限制

您将无法绕过2FA但您将能够浪费公司的资金。

无限OTP再生成

如果您可以无限次生成新的OTPOTP足够简单4位数字并且您可以尝试每个生成的OTP的4或5个令牌那么您只需每次尝试相同的4或5个令牌并生成OTP直到与您使用的令牌匹配为止。

竞争条件

请查看以下页面关于2FA绕过的部分

{% content-ref url="race-condition.md" %} race-condition.md {% endcontent-ref %}

CSRF/Clickjacking

检查是否存在跨站请求伪造CSRF或点击劫持漏洞以禁用2FA。

记住我功能

可猜测的Cookie

如果“记住我”功能使用一个可猜测的代码的新Cookie尝试猜测它。

IP地址

如果“记住我”功能与您的IP地址相关联您可以尝试找出受害者的IP地址并使用X-Forwarded-For头部进行冒充。

旧版本

子域名

如果您能找到一些带有登录功能的“测试”子域名它们可能使用不支持2FA的旧版本因此可以直接绕过或者这些端点可能支持一个易受攻击的2FA版本。

API

如果您发现2FA正在使用位于/v*/目录下的API如“/v3/”这可能意味着存在旧的API端点可能容易受到某种2FA绕过的攻击。

先前的会话

启用2FA后应该结束先前创建的会话。这是因为当客户端的帐户被入侵时他可能希望通过激活2FA来保护它但如果先前的会话没有结束这将无法保护他。

对备份代码的不正确访问控制

备份代码在启用2FA后立即生成并在单个请求中可用。在每次对请求的后续调用中代码可以重新生成或保持不变静态代码。如果存在CORS配置错误/XSS漏洞和其他允许您从备份代码端点的响应请求中“拉取”备份代码的错误那么攻击者可以窃取代码并绕过2FA前提是已知用户名和密码。

信息泄露

如果您注意到在2FA页面上出现了一些您之前不知道的机密信息如电话号码那么这可以被视为信息泄露漏洞。

重置密码 == 禁用2FA

  1. 创建一个帐户并启用2FA。
  2. 从该帐户注销。
  3. 现在,转到忘记密码重置页面。
  4. 更改您的密码。
  5. 现在尝试登录。
  6. 如果您没有被要求输入2FA代码则可以报告。

参考资料

{% embed url="https://medium.com/@iSecMax/two-factor-authentication-security-testing-and-possible-bypasses-f65650412b35" %}

{% embed url="https://azwi.medium.com/2-factor-authentication-bypass-3b2bbd907718" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥