CD's second night

WIZ-2025竞标赛-第三期(Breaking The Barriers)

type
status
date
slug
summary
tags
category
icon
password

Breaking The Barriers

PS:拿到env信息后可以放在自己宿主机的终端上执行 wiz平台网络会存在不稳定

初始访问

路线提示:
基础环境:
我们根据题意猜解一下攻击路线:
我们有client,但是应该没有访问权限,因此需要利用$WEB_APP_ENDPOINT去利用接口接管,进而进行后续操作(甚至获取flag)。
 

权限提升

首先我们尝试登录client,但是报错
类似 AADSTS90002 的错误是因为这个租户在 Azure 未订阅或者长时间不活跃,又或者tenant_id不正确,可尝试加上 --allow-no-subscriptions 参数进行无订阅登录,详见:https://stackoverflow.com/questions/63226826/azure-login-for-tenant-failing-for-az-app-principal-with-no-subscription-found-m
还是一样报错,基本可以确认是tenant_id不正确。
接下来从$WEB_APP_ENDPOINT寻找信息
 
直接curl能获取到网页和它的前端源代码,这里就是题目提到的sso认证。
notion image
带有一个创建用户的接口 且带有谷歌验证器
notion image
 
我们尝试构造创建一下账户 直接skipRecaptcha=true即可绕过 token可以是任意值
(这里是因为wiz经常会断连 所以我简化一条龙命令获取可以用于登陆的VICTIM_TENANT_ID)
其中UPN 是 User Principal Name,格式通常为 username@domain.com 也就是我们create_user接口返回的邮箱
最后一步就是利用 Azure 的 OpenID discovery 机制动态获取某个域名(组织)的租户ID。${UPN#*@}就是域名,这部分可以参考文章:https://www.mistercloudtech.com/2023/07/11/get-the-tenant-id-for-any-microsoft-entra-tenant/
notion image

🔎 进一步参考

  • medium.com: 使用 OpenID Connect 获取租户元信息的机制。
 
写在我们可以尝试登录azure-cli了
notion image
成功登录之后就是翻信息
查询groups的时候确实看到了CTF标签
拿到 membershipRule 后,我苦恼许久,GID+RID一直没有访问权限(后面讲怎么获取GID+RID),以为是gourp太多结果导致需要FUZZ+正则,就各种 $filter=department eq 'Finance' and jobTitle eq 'Manager'"去“捞人”。结果在neko的解惑下发现这个另有出路
 
另外先放一边 拿一下更多信息
  1. az account get-access-token 查看token权限
  1. 获取flag组的GID+RID
az rest --method GET --url "https://graph.microsoft.com/beta/groups" 可以招到GID
notion image
 
获取RID
 
返回::权限不够
notion image
 

账户邀请

之前没怎么关注User.Invite.All权限,在neko和dvk的指点下领悟过来的,果然ctf的每一个设计都有用到的地方。我们的token是拥有一个权限叫做User.Invite.All,也就是可以邀请其他人加入组织
再加上我们之前命中的规则: • (user.displayName -startsWith "CTF") and (user.userType -eq "Guest")
这样你的来宾账号会自动被收进目标组。由于该组已被分配到企业应用“CTF Challenge Flag”,你这个来宾账号就会被认为“有权使用该应用”。
  1. 发送邀请
  • 用 Graph 创建邀请,直接把显示名设成 CTF 开头;设置 sendInvitationMessage=false,这样响应里会返回 inviteRedeemUrl,你可以直接点链接完成接受,无需真的收邮件。
notion image
• 记下响应里的 inviteRedeemUrl。用浏览器打开它,按提示用你的邮箱对应的账号登录完成“接受邀请”。
notion image
这里再返回到我们之前尝试获取rid提示没有权限,使用来宾账户即有权限,我们先用az login --device-code 免账密登录比较方便
 
这时候我们再次执行
能获取到flag的存储桶地址
 
当然我们直接点击https://myapps.microsoft.com/里面的wzi flag 也是直接能访问到存储桶
但是它提示我们没有权限访问 这时候直接拿当前账户的token
ACCESS_TOKEN=$(az account get-access-token --resource https://storage.azure.com --query accessToken -o tsv)
 
再结合Azure存储服务的底层REST API中的x-ms-version: 2023-11-03 (API版本控制)和x-ms-date: $(date -u '+%a, %d %b %Y %H:%M:%S GMT') (请求时效性与安全) 构造curl即可,这一步骤pwnlab有类似题目https://labs.pwnedlabs.io/azure-blob-container-to-initial-access("x-ms-version: 2019-12-12”)
notion image
 
Loading...