【渗透测试】-OAuth授权框架-burp

文章目录

1.Lab: Authentication bypass via OAuth implicit flow 

2.Lab: Forced OAuth profile linking


1.Lab: Authentication bypass via OAuth implicit flow

通过 Burp 代理流量时,单击“我的帐户”并完成 OAuth 登录过程。之后,您将被重定向回博客网站。

点击我的账户,进入登入界面,输入账户:wiener密码:peter

打开bp,开启抓包

在 Burp 中,转到“代理”>“HTTP 历史记录”,研究组成 OAuth 流的请求和响应。这从授权请求开始GET /auth?client_id=[...]。

 

POST请注意,客户端应用程序(博客网站)从 OAuth 服务接收有关用户的一些基本信息。然后,它通过向自己的/authenticate端点发送包含此信息以及访问令牌的 请求 来让用户登录。

将请求发送POST /authenticate到 Burp Repeater。

在 Repeater 中,将电子邮件地址更改为carlos@carlos-montoya.net并发送请求。观察是否没有遇到错误。

右键单击请求POST并选择“浏览器中的请求”>“在原始会话中”。

复制此 URL 并在浏览器中访问它。

自动跳转界面,并且实验室已解决。

2.Lab: Forced OAuth profile linking

通过 Burp 代理流量时,单击“我的帐户”,进入一个普通的登录页面。

但请注意,有一个选项可以使用社交媒体个人资料登录,现在,只需使用表单直接登录博客网站即可。

Username:wiener

Password:peter

请注意,可以选择将的社交媒体资料附加到现有的帐户。

点击“附加社交资料”。

被重定向到社交媒体网站,使用社交媒体凭证登录以完成 OAuth 流程。

被重定向回博客网站。

退出,然后点击“我的账户”返回登录页面。

这次,选择“使用社交媒体登录”选项。

注意,您已通过新关联的社交媒体账户立即登录。

Continue跳转

在代理历史记录中,研究一系列用于附加社交资料的请求。

GET /auth?client_id[...]请求中,观察redirect_uri到此功能的将授权代码发送到/oauth-linking,重要的是,请注意请求不包含state用于防止 CSRF 攻击的参数。

拦截了 的请求GET /oauth-linking?code=[...]

重新抓包,右键单击此请求并选择“复制 URL”,放弃请求,这一点很重要,以确保代码未被使用,因此仍然有效。

关闭代理拦截并退出博客网站。

转到漏洞利用服务器Go to exploit server

并创建一个iframe,其中src属性指向刚刚复制的 URL。

结果应该如下所示:

<iframe src="https://YOUR-LAB-ID.web-security-academy.net/oauth-linking?code=STOLEN-CODE"></iframe>

将漏洞传递给受害者-deliver exploit to victim

当他们的浏览器加载时iframe,它将使用您的社交媒体个人资料完成 OAuth 流程,并将其附加到博客网站上的管理员帐户。

返回博客网站并再次选择“使用社交媒体登录”选项。

观察立即以管理员用户身份登录,转到管理面板并删除carlos以解决实验室。


Django-oauth-toolkit是一个用于处理OAuth 2.0协议的第三方库,它简化了在Django应用中实现OAuth认证流程的过程。配置一个基本的授权页面主要包括以下几个步骤: 1. **安装**: 首先需要在你的Django项目中安装`django-oauth-toolkit`,可以使用pip命令: ``` pip install djangorestframework-django-oauth-toolkit ``` 2. **添加依赖到settings.py**: 将`rest_framework`和`oauth2_provider`添加到你的INSTALLED_APPS列表中。 3. **设置授权端点**: 在`urls.py`文件中,通常会包含OAuth2Provider的应用URL模式,比如: ```python from rest_framework import routers from oauth2_provider import views as o2p_views router = routers.DefaultRouter() router.register(r'authorize', o2p_views.AuthorizationView) router.register(r'token', o2p_views.TokenView) urlpatterns = [ ..., path('oauth/', include(router.urls)), ] ``` 4. **配置授权视图**: 需要创建一个模板文件,如`templates/oauth/authorize.html`,这个模板将展示给用户进行授权的表单。 5. **启动认证服务**: 在视图函数中,你可以选择启动一个本地服务器让用户访问授权页面,通常是通过`o2p_views.start_authorization_server()`。 6. **触发授权流程**: 用户在浏览器中打开授权页面后,需要同意应用程序的权限请求。完成授权后,会返回一个授权码或者直接生成一个access token。 7. **客户端配置**: 如果你有前端应用,需要注册客户端并获取客户端ID和密钥,以便在授权成功后进行后续的token请求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值