关注公众号,阅读优质好文。
我将与大家分享我在 Bugcrowd 的某个项目中发现的一个漏洞,该项目中有一个“用户模拟”功能。
什么是用户模拟?
用户模拟允许管理员在不知晓用户凭据的情况下“以用户身份登录”。这种功能常见于管理员需要调试问题、审查用户权限或解决投诉的平台中。管理员通过用户模拟可以:
-
调试用户报告的问题;
-
验证用户特定配置;
-
从用户的角度调试平台行为。
例如,如果某个用户报告无法访问其文件,管理员可能会模拟该用户测试上传功能并调查问题。一旦问题解决,管理员会结束模拟会话并恢复到其管理员账户。
漏洞细节
在目标系统(如 example.com)中,平台提供了一项用户模拟功能来帮助管理员解决用户问题。具体如下:
1.管理员模拟用户
-
管理员进入“用户”部分,选择需要模拟的用户;
-
点击“模拟”后,应用会为管理员创建一个新会话,以用户身份操作。
2.会话管理
-
模拟期间,管理员的原始会话会被暂停;
-
模拟会话与被模拟的用户绑定。
3.停止模拟
-
当管理员点击“停止模拟”时,会返回到原始会话。
我在调查“活动会话”功能时(该功能属于另一个端点)发现,该页面显示了登录用户所有的活动会话,包括模拟期间创建的会话。页面内容如下:
我决定撤销除当前会话以外的所有会话(便于清理不必要的会话)。现在,唯一活跃的会话是我的。
接着,当管理员模拟我的账户时,会话情况如下:
并且,会话 ID 可以通过以下两种方式看到:
1、查看 HTML 源代码在浏览器开发者工具(按 F12)中检查“撤销”按钮的 HTML 源代码,数据中会暴露会话 ID,例如:
<button id="revoke-session-1234" class="revoke-button" data-session-id="abcd1234efgh5678ijklmnop">Revoke</button>
POST /users/sessions/revoke HTTP/1.1
Host: example.com
Content-Type: application/json
Authorization: Bearer <access_token>
{
"session_id": "abcd1234efgh5678ijklmnop"
}
document.cookie = "_session_id=abcd1234efgh5678ijklmnop";

刷新页面后,我成功通过管理员的临时会话实现管理员身份登录。接着,我点击“停止模拟”,系统返回管理员原始会话,从而使得我保持管理员原始身份,进而拥有所有权限。
归纳
1、攻击者以普通用户身份登录平台;
2、在“活动会话”标签页中,撤销除当前会话外的所有会话,钓鱼管理员;
3、管理员登录并模拟攻击者的账户;
4、模拟后,管理员获得与攻击者账户关联的临时会话 ID;
5、攻击者通过 HTML 源代码或拦截 HTTP 请求获取该会话 ID;
6、攻击者在开发者工具中替换现有会话 ID 为管理员的会话 ID,并刷新页面;
7、攻击者以管理员身份登录,并点击“停止模拟”按钮;
8、系统恢复管理员的原始会话,攻击者成功以管理员身份保持登录。
赏金
该漏洞被公司确认为高危漏洞,最终支付了 1250 美元 的赏金。
原文始发于微信公众号(玲珑安全):通过模拟功能实现提权(Bugcrowd)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论