OAuth/OpenID Connect 渗透测试完全指南

news/2025/10/15 20:13:58/文章来源:https://www.cnblogs.com/qife122/p/19144174

Web应用渗透测试:OAuth/OpenID Connect测试案例

OAuth和/或OpenID Connect在现代Web或移动应用程序中普遍使用。如果应用程序使用OAuth和/或OpenID Connect进行身份验证/授权,以下是在评估期间可以执行的可能的测试案例:

侦察阶段

  • 检查应用程序使用的OAuth实现类型,例如隐式授权或令牌授权(response_type=token)、授权码授权(response_type=code)等
  • 检查以下标准端点,这将让我们了解支持的或预期的范围等信息:
    • /.well-known/oauth-authorization-server/
    • /.well-known/openid-configuration

重定向URI测试

  • 检查redirect_uri(OAuth流程中的强制参数)中是否存在开放重定向可能,或参阅"测试重定向URI验证不足"
  • 参考此链接中发现的常见绕过方法

以下是来自OWASP WSTG的示例:
#client.evil.com是攻击者控制的回调域名,目标是欺骗OAuth流程将授权码发送到攻击者域名

https://as.example.com/authorize?client_id=example-client&redirect_uri=http%3A%2F%2Fclient.evil.com%2F&state=example&response_mode=fragment&response_type=code&scope=openid&nonce=example

授权码测试

(适用于公共客户端或单页应用SPA、移动应用程序)

  • 在授权码授权(response_type=code / grant_type=authorization_code)中,多次重新发送代码(代码重放)
  • 注意此代码的过期时间,理想情况下应该是短期的

其他涉及授权码的测试案例:

  • 为另一个client_id发送有效代码
    #如果应用程序所有者提供了另一个client_id,或者测试人员能够在AS或OAuth提供商中注册另一个client_id,例如通过动态客户端注册

  • 为另一个资源所有者发送有效代码
    #如果您有另一个测试用户或应用程序允许自助注册
    #启动用户1的OAuth流程,在AS提供授权码的部分,在Burp/Zap中丢弃响应(因此代码不会被使用)
    #使用用户2执行另一个OAuth流程,然后将用户2获得的代码与用户1的代码交换

  • 为另一个redirect_uri发送有效代码
    #以下示例来自OWASP WSTG

POST /oauth/token HTTP/1.1
Host: as.example.com
[...]
{"client_id":"example-client","code":"INJECT_CODE_HERE","grant_type":"authorization_code","redirect_uri":"https://client.example.com"
}

#如果响应返回访问令牌、刷新令牌等,请将此作为发现报告

其他安全测试

  • 执行PKCE降级攻击测试
  • 检查可能的SSRF
  • 检查State参数是否存在,如果不存在,可能是CSRF的候选
  • 如果State参数存在,检查是否正在验证或是否真正随机。OAuth流程中的CSRF测试案例通常适用于"同意页面"
    #以下示例来自OWASP WSTG
POST /u/consent?state=Tampered_State HTTP/1.1
Host: as.example.com
[...]
state=MODIFY_OR_OMIT_THIS&audience=https%3A%2F%2Fas.example.com%2Fuserinfo&scope%5B%5D=profile&scope%5B%5D=email&action=accept
  • 测试同意页面中的点击劫持(CSP、frame-ancestors指令和/或X-Frame-Option在此处用于缓解)
  • 测试JWT的令牌生命周期(访问令牌、刷新令牌)
  • 检查是否可以升级Scope。例如,如果初始Scope是scope=openid%20email,我们是否可以将其升级为scope=openid%20email%20profile?

OpenID Connect特定测试

  • 在OpenID Connect中,检查配置是否支持动态客户端注册。参阅此链接中发现的通过OpenID动态客户端注册的SSRF Portswigger实验室

隐式流程测试

  • 如果使用隐式流程,检查response_mode是否未设置为form_post
  • 检查引用头中泄漏的凭据。"如果response_mode未设置为form_post,隐式流程将授权令牌作为URL的一部分传输。这可能导致请求的令牌或代码在引用头、日志文件和代理中泄漏,因为这些参数在查询或片段中传递。" — OWASP WSTG

安全头检查

  • 检查缺少的安全头(CSP(具有适当的指令)、HSTS、引用策略、权限策略、X-Frame-Options、X-Content-Type-Options等)

端点安全测试

  • 检查涉及OAuth流程的端点是否容易受到CORS错误配置的影响(例如Access-Control-Allow-Origin: *,或者如果Origin接受任何任意域)
  • 检查涉及OAuth流程的端点是否使用未加密的网络连接

客户端测试

  • 对暴露的客户端密钥执行测试
  • 对不当令牌存储执行测试
  • 对访问令牌注入执行测试,适用于客户端使用直接向客户端颁发访问令牌的响应类型时(例如隐式授权类型)

缓解/修复/建议

  • 始终验证所有参数是否存在,并验证它们的值(例如,严格执行redirect_uri参数与确切的预期URI匹配)
  • 使用PKCE扩展来正确保护授权码和令牌交换
  • 不允许安全功能(如PKCE扩展)的回退
  • 限制凭据的生命周期(短期的授权码,访问令牌的合理时间(5到15分钟,取决于用例),长期有效的刷新令牌(理想情况下在使用后失效))
  • 在可能的情况下,凭据仅使用一次,例如授权码
  • 配置可用的安全缓解措施,如CORS、反CSRF令牌(State参数)和反点击劫持头(具有frame-ancestors指令的CSP和/或X-Frame-Options)
  • 仅当客户端能够安全存储时才使用客户端密钥
  • 遵循最佳实践安全存储令牌。将它们与其他凭据一样进行安全考虑
  • 避免已弃用的OAuth授权类型。有关更多详细信息,请参阅测试OAuth弱点

参考资料

  • https://portswigger.net/web-security/oauth
  • https://portswigger.net/web-security/oauth/openid
  • https://www.cyberark.com/resources/threat-research-blog/how-secure-is-your-oauth-insights-from-100-websites
  • https://www.praetorian.com/blog/attacking-and-defending-oauth-2-0-part-1/
  • https://www.praetorian.com/blog/attacking-and-defending-oauth-2/
  • https://www.cobalt.io/blog/oauth-vulnerabilites
  • https://www.cobalt.io/blog/oauth-vulnerabilites-pt.-2
  • https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/05-Authorization_Testing/05-Testing_for_OAuth_Weaknesses
  • https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/05-Authorization_Testing/05.1-Testing_for_OAuth_Authorization_Server_Weaknesses
  • https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/05-Authorization_Testing/05.2-Testing_for_OAuth_Client_Weaknesses
  • https://cheatsheetseries.owasp.org/cheatsheets/OAuth2_Cheat_Sheet.html

免责声明

本博客提供的信息仅供一般信息目的。虽然我总是力求准确,但某些细节可能不准确,提供的列表可能不完整。话虽如此,我强烈建议在做出任何决定或采取行动之前,根据行业标准文件和官方来源(上面参考部分列出了一些)验证任何关键信息。

此处表达的所有观点均为我个人观点,不代表我雇主的观点或立场。

"此列表是一个进行中的工作 🚧"
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/937766.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Problem K. 置换环(The ICPC online 2025)思路解析 - tsunchi

答案 最大权值: \[\begin{cases} \lfloor \frac{n+1}{2} \rfloor \cdot n,\; n\text{为奇数}, \\ \lfloor \frac{n+1}{2} \rfloor \cdot (n+1),\; n\text{为偶数}, \end{cases} \]把列 A:从 n 到 1 倒序输出 思路 题…

Go 语言和 Tesseract OCR 识别英文数字验证码

Go 语言凭借其并发处理能力和简单的语法,成为开发高效程序的首选之一。借助 tesseract 包,我们可以在 Go 中调用 Tesseract OCR 引擎进行验证码识别。 一、安装与配置 安装 Tesseract OCR 首先,确保你已经在系统中安…

Markdown转换为Word:Pandoc模板使用指南 - 实践

Markdown转换为Word:Pandoc模板使用指南 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

2025年10月小程序开发公司最新推荐排行榜,小程序定制开发,电商小程序开发,预订服务小程序开发,活动报名小程序开发!

在数字化转型加速推进的当下,小程序已成为政企实现线上服务落地的核心载体。但行业快速扩张背后,乱象愈发凸显:部分厂商以模板套用冒充定制开发,交付后出现功能缩水、二次开发困难等问题;技术迭代滞后导致小程序适…

复习CSharp

基本语法 usiing 关键字 using 关键字用于在程序中包含命名空间。一个程序可以包含多个 using 语句 class关键字 class 关键字用于声明一个类。 注释 单行注释 多行注释 成员变量 变量是类的属性或数据成员,用于存储…

数据结构-循环队列

循环队列 功能实现 /**************************************************************************** * @name* @author* @date** *CopyRight (c) 2025-2026 All Right Reserved* **********************************…

C语言学习——键盘录入

一.基础的定义 键盘录入用到的是scanf起作用是获取用户在键盘上输入的数据,并赋值给变量 二.示例 下面是键盘录入的格式三.练习 当我们需要在键盘上录入我们所需要的字符串时我们可以通过以下的要求和格式来进行定义下…

2025年10月软件开发公司最新推荐,软件定制开发,crm系统定制软件开发,管理系统软件开发,物联网软件开发公司推荐!

在数字化转型加速推进的当下,政企机构对软件开发服务的需求持续攀升,但行业乱象却让选型陷入困境。部分厂商存在技术架构陈旧、扩展能力不足的问题,系统上线后难以适配业务增长需求;另有服务商重开发轻服务,售后响…

C语言学习——运算符的学习

在算术运算符中有许多需要注意的过程,当然这其中所遵循的都是我们平常常见的运算规则只是其中增添了一些在计算机的运算过程中所出现的问题 1 .接下来介绍的就是C语言中运算符的基础运算,同时也是我们很早就掌握的,…

第十五篇

今天是10月15日,上了离散和马原。

数据结构-顺序栈

数据结构-顺序栈 /**************************************************************************** * @name: sequencelstack * @author: 王玉珩* @date: 2025/10/07** *CopyRight (c) 2025-2026 All Right Rese…

实用指南:NXP - 用MCUXpresso IDE v25.6.136的工具链编译Smoothieware固件工程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Erlang 的英文数字验证码识别系统设计与实现

一、引言 验证码(CAPTCHA)作为互联网中抵御自动化攻击的重要安全机制,被广泛用于登录验证、注册防刷、评论防机器人等场景。 传统验证码识别常用 Python 或 C++ 实现,而本文将介绍如何用 Erlang 来构建一个基础的英…

使用Django从零开始构建一个个人博客系统 - 实践

使用Django从零开始构建一个个人博客系统 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

2025年磨床厂家TOP企业品牌推荐排行榜,平面磨床,外圆磨床,数控平面磨床,数控外圆磨床,7163平面磨床推荐这十家公司!

当前磨床市场竞争愈发激烈,产品质量参差不齐,不少企业在选购磨床时面临诸多难题。部分厂家缺乏严格的质量管控体系,生产的磨床精度不足、稳定性差,难以满足汽车摩托车、工程机械、军工等行业对加工精度的高要求;还…

cifar10

import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms from multiprocessing import freeze_support import sys 1. 加载和预处理数据 d…

[LangChain] 02. 模型接口

LangChain 支持两类主流语言模型:文本补全模型 对话模型文本补全模型 Text Completion Models 这类模型以一段纯文本作为输入,输出结果是一段连续生成的文字(这里的输出文本其实就是对前面输入文本的一个补全),不…

摄像头调试

camera调试经验分享 收藏 一 关于Sensor预览时有条纹: 1。电源不稳定,CMOS sensor对电源的稳定度蛮高的。 2。同步信号受干扰,彩色条纹显然是每行数据中有信号丢失造成。 3。检查mclk和pclk以及他们的ratio,软件…

软件工程作业-报告1 - 实践

软件工程作业-报告1 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", …

C语言学习——字符串数据类型

字符串的数据类型只有char来进行定义,相对之前的来讲较少同样打印的内容需要用引号来进行标注,同时也可以用与整数和小数的方法来进行测量字节 接下来我们对以上三种数据类型进行一个总结和概括: > 所有整数,小…