我将与您分享我在 Bugcrowd 的一个程序中发现的一个有趣的错误。它位于具有 “impersonating user” 功能的程序中。
什么是模拟?
模拟允许管理员在不知道其他用户的凭据的情况下 “以 ” 其他用户的身份登录。此功能在管理员需要调试问题、查看用户权限或解决投诉的平台中很常见,管理员使用模拟来:
-
排查用户报告的问题。 -
验证特定于用户的配置。 -
从用户的角度调试平台行为。
例如,如果用户报告他无法访问其文件,则管理员可能会模拟该用户来测试上传功能并调查问题。解决后,管理员将结束模拟会话并恢复其管理员帐户。
模拟在我们的目标上的工作原理
现在让我们谈谈目标系统 — example.com。该平台提供了一项功能来模拟用户,以帮助他们解决问题。以下是它的工作原理:
1.管理员模拟用户:
-
管理员导航到 “Users” 部分并选择他们想要模拟的用户。 -
单击 Impersonate(模拟)后,应用程序将为管理员创建一个新会话以充当用户。
2. 会话管理:
-
模拟时,管理员的原始会话将暂停。 -
模拟会话已创建并绑定到被模拟的用户。
3. 停止冒充:
-
当管理员单击 Stop Impersonating(停止模拟)时,他们将返回到其原始会话。
当我调查“活动会话”功能(它是不同终端节点的一部分)时,我发现该页面显示了与登录用户关联的所有活动会话,包括在模拟期间创建的会话。它显示如下内容:
我决定撤销除当前会话之外的所有会话(对于清理不必要的会话很重要)。现在,唯一活跃的会话是我的会话。
现在,当管理员冒充我的帐户时,我们会发现一些有趣的东西:
是 当管理员模拟我的帐户时,它会显示在 Active Sessions (活动会话) 部分中,其会话 ID 以两种方式显示:
选项 1:通过检查页面 HTML 源中的“撤销”按钮(在浏览器的开发人员工具中使用 F12)。会话 ID 在请求负载中公开。它看起来像这样:
<buttonid="revoke-session-1234" class="revoke-button" data-session-id="abcd1234efgh5678ijklmnop">Revoke</button>
选项 2:通过在单击 “Revoke” 按钮后拦截 HTTP 请求,如下所示:
POST /users/sessions/revoke HTTP/1.1
Host: example.com
Content-Type: application/json
Authorization: Bearer <access_token>
{
"session_id":"abcd1234efgh5678ijklmnop"
}
我从拦截的请求中复制了会话 ID 并将其删除。现在,我已将临时会话 ID 分配给模拟我的帐户的管理员。
为了控制,我:
打开 F12,转到 Cookie 部分,并将会话 ID 替换为管理员的会话 ID :
或者,我可以在控制台中手动设置它:
document.cookie ="_session_id=SESSION_ID";
然后刷新页面。
此时,我以管理员身份登录,冒充我的帐户。
发生了什么事?
该漏洞利用起作用的原因是临时会话仍然处于活动状态,并且管理员仍在模拟它。从本质上讲,我跳转到了管理员使用的临时会话,而不是管理员的原始会话。
当管理员请求模拟用户时,应用程序首先检查用户是否为管理员。如果是,则会为模拟创建一个临时会话 ID。当管理员停止模拟时,应用程序会检查会话 ID 并恢复管理员的原始会话。
进入管理员的帐户后,我点击了“停止冒充”,结束了冒充会话并恢复了管理员的原始会话。但是,由于系统只检查了临时会话 ID 值
我能够以管理员身份保持登录状态,从而有效地提升了我的权限。
利用此漏洞的步骤:
-
以普通用户(攻击者)身份登录平台。 -
撤销 “Active Sessions” 选项卡中的所有会话,攻击者的会话除外 - 管理员登录
并模拟攻击者的帐户。 -
模拟后,管理员会收到与模拟用户(攻击者)关联的临时会话 ID。 -
攻击者检查页面 HTML 源中的“撤销”按钮,或拦截请求并从请求中复制会话 ID。 -
攻击者打开 Developer Console (F12),转到 Cookie 部分,清除其现有的会话 Cookie,并将其替换为管理员的会话 ID。然后,他们刷新页面。 -
现在,攻击者以 admin 身份登录。攻击者现在可以单击“停止模拟”按钮,管理员通常会单击该按钮。 -
由于攻击者的会话现在正在使用模拟的会话 ID,因此单击“停止模拟”会将其返回到管理员的原始会话
最后,该公司承认该问题严重性较高,并获得了 1250 美元的报酬
感谢阅读!
其它相关课程
详细目录
QT开发底层原理与安全逆向视频教程
linux文件系统存储与文件过滤安全开发视频教程(2024最新)
linux高级usb安全开发与源码分析视频教程
linux程序设计与安全开发
-
windows恶意软件开发与对抗视频教程
-
-
-
windows网络安全防火墙与虚拟网卡(更新完成)
-
-
windows文件过滤(更新完成)
-
-
USB过滤(更新完成)
-
-
游戏安全(更新中)
-
-
ios逆向
-
-
windbg
-
-
还有很多免费教程(限学员)
-
-
rust语言全栈开发视频教程
-
更多详细内容添加作者微信
-
-
原文始发于微信公众号(安全狗的自我修养):通过模拟功能进行权限提升功能
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论