OAuth/OpenID Connect安全测试全指南

news/2025/10/14 14:22:22/文章来源:https://www.cnblogs.com/qife122/p/19140987

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

开放重定向测试

  • 检查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

授权码测试

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

  • 在授权码授权中,多次重放代码(代码重放攻击)
  • 注意此代码的过期时间,理想情况下应该短暂有效

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

  • 为另一个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中,检查配置是否支持动态客户端注册
  • 如果使用隐式流程,检查response_mode是否未设置为form_post
  • 检查引用头中泄露的凭据
  • 检查缺少的安全头(CSP(具有适当指令)、HSTS、Referrer策略、权限策略、X-Frame-Options、X-Content-Type-Options等)
  • 检查涉及OAuth流程的端点是否容易受到CORS错误配置的影响
  • 检查涉及OAuth流程的端点是否使用未加密的网络连接
  • 对客户端执行客户端密钥暴露测试
  • 执行不当令牌存储测试
  • 执行访问令牌注入测试,适用于客户端使用直接向客户端颁发访问令牌的响应类型时

缓解/修复/建议

  • 始终验证所有参数是否存在,并验证其值
  • 使用PKCE扩展正确保护授权码和令牌交换
  • 不允许安全功能(如PKCE扩展)的回退
  • 限制凭据的生命周期
  • 尽可能只使用凭据一次
  • 配置可用的安全缓解措施
  • 仅当客户端能够安全存储时才使用客户端密钥
  • 遵循最佳实践安全存储令牌
  • 避免使用已弃用的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
  • OWASP测试指南系列

免责声明

本博客提供的信息仅供一般参考。虽然我始终力求准确,但某些细节可能不准确,提供的列表可能不完整。我强烈建议在做出任何决定或采取行动之前,根据行业标准文档和官方来源验证任何关键信息。此处表达的所有观点均为我个人观点,不代表我雇主的观点或立场。"此列表是一个正在进行的工作 🚧"
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

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

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

相关文章

采用虚幻引擎(UE5)打造黑夜场景氛围

采用虚幻引擎(UE5)打造黑夜场景氛围pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mona…

2025 年电磁流量计厂家推荐:湖北南控仪表科技有限公司专业设备供应与行业适配解决方案

行业背景在工业自动化快速发展的当下,流量测量作为工业生产中的关键环节,直接关系到生产效率、成本控制与产品质量。电磁流量计凭借其能精准测量导电液体流量、不受流体密度、粘度等参数影响的特性,在节能、环保、市…

90%企业忽略的隐藏成本:Data Agent如何降低数据分析总拥有成本(TCO)

引言:数据分析的“成本冰山”与决策者的认知盲区 一个令人深思的现实是:许多企业每年在商业智能(BI)平台上投入超过10万美元,却仍在为低下的工具采用率和决策效率而苦恼。根据 Querio.ai的分析,传统BI工具的投资…

adb logcat 根据Tag 过滤日志

adb logcat根据tag获取需要指定标签(tag)和日志级别adb logcat [TAG:LEVEL ] [TAG:LEVEL ] ... LEVEL: 可以选择:[V D I W E S]中其中一个 TAG:X 的作用为: 输出标签为TAG的log级别大于X的信息. 例如: adb logcat Te…

详细介绍:Spring Boot 详细介绍

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

2025 年艺术涂料厂家最新推荐排行榜,全方位呈现优质品牌特色与竞争力

随着家居装饰与商业空间装修需求的不断升级,艺术涂料凭借丰富的纹理、多样的色彩及良好的性能,成为众多消费者与合作商的优选装饰材料。然而,当前艺术涂料市场品牌繁杂,部分品牌存在产品质量参差不齐、工艺技术落后…

爬虫遇到的问题与解

学习爬虫过程中遇到的一些问题 requests的content和text方法的区别 Requests对象的get和post方法都会返回一个Response对象,这个对象里面存的是服务器返回的所有信息,包括响应头,响应状态码等。其中返回的网页部…

自动化测试框架选型指南:数据驱动、关键字驱动还是混合模式?

做自动化测试的同学,大概率都踩过 “框架选错” 的坑:明明花了几周搭好框架,落地时却发现用例维护比手动测试还麻烦;或者写好的脚本,换个测试场景就得大改,完全没起到 “自动化” 的作用。做自动化测试的同学,大…

直播软件搭建避坑!从直播源码选型到运维,3步搞定上线+降本60%

在数字化浪潮的推动下,直播行业早已不再是少数巨头的游戏。无论是教育机构、电商品牌、社交平台还是企业内训,拥有一个自主可控的直播平台,都成为了赋能业务、连接用户的重要战略。许多有远见的决策者正将目光投向“…

LatchUtils:简化Java异步任务同步的利器

转自https://mp.weixin.qq.com/s/p1nwmRl6-dyThqJ6StxC-A在Java应用开发中,为了提升系统性能和响应速度,我们经常需要将一些耗时操作(如调用外部API、查询数据库、复杂计算等)进行异步并行处理。当主流程需要等待所…

Qoder + ADB Supabase :5分钟GET超火AI手办生图APP

视频效果:一、前言 在AI原生应用开发的时代,传统的后端架构正在被重新定义。本文将带你体验如何使用 Qoder、阿里云ADB Supabase 和通义千问图像编辑模型(Qwen Image Edit),快速搭建一个完整的 AI 手办生图 Flutt…

实验报告2

实验1 问题1:srand(time(NULL))设置时间为随机种,保证每次随机数都不一样 问题2:在两个班中随机抽五个学号实验2 问题1:每次循环总价不清空,导致后面询问时数据出错 问题2:结束这一轮循环,跳过后面的语句;实验3 #inclu…

Agentic RAG对比传统RAG的优势

Agentic RAG 是传统检索增强生成(RAG)技术与AI智能体(Agent)自主能力相结合的一种进阶范式。它让RAG系统从一个遵循固定流程的“信息助手”,升级成了一个具备“大脑”、能够自主规划、决策并与多种工具交互的“智…

linux系统查看磁盘过程

1.查看磁盘信息:df -h2.查看一级文件信息:du -hd 13.查看数量前十的文件:du -a | sort -nr | head -n 104.ubuntu EasyConnect清除路由才能连本地其他的地址 route | grep 192.168.1. | grep tun1 |awk {print &quo…

2025-10-14 闲话

2025-10-14 闲话今天 yspm 21 岁了。 过去一年是超预期的,很难想象今年不是窝在宿舍床上编辑这段话。集体生活的挣扎在一天一顿大融城中彻底转变了形态。 时间过得很快,20岁不会再回来,野蛮荒唐不会再回来。但是耳畔…

ftp多用户多目录配置

ftp多用户多目录配置 测试环境:centos7 1. 装包与卸载yum -y install vsftpd yum -y autoremove vsftpd&&rm -rf /etc/vsftpd /etc/pam.d/vsftpd.rpmsave2. 用户清单配置 不要去动user_list和ftpusers文件,这…

芋道框架怎么样

最近工作中使用了一个java的后端框架叫做 芋道简单说一下我对他的理解和认识吧1.完美的前后端代码自动生成 2.完美的组件集成,包括工作流,ai,自动任务,文件管理器,mq等等缺点: 1.这个框架会挑选你的笔记本,如果…

神级掩护软件!老板路过我电脑在“系统更新中”

软件介绍 一键“假装电脑崩溃”神器来袭! 无论是蓝屏死机、FBI警告、系统更新卡死、还是无限重启,这款小巧的恶搞模拟器都能以假乱真地还原现场,让你轻松度过那些“不想被打扰”的时刻。 体积仅 7MB,却集成了多种经…

超真实“电脑崩溃模拟器”:蓝屏、重启、FBI警告一应俱全!

软件介绍 一键“假装电脑崩溃”神器来袭! 无论是蓝屏死机、FBI警告、系统更新卡死、还是无限重启,这款小巧的恶搞模拟器都能以假乱真地还原现场,让你轻松度过那些“不想被打扰”的时刻。 体积仅 7MB,却集成了多种经…

(20)ASP.NET Core2.2 EF创建模型(必需属性和可选属性、最大长度、并发标记、阴影属性) - 指南

(20)ASP.NET Core2.2 EF创建模型(必需属性和可选属性、最大长度、并发标记、阴影属性) - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !…